用Java创建对象时可以初始化最终变量吗?
声明变量final后,在对其进行初始化之后,将无法进一步修改其值。此外,像实例变量一样,最终变量将不会使用默认值初始化。
因此,在声明最终变量后必须初始化它们。如果不是,则会生成编译时错误。
示例
public class FinalExample { final int j; public static void main(String args[]){ FinalExample obj = new FinalExample(); System.out.println(obj.j); } }
编译时错误
FinalExample.java:5: error: non-static variable j cannot be referenced from a static context System.out.println(j); ^ 1 error
初始化最终变量
您可以通过4种方式初始化最终变量-
同时声明。
public class FinalExample { final int j = 100; public static void main(String args[]){ FinalExample obj = new FinalExample(); System.out.println(obj.j); } }
输出结果
100
使用最终方法。
import java.util.Scanner; public class FinalExample { final int num = getNum(); public static final int getNum() { System.out.println("Enter the num value"); return new Scanner(System.in).nextInt(); } public static void main(String args[]){ FinalExample obj = new FinalExample(); System.out.println(obj.num); } }
输出结果
Enter the num value 20 20
使用构造函数
public class FinalExample { final int num; public FinalExample(int num) { this.num = num; } public static void main(String args[]){ FinalExample obj = new FinalExample(20); System.out.println(obj.num); } }
输出结果
20
使用实例初始化块
public class FinalExample { final int num; { num = 500; } public static void main(String args[]){ FinalExample obj = new FinalExample(); System.out.println(obj.num); } }
输出结果
500
除final方法外,如果以其他所有三种方式初始化final变量,则将立即实例化其类。