本文共 864 字,大约阅读时间需要 2 分钟。
1. switch分支case变量的陷阱:
public class Test {
public void test(int i) {
Type type = new Type();
switch (i) {
case type.decimal: // ERROR:需要常量表达式
break;
case Type.octal: // 此处正确
break;
}
}
}
class Type {
static final int decimal = 1;
static final int octal = 2;
}
原因:常量表达式就是在编译期间能计算出来的值,也就是不能有对象分配这种运行时的概念。
2. 经典的参数传递
public class Test {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("1", "value");
changeMap(map);
System.out.println(map);
}
//下面两个方法编译时注释掉其中之一
public static void changeMap (Map map){
map=null; //在主方法中打印{1=value}
}
public static void changeMap (Map map){
map.clear();//在主方法中打印{}
}
}
原因:在Java中,任何对象都是在堆上分配空间的,而方法中的变量是在栈上分配空间的。 还要注意,引用和对象的区别,引用就相当于指针。引用指向的是实实在在的对象。
3. 非法向前引用
public class Test {
static {
System.out.println(str); //ERROR:Cannot reference a field before it is defined
}
private static String str = "abc";
}
转载地址:http://uftnx.baihongyu.com/