Thinking In Java --- 读书笔记

带标签的break、continue, 跳转到标签声明位置。java

switch支持 short、byte、char、int、 枚举、String, 支持前四个类型的包装类(自动拆箱)。数组

成员初始化: new对象, 初始化字段默认值,按字段的出现顺序进行初始化。并发

构造器初始化:变量定义的前后顺序决定了初始化的顺序, 先初始化字段而后调用构造函数。函数

静态数据初始化: 优先初始化静态变量(只在类第一次加载时初始化), 在初始化普通变量。工具

final: 对于基本类型,final使数值恒定不变;对于引用对象,引用地址恒定不变。final定义的类变量,须要再定义时、构造方法中或者普通方法快中初始化;static final定义的类变量,须要再定义时、静态方法快中初始化。对象

多态: 只有普通方法的调用是多态的,向下转型会进行类型检查(以异常抛出)。继承

内部类 接口

(1)普通内部类初始化,经过外部类对象去建立内部类对象 new Outer().new Inner();    内存

(2)静态内部类(嵌套类):new Outer.Inner(); 嵌套类对象建立不依赖外围类对象,不能访问外围类非静态对象。字符串

String 原引用地址指向值不可变, 全部方法返回新的字符串对象。

RTTI 反射: Method、Class、Reflect包; Class.newInstance()不能是接口, 依赖无参构造函数。

泛型: 泛型不能实例化, 不能实例化数组 , 例如T t=new T() 解决 T t=(T)new Object();   \

            类型擦除;

数组:数组标识符是一个引用,保存指向其余对象的引用; 对象数组保存的是引用,基本类型数组直接保存基本类型的值;

    Arrays工具类,sort 、toString、binarySearch,sort基本类型用快排,对象类型用堆排;

    泛型数组初始化问题,正确Peel<Integer>[] peels = new Peel[2]; 错误Peel<Integer>[] peels = new Peel<Integer>[2];

容器:

    List list2 = Collections.unmodifyList(list);   list2和list都不能发生改变, 数组内存结构不能改变

 序列化: 若是序列化到单一流, 就能够恢复原先的对象网。

    Externalizable和Serializable:

1.Serializable序列化时不会调用默认的构造器,而Externalizable序列化时会调用默认构造器的。 
2.Serializable:一个对象想要被序列化,那么它的类就要实现 此接口,这个对象的全部属性(包括private属性、包括其引用的对象)均可以被序列化和反序列化来保存、传递。 
Externalizable:他是Serializable接口的子类,有时咱们不但愿序列化那么多,能够使用这个接口,这个接口的writeExternal()和readExternal()方法能够指定序列化哪些属性。

枚举: import static 枚举类, 无需再用 枚举类.属性 , 直接使用 属性。枚举继承自java.lang.Enum, 不可再继承, 能够实现接口。枚举可用在switch。

并发: Callable具备类型参数的泛型,类型参数表示call中返回的值类型,必须用ExecutorService.submit()方法调用。

相关文章
相关标签/搜索