1.final局部变量
public class TestFinal1 {
public static void main(String[] args) {
// 局部final变量可以在声明的时候初始化
final boolean flag = true;
}
}
package testfinal;
public class TestFinal1 {
public static void main(String[] args) {
// 局部final变量可以先声明,然后再初始化
final boolean flag;
flag = true;
}
}
final局部变量可以等到使用时再初始化,也就是说,final局部变量如果一直没有被使用,就可以一直不初始化。
2.final域
package testfinal;
/**
* final域可以在声明时初始化
* @author yuncong
*
*/
public class TestFinal2 {
private final boolean flag = true;
}
package testfinal;
/**
* final域可以在构造器中初始化
* @author yuncong
*
*/
public class TestFinal2 {
private final boolean flag;
public TestFinal2(boolean flag) {
this.flag = flag;
}
}
final域必须在声明时或者在构造器中初始化,否则会报错。
3. 方法参数列表中的final形参
package testfinal;
public class TestFinal3 {
public void printFinal(final boolean flag) {
flag = true; // error, 不能改变flag的值
}
}
package testfinal;
public class TestFinal3 {
public void printFinal(final boolean flag) {
System.out.println(flag);
}
public static void main(String[] args) {
boolean flag = true;
TestFinal3 testFinal3 = new TestFinal3();
testFinal3.printFinal(flag);// 可以把一个非final变量传给printFinal
}
}
4.final类和final方法
package testfinal;
public class TestFinal4 {
/**
* final方法不能被子类重写
*/
public final void printFinal() {
}
}
package testfinal;
/**
* final类不允许被继承,final类中的所有方法
* 自动成为final方法
* @author yuncong
*
*/
public final class TestFinal5 {
}