Java中的非法向前引用

48
 import java.io.*;
 import jxl.*;
 class Xlparsing
 {
   Workbook wb =wb.getWorkbook(new File(
    "C:\\Documents and Settings\\kmoorthi\\Desktop\\ak\\new.xls"));
   // Illegal forward reference What it means
   Sheet st = wb.getSheet(0);
   Cell cell1 = st.getCell(0,0);
   String a1 = cell1.getContents();
   public static void main(String s[])
   {
     System.out.println(new Xlparsing().a1);
   }
 }

你好,当我尝试从Excel表格中提取数据时,创建文件对象时会出现非法向前引用错误。

如何解决这个问题?


如果代码中的注释是问题,那么你什么时候得到它?从哪里得到?作为异常吗?毫无疑问,javac不会在用户面前抛出非法的前向引用的概念。如果这是一个异常,它可能与我们无法访问的xls文件非常相关。 - Fredrik
当我尝试编译代码时,出现了这个错误。 - Karthik.m
你能展示编译器错误吗? - notnoop
1
在执行 Erickson 提到的更正之后,考虑将代码放入构造函数中。 - Amarghosh
这个回答解决了你的问题吗?Illegal forward Reference java issue - asyard
4个回答

111

“非法的前向引用”指的是在定义变量之前尝试使用该变量。

在这种情况下,您正在尝试在声明wb时调用wb上的方法。

Workbook wb = wb.getWorkbook(...);

4
API中getWorkbook似乎是静态方法,因此使用以下语句即可:Workbook wb = Workbook.getWorkbook(...)。 - barrowc
啊,我在谷歌上搜索了一下,试图找出他在使用什么API,但没有找到完全匹配的结果。 - erickson
JExcelAPI: http://jexcelapi.sourceforge.net/resources/javadocs/current/docs/jxl/Workbook.html - sanastasiadis

2

我猜意图是静态地调用 getWorkbook() 方法,这是你应该做的。所以,你应该将成员变量 wb 的初始化改为:

Workbook wb = Workbook.getWorkbook(...)

0

当未初始化的非全局变量值被赋给全局变量时,就会出现“Forward Illegal Reference”这个术语。

在您的情况下,Workbook wb = wb.getWorkbook(new File("----")); - 在调用getWorkbook()方法之前,wb未初始化。为了避免FIR,您应该初始化wb


-1
尽管getWorkbook是静态的,所以按理说,这段代码应该可以工作。但是在这里,使用引用在其声明之前或在同一语句中声明时会导致错误"前向引用即在声明之前使用引用"。

2
Getworkbook 可能是静态的,但 wb 不是。 你仍然不能在未初始化的引用上调用静态方法。 - Timothy Groote

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接