1.代码块
- 代码块中定义的变量是局部变量。
- 初始化代码块是放在构造函数中执行的,定义在类中的。
- 局部代码块是定义在方法中的。
1.1.静态代码块
- 在加载字节码的时候就执行了
- 在主方法之前执行的,只执行一次。
2.组合关系 class Person { Dog pet ; } 当第一次使用的时候加载到JVM当中,只加载一次,之后从内存中直接使用。
3.类的加载:当第一次创建该类对象的时候,加载到内存中。在加载的时候,会执行static
3.1.字段初始化问题
- 静态字段初始化,是在静态代码块中初始化
- 非静态字段初始化,是在构造器中初始化
- 子类构造器默认会调用父类的构造器。
4.final关键字,继承的弊端,破坏了我们的封装,子类可以访问父类的实现细节,,可以覆盖父类中的方法,如何避免这种情况?
- final可以修饰字段,必须手动初始化值。 final修饰一个变量,就代表一个常量。规则是,字段大写MAX_VALUE
- final修饰方法的时候,方法不能被覆盖。
- final修饰类的时候,该类不能被继承。
- final修饰基本数据类型的时候,代表值不能修改,当final修饰引用数据类型的时候,代表地址不能被修改。
5.设计模式
5.1.单例模式,一个类在内存当中只有一个对象,别人不能再创建对象。
- 饿汉模式 代码实现 (饿汉模式的单例不能被继承)
- 必须要在该类中创建一个对象出来。
- 私有化自己的构造器防止外界通过构造器来创建新的对象。
- 给外界提供一个方法,能够获取已经创建好的对象。
- 单例模式的好处
- 控制自资源的使用
- 控制实例的产生数量,节省资源
- 作为通信媒介,数据可以共享,变量值可以共享。
5.2 如何设计工具类
- 一般都设计成static的方法,通过类名去调用
- 如果一个工具类没有使用static,那么我们一般把工具类设计成单例,通过单例获取对象调用工具类方法
- 如果工具类全部使用static修饰,此时必须把工具类的构造器私有化,防止创建对象调用静态方法。(有什么区别)
6.包装类:对基本数据类型进行包装,把基本数据类型包装成一个对象
- 把基本数据类型变成包装类就是装箱操作。自动装箱,就是把一个基本数据类型的值赋值给包装类。
- 把包装类转换成基本数据类型,就是拆箱操作。自动拆箱,就是一个包装类赋值给基本数据类型。
- new Boolean("true"),除了true,其他全部是false。
6.1 基本数据类型和包装类的区别
- 初始值不同,一个是0,一个是null
- 包装类提供了很多方法可以直接使用
- 集合框架不允许存放基本数据类型,只能存放对象
6.2什么时候使用基本数据类型,什么时候使用包装类
- 类中的成员变量一般使用包装类
- 方法中,一般使用基本数据类型,基本数据类型存放再栈中,包装类型存放再堆中6
6.3 包装类的缓存设计 Integer.valueof();Integer的缓存范围-128~127,Java自动装箱的陷阱