1. final
关键字的作用
final
在修饰变量(静态变量、实例变量)的时候表示常量,即只能被赋值一次、变量在赋值后就不能再修改了,使用final
可以避免误操作final
还可以修饰实例方法和局部变量- Java 内存模型中保证可见性(Visibility)
2. 实例方法直接访问实例变量,实现原理是
- 在实例方法中,有一个隐含的参数,这个参数就是当前操作的实例自己
this
- 直接操作实例变量,实际也需要通过参数进行
3. 实例方法和类方法(静态方法)的区别
- 静态方法只能访问静态变量,不能访问实例变量,可以调用其他的静态方法,不能调用实例方法
- 实例方法既能访问实例变量,也能访问静态变量,既可以调用实例方法,也可以调用静态方法
4. 实际开发中,我们经常把实例变量定义为 private
的原因是
- 这是为了减少误操作,直接访问变量没有办法进行参数检查和控制
- 而通过方法修改,可以在方法中进行检查
5. 静态初始化代码块的执行时机是
- 静态初始化代码块在类加载的时候执行,在任何对象创建之前执行,且只执行一次
- 结论:基静态、子静态 -> 基实例代码块、基构造 -> 子实例代码块、子构造
6. 构造方法的特点
- 名称是固定的,与类名相同
- 没有返回值,也不能有返回值。构造方法隐含的返回值就是实例本身
- 通过构造方法,可以更为简洁地对实例变量进行赋值
- 调用构造方法是 new 过程的一部分,实例方法通过对象调用,构造方法通过 new 调用
7. this
关键字的作用
- 表示当前实例
- 用于在构造方法中调用其他构造方法(必须放在第一行)
8. this
用于调用构造方法时为什么必须放在第一行
- 为了避免误操作,防止后续修改被覆盖
- 构造方法是用于初始化对象的,如果要调用别的构造方法,先调用别的,然后根据情况自己再做调整
- 而如果反过来自己先初始化了一部分,再调用别的,自己的修改可能就被覆盖了
9. 默认构造方法的特点
- 每个类都至少要有一个构造方法,在通过
new
创建对象的过程中会被调用 - 但如果构造方法没什么操作要做,就可以省略。Java 编译器会自动生成一个默认的构造方法,也没有具体操作。但一旦定义了构造方法,Java 就不会再自动生成默认的
10. 为什么 Java 有时候自动生成构造方法,有时候不生成呢
- 在没有定义任何构造方法的时候,Java 认为用户不需要,所以就生成一个空的以被
new
过程调用 - 定义了构造方法的时候,Java 认为用户知道自己在干什么,认为用户是有意不想要不带参数的构造方法,所以不会自动生成
11. 私有构造方法的使用场景可能有哪些
- 不能创建类的实例,类只能被静态访问。如
Math
和Array
类,它们的构造方法就是私有的 - 能创建类的实例,但只能被类的静态方法调用。常见的使用场景是单例模式:类的对象有且只能有一个
- 只是用来被其他多个构造方法调用,用于减少重复代码