那些年我们掉过的java的坑(三)
1.java语言中标识符的第一个字是可以使用$的
2.如何跳出多重循环
ko:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
System.out.println("i=" + i + ",j=" + j);
if (j == 5)
break ko;
}
}
3.final、finally、finalize区别
final变量:变量不可变
final方法:使用内联(inline)机制,直接进方法插入调用出,而不使用方法调用
final参数:输入的参数在函数内部不能被修改
final类:不能被继承
finally:异常处理一定会执行到的部分
finalize:是Objiect中的一个方法,垃圾回收器执行回收对象finalize()来进行回收这个对象
4.实例变量就是变量归对象所有,就是普通的成员变量在随类被new后成为实例变量。static方法中不能存在static变量(存在与方法区),方法中只存在局部变量(栈)。
5.volatile关键字应用于多线程环境。经常访问的变量会被缓存起来,每次读不一定都是去内存中读,使用volatile可以每一次去内存读。防止多线程时被改变。
6.strictfp关键字用来声明一个类、接口、方法,表示完全按照标准进行浮点计算(JVM在不同环境下可能不会按照标准计算,所有需要声明)
7.如何编写一个不可变类,让内部和外部的关系只有clone,不存在引用(不存在指针给了外部)。区分【值传递call by value】和【引用传递call by reference】。只有基本类型是值传递。Integer这些也是引用传递。
class ImmutableClass{
private Date d;
public ImmutableClass(Date d) {
this.d = (Date)d.clone(); //解除外部输入的引用
}
public Date getDate() {
return (Date)d.clone(); //解除内存输出的引用
}
}
8.Integer这些也是引用传递,当是Integer是不可变类,不存在修改值的方法,所以a和b没有关系了。
public class Test_1 {
public static void main(String[] args) {
Integer a = 1;
Integer b = 1;
a++;
//结果a=2;b=1
System.out.println("a="+a+";b="+b);
}
}
9.只要short char byte参与运算,至少会转化为int。但是+=这些不会,因为这个内部隐含了强制类型转换。
10.java中if只接受boolean类型。
int a=1;
if(a){} ; //报错