Java

25 篇文章
Java面试-8:静态方法和实例方法的区别

Java面试-8:静态方法和实例方法的区别

文章主要讨论了静态方法和实例方法的调用方式及访问类成员的限制。静态方法可以通过`类名.方法名`或`对象.方法名`的方式调用,但推荐使用`类名.方法名`,因为静态方法属于类而非对象,使用对象调用容易造成混淆。实例方法只能通过`对象.方法名`调用。此外,静态方法只能访问静态成员(静态变量和静态方法),不能访问实例成员(实例变量和实例方法),而实例方法则没有这种限制。

Java面试-7:成员变量与局部变量的区别?

Java面试-7:成员变量与局部变量的区别?

本文详细对比了成员变量和局部变量的核心区别。成员变量定义在类中、方法外,属于类或对象,存储在堆内存,随对象创建而存在,默认有初始值,可使用访问修饰符。局部变量定义在方法内、方法参数或代码块内,存储在栈内存,随方法或代码块执行而创建,执行结束即销毁,无默认值,仅能使用final修饰符。文章通过代码示例直观展示了两者在定义、内存存储、生命周期和修饰符方面的差异,帮助读者更好地理解它们的区别。

Java面试-6:基本数据类型

Java面试-6:基本数据类型

Java的基本数据类型分为数值型和非数值型两大类,共8种。数值型包括字节型(byte)、短整型(short)、整型(int)、长整型(long)、单精度浮点(float)和双精度浮点(double),用于存储数字;非数值型包括布尔型(boolean)和字符型(char),分别用于存储布尔值和单个字符。每种类型有不同的占用字节、取值范围和默认值,适用于不同的场景。例如,int是最常用的整型,double是最常用的小数类型,char支持Unicode编码,可存储中文字符。使用时需注意long和float的声明后缀(L和f),以及boolean只能取true/false,不能用0/1替代。基本数据类型直接存储值,速度快,是Java编程的基础。

Java面试-5:移位运算符

Java面试-5:移位运算符

移位运算符是编程语言中的基本运算符,广泛应用于高效计算、内存节省、位字段管理、哈希算法、数据压缩、数据校验和内存对齐等领域。Java 中有三种移位运算符:左移(`<<`)、带符号右移(`>>`)和无符号右移(`>>>`)。左移操作相当于乘以 2 的幂次方,右移操作相当于除以 2 的幂次方。移位运算符在 `HashMap` 等 JDK 源码中也有应用。移位操作符仅支持 `int` 和 `long` 类型,对 `short`、`byte`、`char` 类型进行移位前会先转换为 `int`。当移位位数超过数据类型的位数时,会先求余再进行移位操作。掌握移位运算符知识有助于理解源码和优化代码。

Java面试-4:自增自减运算符

Java面试-4:自增自减运算符

在Java编程中,处理整数类型变量的增减操作时,可以使用自增运算符(`++`)和自减运算符(`--`)来简化代码。这两种运算符可以放在变量之前(前缀形式)或之后(后缀形式)。前缀形式(如`++a`)会先对变量进行自增或自减操作,然后再使用变量的值;后缀形式(如`a++`)则会先使用变量的当前值,然后再进行自增或自减操作。为了方便记忆,可以采用口诀:“符号在前就先加/减,符号在后就后加/减”。通过示例代码可以看出,不同形式的运算符会导致变量在赋值或使用时的值不同。

Java面试-3:为什么说 Java 语言“编译与解释并存”?

Java面试-3:为什么说 Java 语言“编译与解释并存”?

文章详细解释了编译与解释的核心区别,并深入探讨了Java的“编译+解释”执行流程。编译型语言如C/C++直接将源代码编译成机器码,运行时无需额外处理;而解释型语言如早期Python则在运行时逐行解释执行源代码,无中间代码生成。Java则结合了两者的优点:首先,通过`javac`编译器将`.java`源代码编译成`.class`字节码文件(中间代码),这一步实现了“一次编译,到处运行”的跨平台特性;然后,JVM在执行字节码时,采用解释执行和即时编译(JIT)相结合的方式,解释器逐行翻译字节码为机器码,同时对热点代码进行编译优化,提升了运行效率。这种设计既保证了跨平台性,又优化了性能,是Java“Write Once, Run Anywhere”理念的核心支撑。

