本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。
基本类型和包装类型
详情
- 基本类型:byte、short、int、long、float、double、char、boolean。
- 包装类型:Byte、Short、Integer、Long、Float、Double、Character、Boolean。
详情
- 用途:除了定义一些常量和局部变量之外,我们在其他地方比如方法参数、对象属性中很少会使用基本类型来定义变量。并且,包装类型可用于泛型,而基本类型不可以。
- 存储方式:基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被 static 修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。
- 占用空间:相比于包装类型(对象类型), 基本数据类型占用的空间往往非常小。
- 默认值:成员变量包装类型不赋值就是 null ,而基本类型有默认值且不是 null。
- 比较方式:对于基本数据类型来说,== 比较的是值。对于包装数据类型来说,== 比较的是对象的内存地址。所有整型包装类对象之间值的比较,全部使用 equals() 方法。
详情
答:浮点数运算的精度问题是由于浮点数的二进制表示方式导致的。 浮点数在计算机中是以二进制的形式存储的,而二进制无法精确表示某些十进制小数,比如 0.1。 所以在计算机中,0.1 会被近似表示为一个无限循环小数。这就导致了浮点数运算的精度问题。 解决方法:可以使用 BigDecimal 类来解决浮点数运算的精度问题。
详情
- 通过使用 final 关键字,String 类可以被设计成不可变的。
- 不可变的字符串有利于字符串常量池的实现,提高字符串的共享性和安全性。
- 字符串常量池位于方法区,存储字符串常量。
详情
- String 是不可变的字符串,每次修改都会生成新的字符串对象,适用于字符串不经常变化的场景。
- StringBuffer 是线程安全的可变字符串,适用于多线程场景。
- StringBuilder 是非线程安全的可变字符串,适用于单线程场景。
面向对象
面向对象(Object-Oriented Programming, OOP)是 Java 的核心编程范式,通过定义类和对象来组织程序。主要概念包括:
- 类:描述一组具有相同属性和行为的对象的模板。
- 对象:类的实例,具有状态和行为。
- 封装:通过将数据和方法封装在类中,控制访问权限,提高安全性和可维护性。
- 继承:通过继承父类,子类可以重用父类的属性和方法,并且可以扩展或重写父类的方法。
- 多态:通过接口或继承实现不同对象以统一的方式被调用的能力,具体执行方法由实际对象类型决定。
详情
答:封装、继承、多态。
重载与重写
反射
异常
JAR (Java Archive)
详情
在我的项目配置,项目中使用 maven 来管理依赖和打包,在编译后,会打包到./target/
,java 是通过 classpath 来识别依赖的。
- 普通打包:
java -cp xxx.jar:lib/* com.example.demo.DemoApplication
,需要使用-cp
指定依赖包的位置。 - spring-boot-maven-plugin 打包:
java -jar ***.jar
,spring-boot-loader 会自动识别BOOT-INF/lib
下的依赖包。