【问题标题】:Error: cannot find symbol - Java compile error错误:找不到符号 - Java 编译错误
【发布时间】:2015-06-17 00:25:29
【问题描述】:

我已经研究了一段时间了,我确信修复就在我面前,但我只是对它视而不见。有人关心指出为什么我的 int i 给我一个错误?

CacheDownloader 类:

  public static void main(String[] args) {
    String strFilePath = "./version.txt";
    try
    {
      FileInputStream fin = new FileInputStream(strFilePath);
     DataInputStream din = new DataInputStream(fin);
     int i = din.readInt();
       System.out.println("int : " + i);
       din.close();
    }
    catch(FileNotFoundException fe)
    {
      System.out.println("FileNotFoundException : " + fe);
    }
    catch(IOException ioe)
    {
      System.out.println("IOException : " + ioe);
    }
  }

    private final int VERSION = i; 

错误:

CacheDownloader.java:54: error: cannot find symbol
        private final int VERSION = i;
                                    ^
  symbol:   variable i
  location: class CacheDownloader

【问题讨论】:

  • 哪个 int,确切的行是什么?
  • 最后一行有错误,找不到“i”的符号
  • 错误是什么?还有什么可以在错误消失的情况下注释掉?
  • int itry 块的本地对象,而您试图在 try/catch 块之外引用它,为什么?显然,这肯定会引起关注 :-) 在这种情况下,请查看在 main 方法的开头声明和初始化变量 i。虽然不相关,但停止使用main 方法执行任务,而是将此责任委托给其他方法,只需使用main 启动应用程序即可。
  • i 在您的主方法之外不可见。

标签: java int symbols


【解决方案1】:

您必须在 try-catch 块之前声明您的 int i。此外,您必须在 main 方法中声明常量:

  public static void main(String[] args) {
    String strFilePath = "./version.txt";
    int i;
    try
    {
      FileInputStream fin = new FileInputStream(strFilePath);
      DataInputStream din = new DataInputStream(fin);
      i = din.readInt();
      System.out.println("int : " + i);
      din.close();
    }
    catch(FileNotFoundException fe)
    {
      System.out.println("FileNotFoundException : " + fe);
    }
    catch(IOException ioe)
    {
      System.out.println("IOException : " + ioe);
    }
    final int VERSION = i; 
  }

【讨论】:

  • 您不能在方法范围内指定私有。
  • @Eranda 是的,你是对的。谢谢你纠正我!我认为现在情​​况很好。如果我又错了,请纠正我,我正在学习 Java,根本不是初学者,但有些概念我还不熟悉。谢谢!
【解决方案2】:

i 在 main 中声明,private final int VERSION 在 main 之外。将其移入 main 或将 i 声明为全局。

static int i=0;
public static void main(String[] args) {
    String strFilePath = "./version.txt";
    try
    {
      FileInputStream fin = new FileInputStream(strFilePath);
      DataInputStream din = new DataInputStream(fin);
      i = din.readInt();
      System.out.println("int : " + i);
      din.close();
    }
    catch(FileNotFoundException fe)
    {
       System.out.println("FileNotFoundException : " + fe);
    }
    catch(IOException ioe)
    {
       System.out.println("IOException : " + ioe);
    }
}
private final int VERSION = i;

【讨论】:

  • 您的变量应该是静态的,以便在静态范围内访问它们。
  • 这修复了我的编译错误。但是现在它正在将我的 version.txt 读取为 0(零),即使其中有 9。之前它是正确读取的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 2013-12-06
  • 2013-10-04
  • 2012-08-27
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多