1 用一些重名的变量混淆视线
下面这个例子,两个K1,显得很绕,考试时,可以换一个变量考虑;
package com.ocjp.basic;
public class ObjAsParam {
ObjAsParam myK;
String degree = "0";
public static void main(String[] args) {
ObjAsParam k1 = new ObjAsParam();
// k1 was copied to k in method go(ObjAsPram k);
// It's crucial to know which one is eventually changed;
// Pay attention to the return of invocation of go() was not stored;
go(k1);
System.out.println(k1.degree);
}
static ObjAsParam go(ObjAsParam k) {
// this k1 is valid within go(), you can imagine it as k2...a different param as the k1 in main();
final ObjAsParam k1 = new ObjAsParam();
k.myK = k1;
k.myK.degree = "7";
return k.myK;
}
}
Output: 0
2. 拼写错误
比如大小写乱写
3. 导包
有时候故意不导入包,却引用包的类
4. 空指针
不初始化全局的成员变量 ,方法中又对此成员变量调方法; 运行时,抛空指针异常
public class TestNullPointerException {
static StringBuffer s;
public static void main(String[] args) {
Integer i = new Integer(42);
for(int j = 40; j < i; i--)
switch(i) {
case 41: s.append("41 ");
default: s.append("def ");
case 42: s.append("42 ");
}
System.out.println(s);
}
}
5. 继承与多态混在一起
有些题目只有继承,没有多态,拿一些静态变量,静态方法来混淆。。。。转型转来转去。。。
原则只有一条: 没有发生多态的属性,静态方法,看类型,即=左边的部分,或者说转型中()里的类型
发生多态的,看右边,即=右边的部分,或者说转型中()外的实际类型