用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变量,则将立即实例化其类。