梦的尽头...
程序人生
 1、 得到整数n从右数第4个数:

int fourthBitFromRight = (n&8)/8 = (n & (1<<3) >> 3

2>>>对前面的位补0,而>>对前面的位填符号位。Java中没有<<<

3、移位操作符右边的参数要先进行模32运算(当左边的变元是long型,则模64),如1<<35 = 1<< 3 = 8。浮点运算的中间结果程度是不一致的。有些处理器适用80bit浮点存储器,有些则使用64bit80bit。直到最后才把结果截断为64bit,这样做会产生更准确的结果,还能避免指数溢出,而64bit的所有中间计算都被截断,不仅可能产生溢出,而且速度慢。Strictfp修饰的方法必须使用严格的浮点运算,以产生再生结果(满足可移植性)。

4、要得到完全可预测的结果比快速性能更为重要的话,请使用StrictMath类。

5、数字之间的合法转化。P44

6、布尔值和任何数字类型之间不能强制类型转换。

7、只有字符串常量会被共享,而表达式常量产生的结果并不共享。“= =”是判定两个串是否在同一位置。

8String name = JOptionPane.ShowInputDialog(“xx?”);将启动一个新线程,故要用System.exit(0);结束程序。

9java.text.NumberFormat可产生下列数据的标准格式化器:数字、货币、百分数。不过该类和地区locale是相关。类Format.printf(“%8.2f”,1000.0/3.0)有类似C的效果。

10、数组定义 int [] a 等价于int a[]

11、数组常量只能在初始赋值时可用,如int [] a= {1,2};而不能int [] aa= {1,2}

12、长度为0的数组是合法的,如new int[0];但是数组若没初始化,则不能进行任何操作。

13、不要编写返回指向可变对象的引用的访问方法;确实需要的话,返回clone对象。

14final的实例变量必须保证在构造函数结束之后它的值已被赋值,否则无法编译。

15System类中有一个setOut方法可以把System.out(静态变量)设置为另一个流,是因为该方法是本地方法,本地方法可以绕过java语言的访问控制机制。

16java总是使用传值调用,对象引用是通过值来传递的。一个有力的证明是方法不能让对象参数指向新的对象。

17、声明一个对象时实例字段的执行顺序:

1)初始化所有实例字段为默认值(0falsenull),

2)按类声明中出现的次序依次执行所有字段初始化语句和初始化块;

3)调用构造函数执行。

18、里氏替代原则:只要程序需要一个超类对象,那么就可以用一个子类对象替代它——多态。

19、如果方法是privatestaticfinal或是构造函数,编译器能准确地判断应该调用哪个方法,这称为静态绑定,开销要小。而动态绑定需要查找方法表。

20、超类转化为子类,应先使用instanceof操作符进行类型检查。

21、编写完美equals示例:

class Employee

//父类equals

class Employee

{

    intfield1;

    Date field2;

    //...

    publicboolean equals(Object o)

    {

       //1、是否是同一个对象

       if(this==o) returntrue;

       //2、如果null,返回false

       if(o==null) returnfalse;

       //3、如果类不匹配,就不可能相等。注意用instanceof不严格

       if(this.getClass()!=o.getClass()) returnfalse;

       //4、转型并测试所有字段,这里field1是基本类型,field2是非基本类型

       Employee other = (Employee)o;

       returnthis.field1==other.field1 && this.field2.equals(other.field2);

    }

}

//子类equals

class Manager extends Employee

{

    longfield3;

    Object field4;

    //...

    publicboolean equals(Object o)

    {

       //1、调用父类代码

       if(!super.equals(o)) returnfalse;

       //2、检查子类中特有的字段

       Manager other = (Manager)o;

       returnthis.field3==other.field3 && this.field4.equals(other.field4);

    }

}

22、若没有覆盖ObjecttoString方法,会打印出类名和对象的内存位置。

23ArrayList:数组列表。可自动调整大小的数组。

24Class类的实例一一对应于所有对象及基本类型的运行时类型,有三种方法可以得到:

1Class c1=对象名.getClass();

2Class c1=Class.forName(“类名”);

3Class c1=类名.class;

然后可以用c1.newInstance();建立新对象,但这里调用的是默认构造函数,想要调用其它构造函数,就要使用Constructor类中的newInstance方法。

25、接口中的方法自动就是public的,字段自动为public static final,不能有实例字段和静态方法;

26、内部类能够访问其所属外部类中的私有域而其它普通类则不行。

内部类实例含有一个隐式引用,指向哪个实例华它的外部对象,通过这个指针,内部类可以访问外部对象的全部状态。静态内部类没有这种隐含指针。

27、内部类对象并不是外部类的实例字段,而是外部类方法中的局部变量。

28、只有内部类才可能是私有的。普通类总是具有包可见性或公有可见性。私有的普通类是没有意义的。

29、内部类放在方法块中称为局部内部类,其优点有

1)能够对外部完全隐藏;

2)不仅能访问外部类中的字段,还能访问final的局部变量。

30、静态内部类:只是把一个类隐藏在另一个类中,并不需要内部类具有对外部对象的引用。声明一个内部类为静态的可去掉生成的引用。

31Swing——“被绘制的”非对等体用户界面类。JFrame

AWT——窗口工具箱的底层机制(如事件处理)。Frame

32、得到屏幕大小:Toolkit.getDefaultToolkit().getScreenSize();

33、得到事件队列:EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue()

34applet的生命周期:

Init()(只执行一次)-start()(可多次)-stop()(可多次)-destroy()(只一次)

35、全部异常类都是Throwable的子类,Throwable又分为ErrorExceptionError描述运行中的内部错误以及资源耗尽的情况,不应该抛出。Exception又分为RuntimeExceptionIOException

36RuntimeException包括:1)错误的类型转换;2)数组访问越界;3)试图访问空指针;

IOException包括:1)试图从文件尾读数据;2)试图打开一个错误格式的URL3)试图构造一个并不存在的Class对象。

37RuntimeException的原则:如果出现一定是你的错误。程序员可以通过预防加以解决。

38Error子类以及RuntimeException子类是未检查异常。其它异常为已检查异常。

39、子类覆盖的方法中所能抛出的“已检查异常”绝对不能超过其父类方法所抛的异常。

40、通常处理异常的最佳方法是让调用者来处理错误,即在方法名后throws;捕捉并处理那些已知如何处理的异常,而传递那些不知如何处理的异常。

41、只能throws已检查异常,ErrorRuntimeException不能被throws。但是,所有异常都可以被catch,我们更多是catch已检查异常。

42、使用异常的建议:

1)异常控制不能代替简单的测试;(只有在异常情况下才使用异常)

2)不要过分细化异常;

3)不要压制异常,至少要catch它,但可以不处理;

4)不要羞于传递异常。

43Java中三种处理系统失败的机制:1)抛出异常;2)日志功能;3)断言功能。

44、断言失败是不能恢复的错误,仅仅用在程序开发和测试阶段,日志是在整个程序生命周期中都使用。

45、对象序列化机制算法:

1)保存到磁盘的所有对象都获得一个序列号;

2)当要保存一个对象时,先检查对象是否已经保存;

3)如果以前保存过,只需写入已保存的具有序列号X的对象标识;否则才保存它的所有数据;

读数据时,逆转上述过程。

posted on 2007-10-08 11:37  图梦  阅读(562)  评论(0)    收藏  举报