Java面试-2:什么是字节码?采用字节码的好处是什么?

Java面试-2:什么是字节码?采用字节码的好处是什么?

字节码(Bytecode)是介于源代码和机器码之间的中间代码,常见的例子是Java编写的`.java`源代码通过编译生成`.class`文件,其中包含的就是字节码。字节码并非直接供人类阅读或CPU执行,而是由Java虚拟机(JVM)执行。 采用字节码的主要好处有以下三点: 1. **跨平台性**:Java编译后的字节码可以在任何安装了JVM的系统上运行,实现了“一次编写,到处运行”的特性。 2. **虚拟机优化**:JVM可以对字节码进行即时编译(JIT)以提升性能,并提供内存管理、垃圾回收和安全检查等功能。 3. **语言无关性**:只要编译成标准字节码,多种语言如Kotlin、Scala、Groovy等都可以在JVM上运行,虚拟机负责屏蔽底层系统差异。 总结来说,字节码是虚拟机能理解和执行的中间指令,具备跨平台、可优化、安全和多语言兼容的优势。

Java面试-1:JVM、JDK、JRE的区别与联系

Java面试-1:JVM、JDK、JRE的区别与联系

本文详细介绍了Java开发中的三个核心概念:JVM、JRE和JDK,并分析了它们之间的关系和实际应用场景。JVM(Java虚拟机)是运行Java字节码的虚拟计算机,负责跨平台运行Java程序,管理内存和垃圾回收。JRE(Java运行时环境)是运行Java程序所需的最小环境,包含JVM和核心类库,适用于仅运行Java程序的场景。JDK(Java开发工具包)是开发Java程序的完整工具包,包含JRE和编译、调试等开发工具,适用于编写、编译和调试Java代码的场景。三者之间的关系可以总结为:**JDK ⊃ JRE ⊃ JVM**。实际使用中,开发用JDK,仅运行用JRE,跨平台靠JVM。

构建 SSM(Spring + SpringMVC + Mybatis)的 Maven 项目

构建 SSM(Spring + SpringMVC + Mybatis)的 Maven 项目

文章详细介绍了一个基于Spring、MyBatis和Maven的Java Web项目的构建过程,分为两种配置方式。 **方式一:传统XML配置** 1. 创建Maven项目,项目结构包括多个包和文件。 2. 创建数据库`mybatis`,并创建`user`表。 3. 在`pom.xml`中引入相关依赖,如Spring、MyBatis、Junit、Druid等。 4. 配置项目文件,包括`application.xml`、`db.properties`、`SqlMapConfig.xml`和`web.xml`。 5. 创建实体类`User`,定义属性及`toString`方法。 6. 创建控制器`UserController`,定义查询用户信息的方法。 7. 实现业务层`UserService`接口及其实现类`UserServiceImpl`。 8. 实现DAO层`UserDao`接口及对应的`UserDao.xml`,定义SQL查询。 **方式二:无XML配置** 1. 项目结构与方式一类似,但无需配置`web.xml`、`application.xml`和`SqlMapConfig.xml`。 2. 使用`App.java`和`WebStart.java`替代XML配置,定义数据源、SQL会话工厂等。 3. `WebStart.java`实现`WebApplicationInitializer`接口,替代`web.xml`的功能。 **测试与运行** 1. 通过`http://127.0.0.1/user/get`获取全部用户信息。 2. 通过`http://127.0.0.1/user/getId?id=41`根据ID查询用户信息。 文章展示了如何通过传统XML配置和无XML配置两种方式构建一个基于Spring和MyBatis的Java Web项目,并通过测试验证了项目的功能。

修改idea 创建maven-archetype-webapp 项目时,web.xml默认头文件版本号

修改idea 创建maven-archetype-webapp 项目时,web.xml默认头文件版本号

本文详细介绍了一个技术解决方案:如何在IntelliJ IDEA中创建Maven项目时,将默认的web.xml版本修改为4.0。文章分为七个步骤:1) 找到maven-archetype-webapp jar包的位置;2) 确定该jar包的下载路径;3) 找到maven-archetype-webapp.jar;4) 打开该jar包;5) 删除原有的web.xml;6) 创建一个新的web.xml,编码为UTF-8;7) 将新创建的web.xml放入jar包中。通过这些步骤,用户可以成功修改Maven项目中web.xml的默认版本。