thinking in java 第二天

来源:互联网 发布:win7网络共享无法访问 编辑:程序博客网 时间:2024/04/30 10:11

第四章

  1. java/c#中都不允许将一个数字作为布尔型。但是c/c++是允许的
  2. 练习5:用三位运算符加位运算符实现转2进制
    1. public String showBinary(int i){char[] buf = new char[32];int charPos = 32;do {buf[--charPos] = (i & 1) == 1?'1':'0';i>>=1;} while (i != 0);return new String(buf,charPos,32-charPos);}
  3. Integer.numberOfLeadingZeros(int i):在指定 int 值的二进制补码表示形式中最高位(最左边)的 1 位之前,返回零位的数量。如果指定值在其二进制补码表示形式中不存在 1 位,换句话说,如果它等于零,则返回 32。

第五章

  1. 区分重载:参数类型/参数顺序
  2. 为了能简便的发送消息给各种对象,编译器暗自吧“所操作对象的引用”作为第一个参数传给每个方法
  3. this关键字:表示对调用方法的那个对象的引用,即和第2点相对应
  4. this关键字对于将当前对象传递给其他方法必须使用
  5. this用于构造器:
    • 在一个构造器方法中,可以用this调用一个其他的构造器方法,但是不是调用两个
    • 除构造器方法外,编译器禁止在其他方法中通过使用this调用构造器
  6. static:可以认为是类方法,最主要的是static方法时,没有this的概念
  7. 清理:终结处理和垃圾回收
    • finalize()的“假设”原理:一旦垃圾回收器准备好释放对象所占的存储空间,将首先调用其finalize()方法,并且下一次垃圾回收动作发生时,才会真正回收对象占用的内存,所以值得注意的是,垃圾回收不发生,finalize()永远不会发生,而且一般是在调用本地方法时才会调用
    • 对象可能不被垃圾回收,当内存很多的时候一般就不会发生
    • 垃圾回收不等于析构
    • 垃圾回收器原理:
      • 引用计数法:很难解决循环引用的问题
      • 自适应的、分代的、停止-复制、标记-清扫法:依据是对任何活着的对象,一定能最终追溯到其存活在堆栈或者静态存储区之中的引用
        • 停止-复制:适用于垃圾较多的情况,因为JVM内存分配以“块”为单位,为了提高性能,含有大型对象的块用代数(generation count)来计数,从而不复制
        • 标记-清理:适用于垃圾较少的情况
  8. 初始化:
    • 类的每个基本类型数据成员(字段)都会保证有一个初始值,但自动变量一般会提醒not initialized error
    • 初始化顺序:即使变量定义散布于方法定义间,它们任然会在任何方法(包括构造器)被调用之前得到初始化;静态对象要在非静态对象之前
    • 对象的创建过程,假设有个Dog类
      • 即使没有显示的使用static关键字,构造器实际上也是静态方法。因此,当首次创建类Dog的对象时或者Dog类的静态方法/静态域首次被访问时,Java解释器必须查找类路径,以定位Dog.class文件
      • 然后载入Dog.class,有关静态初始化的所有动作都会执行,因此,静态初始化只有在Class对象首次加载的时候进行一次
      • 当用new Dog()创建对象时,首先将在堆上为Dog对象分配足够的内存
      • 这快内存会被清零,这就自动的将Dog对象中的所有基本类型数据都设置成默认值
      • 执行所有出现于字段定义处的初始化动作
      • 执行构造器
    • 静态块初始化与其他静态初始化动作一样
    • 数组初始化:
      • int[] a = {1,2,3,4,5};
      • String[] a = new String[10];
      • String[] a = new String[]{"123","456"};
    • 可变参数:Object... args
  9. getClass():
    • [ I:[表示这是后面紧跟的类型的数组,I表示是整形,即使整形数组
  10. enum:
    • oridinal():enum常量的声明顺序
    • static values():用来按照enum常量的声明顺序,产生由这些常量值构成的数组
    • enum可以在switch中使用
0 0
原创粉丝点击