Java基础备忘录(随时更新中)


Java基础备忘录
(mainly based on Van Der Linden's book: Just Java 2, 4ed)

  1. Object的方法
    1. public native int hashCode()   散列码是一个能够唯一的表示单个对象的值。最简单的是,采用对象的内存地址作为它的散列码。散列码用作HashTable 的key,从而使任何对象可以放入HashTable。
    2. public boolean equals(Object obj)  当重写自定义类的equals()时,也应当重写hashCode()方法以确保等价的对象能获取同一个散列码。如果不这样做,在操作Collection类中的某些数据结构时,自己的对象将会出现莫名其妙的错误。
    3. protected native Object clone() throws CloneNotSupportedException  为所有Java类提供默认的浅克隆实现,即:如果该类中含有其他对象的引用,则仅复制引用本身。而另一种递归克隆所有引用的克隆方式称为深层克隆(deep clone),实现deep clone需要重写类的clone()方法。
  2. 基本数据类型 (char, boolean, byte, short, int, long, float, double)
    1. 基本类型转型 时,不可直接将高精度类型(机器内占用位数多)赋给低精度类型,但对给char赋值的整数(int)例外。
      • char a = 0x892; char b = 982; char c = (char)70000; //超出范围则需强制(显式)转型  char d = (char)-98; //Ridiculous, but legal  
      • char c = (char)(c+13);// the cast is required 
      • 总结:赋值时,如果=右边给一个确定的值,编译器可以检查出右操作数是否超出左操作数允许的范围,从而判断是否需要显式的转型;如果没有给一个确定的值,比如,包含运算(即使全是常量的运算),包含变量,则必须显式转型。
      • char变量可以直接赋值到所有算术类型:byte, short,  【对前2个,超过2^15-1的数呢?】 int, long, float, double.
      • 【char es = (byte)8;char es = 8;也都合法,解释理由:_______】
    2. Java中所有6种数字类型都是有符号数 ,最左边的位(最高有效位)表示符号,其余位表示值, 采用2的补数表示法,现代大部分CPU都是这样表示的【What? How? Why?】 。0被村委正的2进制数,因此整数最大数的绝对值比负数少1.【那么,对于byte: 10000000和11111111,各代表什么呢?】
    3. 为加速内存访问, Java采用字节(8位)存储每个布尔数 ,但在计算运行时,却不一定是这样(与虚拟机实现有关),例如,SUN的JVM会在把布尔值压入栈中时,将含它的字符(8位)提升到一个32位整数。至少,不要认为布尔值是个1位长的数据类型且会节省空间。【P28: 如果用户在欧洲国家使用计算机,Java将会自动地从16位转换到8位字符集。【HOW???如何手工转换呢?】
    4. Java支持16位Unicode字符集,
  3.   类的初始化顺序

           a)          对于 单独一个类 ,初始化的顺序是:

           1.          静态变量

           2.          静态初始化块

           3.          非静态变量

           4.          非静态初始化块

           5.          构造函数

        b)         父子继承关系中 的初始化顺序是:

           1.          父类 -- 静态变量

           2.          父类 -- 静态初始化块

           3.          子类 -- 静态变量

           4.          子类 -- 静态初始化块

           5.          父类 -- 变量

           6.          父类 -- 初始化块

           7.          父类 -- 构造器

           8.          子类 -- 变量

           9.          子类 -- 初始化块

           10.      子类 -- 构造器

           11.    

        可见, 并不是父类完全初始化完毕后才进行子类的初始化 ,实际上子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成了。     


你可能感兴趣的:(java,C++,c,虚拟机,C#)