0%

Java 类的基础(一):类的基本概念

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. 私有构造方法的使用场景可能有哪些

  • 不能创建类的实例,类只能被静态访问。如 MathArray 类,它们的构造方法就是私有的
  • 能创建类的实例,但只能被类的静态方法调用。常见的使用场景是单例模式:类的对象有且只能有一个
  • 只是用来被其他多个构造方法调用,用于减少重复代码
-------------------- 本文结束感谢您的阅读 --------------------