为什么我们不能在 Java 的 try/catch 代码块中初始化 static final 变量?


在 Java 中,您可以声明三种类型的变量,即实例变量、静态变量和局部变量。

  • 局部变量 - 在方法、构造函数或代码块内部定义的变量称为局部变量。变量将在方法内部声明和初始化,并在方法执行完成后被销毁。
  • 类(静态)变量 - 类变量是在类内部、任何方法外部,使用 static 关键字声明的变量。

try 代码块中的静态方法

同样,静态变量属于类,可以在类的任何地方访问,这与局部变量的定义相矛盾。因此,不允许在方法、代码块或构造函数内部声明静态变量。但是,如果您尝试在代码块内声明静态变量,则会生成编译时错误。

示例

在下面的 Java 示例中,我们尝试在 try 代码块中声明一个 String 变量 path。

import java.io.File;
import java.io.FileInputStream;
public class Example {
   public static void main(String args[]){
      System.out.println("Hello");
      try{
         static String path = "my_file";
         File file =new File(path);
         FileInputStream fis = new FileInputStream(file);
      }catch(Exception e){
         System.out.println("Given file path is not found");
      }
   }
}

编译时错误

编译上述程序时,会生成以下错误。

Example.java:7: error: illegal start of expression
   static String path = "my_file";
   ^
1 error

如果您在 Eclipse 中编译相同的程序,则会生成以下消息。

更新于: 2019年8月7日

883 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告