小细节!!!
private static int TYPE_ONE = 1;
private static int TYPE_TWO = 2;
private static int TYPE_THREE = 3;
main() {
int type = 2;
switch (type) {
case TYPE_ONE:
//do something
break;
case TYPE_TWO:
//do something
break;
case TYPE_THREE:
//do something
break;
}
}
该代码中会存在编译错误!
原因case后面需要的是一个Constant的常量,而TYPE_ONE不是一个final
main() {
int type = 1;
switch (type) {
case 1:
boolean isSuccess = false;
//do something
break;
case 2:
boolean isSuccess = true;
//do something
break;
}
}
该代码中会存在编译错误!
原因在一个switch语句中所有的case都是在同一个local variable中,这里isSuccess存在重复定义!如果在每个case加一个{},则不会出现这个问题
Java方法中参数使用final修饰
1、对于参数类型是基本类型的时候,因为传参是传值,故是否加上final修饰都一样
2、对于参数类型是Object的时候,增加了final,则代表该对象obj是不可改变的,即在编译期能够对obj = new Object()进行错误检验,从而保证obj这个引用不会被重新引用到其他对象去,即某种意义上的对象不变!
3、方法里面存在嵌套类等,如要用一些变量,这些都需要时final修饰。这个基于嵌套类外该变量是final,嵌套类里面也会做隐含动作将其作为一个final的成员变量,故两个fianl变量之间传递,都不会发生对象的改变,故通过final修饰的对象不变地应用到嵌套类中
参考链接http://blog.youkuaiyun.com/tavor/archive/2007/12/06/1920336.aspx
Java访问控制符
public: 外部包可以访问
缺省(包访问性):同一个包下面的才可以访问
protected: 不同包的该类子类可以访问, 【同一个包下面的可以访问(没有注意到的地方)】
private:本类访问