Java改错学习法

1.main方法的属性public static是可以交换的,但是返回类型一定是void类型,形式参数必须为String[]类型,名称可变。

2.查看加载类:new HelloWorld().getClass().getClassLoader().toString()。

3.在Java中,过程和函数统称为方法,方法分为类方法和实例方法,变量分为类变量和实例变量。类方法只能访问类变量,不能访问实例变量。实例方法可以访问实例变量和类变量。

4.任何设计语言错误:词法错误,语法错误,运行错误,逻辑错误。

5.可以使用System.out.println()来检查方法内执行情况,但要粗体或其他注释符号以便删除。

6.需要利用边界条件来测试方法的正确性。

7.注意“==”号的使用。“==”操作符用来比较变量的值是否相等,而equals用来判断对象是否是同一个对象。

8.String和StringBuffer:String存储的为对象,StringBuffer存储的为地址。采用String作为参数,其为值传递;但使用StringBuffer作为参数,其引用传递。同时,需要注意的是,在给对象的私有变量赋值时,应该使用s="Inital Value";而不是s=new String("Inital Value");因为后者每次会调用构造器。生成新对象,性能低下,内存开销大,而且没有意义。

9.逻辑操作符:&,^,|  短路逻辑操作符:&&,||。

10.length,length(),size()的区别:length属性是针对数组的,而length()方法是针对字符串的,size()方法是针对泛型集合的。

11.使用break后的标号跳出多重循环。

12.Java中对double类型设置了两个特殊值:Infinity和NaN。

13.javac -d 后跟一个目录名,该目录就是要存放编译的类文件的地方。

14.javac -cp abc.a.One就是强迫Java命令到当前目录的abc子目录的a的子目录下寻找One.class类文件。

15.抽象方法必须以分号结束,abstract方法不能使用private修饰。

16.局部变量前不能放置任何访问修饰符(private,public,protected),但final非访问修饰符可以用来修饰局部变量。

17.关于类的封装性,get方法只能获取一些基本类型的成员变量。对于引用类型的成员变量,可以采用对象深复制的方法。

18.用static修饰的代码,在类加载的时候,就会加载到内存中。

19.System.exit(0)表示在抛出异常前将Java虚拟机关闭。

20.方法覆盖的基本规则:

(1)覆盖方法的返回类型和参数列表必须同它所覆盖的方法精确匹配

(2)覆盖方法不能比它所覆盖的方法的可访问性更差

(3)覆盖方法不能比它所覆盖的方法抛出更多的异常

21.设计类的基本技巧:

(1)要将内部数据设计为私有:只许看,不准摸。

(2)一定要对数据进行初始化:Java中不对局部变量进行初始化,但是会对类的成员变量进行初始化。

(3)不在类中过多使用基本数据类型:如果一个类中的基本数据类型过多,应该将多个相关的基本数据类型封装成一个类。

(4)不是所有的成员变量都需要使用set和get方法。

(5)使用标准格式进行类的定义:1>公共访问特性部分,包访问可访问的特性部分,私有访问权限的特性部分

                 2>实例方法,静态方法,实例域,静态域

(6)将职责过多的类进行分解

(7)类名和方法要能体现出职责

22.抽象类无法实例化,所以它会引用具体子类的对象。

23.从JDK5.0开始,采用@Override对覆盖超类的方法进行标记。

24.Java要求equals方法具有以下特性:自反性,对称性,传递性,一致性,空处理返回假

25.equals方法内实现的内容:

(1)判断两个对象的引用是否相同:this==object

(2)判断参数是否为空值:object==null

(3)判断类型是否匹配:this.getClass()==object.getClass()

(4)将object转换成相应类型的类型变量:ClassName other=(ClassName)object

(5)判断各个域的值是否相同:this.name==object.name...

 26.设计继承的建议:

(1)将公共操作和成员变量定义在超类

(2)尽量少使用保护域protected

(3)使用继承实现"is-a"关系

(4)除非所有的继承的方法都有意义,否则不要使用继承:假日类和日历类就不该试用继承,因为日历类有个将假日转为非假日的方法,这时,不该使用继承

(5)在覆盖方法时,不要改变预期的方法

(6)使用多态而非类型信息:对于如下类型的代码,应该将action定义成方法,并将其放置在两个类的超类或接口中,然后进行调用,使用多态。

 1 if(x is of type 1) 2 action1(x); 3 else if(x is of type 2) 4 action2(x); 

27.对象克隆:clone()方法是Object类的一个protected方法。此方法返回的对象独立于被复制的对象。

28.内部类相当于一个成员变量。因此内部类可以定义在成员方法中,称为局部内部类。

29.使用内部类的原因:

(1)内部类中的方法可以访问内部类所在定义域内的所有数据,包括私有数据

(2)内部类可以将同一个包中的其他类隐藏起来

(3)当想要定义一个方法解析自己时,试用匿名内部类比较便捷

 

---over---

posted @ 2015-05-20 16:12  XavierJZhang  阅读(375)  评论(0编辑  收藏  举报