繁体   English   中英

在数组中添加对象时出现奇怪的编译/链接问题

[英]Weird Compiling/Linking Issue While Adding Objects in an Array

我遇到了一个奇怪的编译问题,我什至不知道这是编译问题还是链接问题或语法问题。 抱歉,如此模糊,但我仍在努力诊断该问题。

解释一下:无论如何,我正在编写一个相当大的Java程序。 在我的代码中,我设置了一个“ widget”对象数组。 这些小部件定义为“ widget.java”文件; 创建和填充窗口小部件数组的代码在另一个文件中。 为了在发布任何内容之前弄清楚这个问题,我剥离了代码并编写了一个小玩具版本,如下所示:

import java.io.*;
import java.lang.String;
import java.lang.NullPointerException;

public class arrayObjTest {

    public static void main(String[] args) throws IOException {

    widget yellow = new widget("Yellow");

    widget[] myWidgets = new widget[3];

    myWidgets[0] = new widget("Blue");  
    myWidgets[1] = new widget("Red");   
    myWidgets[2] = yellow;  

    }
}

class widget {

    String color;

    public widget(String a) {
      color = a;
    }
}

玩具版本(上面)可以编译。 但是当我导入这个...

129      widget[] myWidgets = new widget[3];
130      
131      myWidgets[0] = new widget("Blue");

...在我的大代码中,出现以下编译错误:

C:\Users\Pete\Desktop\Java Playground\widgetSim>
C:\Users\Pete\Desktop\Java Playground\widgetSim>
C:\Users\Pete\Desktop\Java Playground\widgetSim>"C:\Program Files\Java\jdk1.8.0_20\bin\javac.exe" widgetMachine.java
.\widgetObject.java:131: error: ']' expected
        myWidgets[0] = new widget("Blue");
                  ^
.\widgetObject.java:131: error: ';' expected
        myWidgets[0] = new widget("Blue");
                   ^
.\widgetObject.java:131: error: illegal start of type
        myWidgets[0] = new widget("Blue");
                     ^
.\widgetObject.java:131: error: <identifier> expected
        myWidgets[0] = new widget("Blue");
                      ^
.\widgetObject.java:131: error: ';' expected
        myWidgets[0] = new widget("Blue");
                          ^
.\widgetObject.java:131: error: illegal start of type
        myWidgets[0] = new widget("Blue");
                                 ^
.\widgetObject.java:131: error: <identifier> expected
        myWidgets[0] = new widget("Blue");
                                  ^
.\widgetObject.java:131: error: ';' expected
        myWidgets[0] = new widget("Blue");
                                        ^
.\widgetObject.java:131: error: cannot find symbol
        myWidgets[0] = new widget("Blue");
        ^
  symbol:   class myWidgets
  location: class widgetObject

9 errors

C:\Users\Pete\Desktop\Java Playground\widgetSim>
C:\Users\Pete\Desktop\Java Playground\widgetSim>
C:\Users\Pete\Desktop\Java Playground\widgetSim>

是什么赋予了? 当我在第129行中创建小部件数组时,编译器不会抱怨,但是当我尝试插入小部件时,出现上述错误。 我已经尝试了很多实验,但是无法弄清楚自己在做什么。

我不认为这是语法错误,因为此代码可在玩具版本中使用。 这是某种链接问题吗? 创建/填充小部件数组的代码看不到“ widget.java”或其他内容?

在Java中,您可以在类中声明实例字段,也可以对其进行初始化。 所以当你写

 widget[] myWidgets = new widget[3];

 myWidgets[0] = new widget("Blue");

在类的中间,但在任何方法之外,第一行都是允许的,因为它定义了实例字段myWidgets并对其进行了初始化。

但是第二行不是这种类型。 这只是一些可执行代码。 在方法之外是不允许的。

具体而言,编译器抱怨0 ,因为这将有可能一直有效,如果该行曾与开始

myWidgets[]

myWidgets曾经是一门课。 换句话说,直到编译器达到0 ,它才意识到这不可能是实例字段或方法签名的开始(此时尚未检查myWidgets是否为类型),因此这就是它抱怨。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM