抽象 封装 继承 多态
public 是众生平等
protect 是 肥水不流外人田
default 是 大人可以小孩不行
private 是 生是我家人,死我家鬼.
enum
- 表示常量
- 用于switch
- 添加更多方法
- 覆盖Object方法
- 实现接口
在使用 Enum 时候有几个地方需要注意:
- 枚举集合EnumSet和EnumMap,EnumSet保证集合中的元素不重复;EnumMap中的key是enum类型,而value则可以是任意类型。
- enum 类型不支持 public 和 protected 修饰符的构造方法,因此构造函数一定要是 private 或 friendly 的。也正因为如此,所以枚举对象是无法在程序中通过直接调用其构造方法来初始化的。
- 定义 enum 类型时候,如果是简单类型,那么最后一个枚举值后不用跟任何一个符号;但如果有定制方法,那么最后一个枚举值与后面代码要用分号';'隔开,不能用逗号或空格。
- 由于 enum 类型的值实际上是通过运行期构造出对象来表示的,所以在 cluster环境下,每个虚拟机都会构造出一个同义的枚举对象。
- 因而在做比较操作时候就需要注意,如果直接通过使用等号 ( ‘ == ’ )操作符,这些看似一样的枚举值一定不相等,因为这不是同一个对象实例。
java实例初始化顺序
静态变量 静态代码块 变量 初始化块构造器
如果继承父类呢
父类---静态变量 静态代码块 子类---静态变量 静态代码块 父类---变量 初始化块构造器 子类---变量 初始化块构造器
浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝。深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。这个方式称为深拷贝
String 数组
异常 运行时异常 检查型异常trycatch不要太大
深入理解Java的方法调用
(值传递和引用传递)
从JVM出发来看方法的调用
栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,每一个方法从调用开始到执行完成的过程,就对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。
栈帧包括了局部变量表、方法返回地址等信息。其中局部变量表是一组变量值空间,用于存放方法参数和方法内部定义的局部变量。
参数的引用传递不是单纯的将对象的引用传递给一个方法,而是将对象引用的地址传递给局部变量表里的参数引用,当在方法内部改变引用的地址时,只会影响方法内部的引用,而不会影响到方法外部的变量。但如果改变的是引用地址的值,方法内外的引用都会受影响。