“预期的类,接口或枚举。”编译java文件时出错

时间:2010-08-17 02:53:41

标签: java

首先,有问题的代码:

package net.foo.server;

import at;
import ay;
import bi;
import bj;
import bl;
import ck;
import cw;
import da;
import dp;
import ds;
import dt;
import dw;
import ep;
import fa;
import fd;
import fi;
import fl;
import ge;
import ho;
import ht;
import java.awt.GraphicsEnvironment;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

接下来,错误:

net\foo\server\fooServer.java:8: '.' expected
import at;
         ^
net\foo\server\fooServer.java:8: ';' expected
import at;
          ^
net\foo\server\fooServer.java:9: class, interface, or enum expected
import ay;
       ^
net\foo\server\fooServer.java:10: '.' expected
import bi;
         ^
net\foo\server\fooServer.java:10: ';' expected
import bi;
          ^
net\foo\server\fooServer.java:11: class, interface, or enum expected

import bj;
       ^
net\foo\server\fooServer.java:12: '.' expected
import bl;
         ^
net\foo\server\fooServer.java:12: ';' expected
import bl;
          ^
net\foo\server\fooServer.java:13: class, interface, or enum expected

import ck;
       ^
net\foo\server\fooServer.java:14: '.' expected
import cw;
         ^
net\foo\server\fooServer.java:14: ';' expected
import cw;
          ^
net\foo\server\fooServer.java:15: class, interface, or enum expected

import da;
       ^
net\foo\server\fooServer.java:16: '.' expected
import dp;
         ^
net\foo\server\fooServer.java:16: ';' expected
import dp;
          ^
net\foo\server\fooServer.java:17: class, interface, or enum expected

import ds;
       ^
net\foo\server\fooServer.java:18: '.' expected
import dt;
         ^
net\foo\server\fooServer.java:18: ';' expected
import dt;
          ^
net\foo\server\fooServer.java:19: class, interface, or enum expected

import dw;
       ^
net\foo\server\fooServer.java:20: '.' expected
import ep;
         ^
net\foo\server\fooServer.java:20: ';' expected
import ep;
          ^
net\foo\server\fooServer.java:21: class, interface, or enum expected

import fa;
       ^
net\foo\server\fooServer.java:22: '.' expected
import fd;
         ^
net\foo\server\fooServer.java:22: ';' expected
import fd;
          ^
net\foo\server\fooServer.java:23: class, interface, or enum expected

import fi;
       ^
net\foo\server\fooServer.java:24: '.' expected
import fl;
         ^
net\foo\server\fooServer.java:24: ';' expected
import fl;
          ^
net\foo\server\fooServer.java:25: class, interface, or enum expected

import ge;
       ^
net\foo\server\fooServer.java:26: '.' expected
import ho;
         ^
net\foo\server\fooServer.java:26: ';' expected
import ho;
          ^
net\foo\server\fooServer.java:27: class, interface, or enum expected

import ht;
       ^
30 errors

我已经确定CLASSPATH变量包含该目录。有人有任何线索吗? (注意:编译器只能解决我的课程

4 个答案:

答案 0 :(得分:3)

导入语句用于导入类型。没有按照编写代码的方式导入包的概念。

您可以使用星号表示法导入包中的每种类型,例如

import at.*;

但你不能只是导入“at”包。这是您看到的所有编译器问题的根源。

我进一步指出,没有任何层次结构的完全不合理的双字母包名称与Java中完善的命名和组织约定非常相似。我引用了一个关于naming conventions的维基百科链接,只需谷歌搜索“Java包名称”。

我建议您更熟悉语言惯例。使用这些约定是因为它们使您和任何想要阅读代码的人都变得更容易。

答案 1 :(得分:1)

对于初学者,您将一大堆类导入到.java文件中,该文件未声明任何内容。这就是class, interface, or enum expected消息的内容。

在所有这些导入之后,您将声明一个类(或接口或枚举),如下所示:

package net.foo.server;

/*
 * import statements 
*/

public class MyClass {
    // fields, methods, etc. here
}

您要导入的随机命名的双字母包是什么?

答案 2 :(得分:0)

除非它们是此类所在的包之外的包的一部分,否则不能导入这样的类。如果这些类在外面,则必须显式导入它们或使用*通配符将它们全部导入在同一时间。

答案 3 :(得分:0)

几种可能性:

1)将您的服务器类移动到与其他所有内容相同的包中,并删除导入。您还需要重新编译所有其他类,并在子类中更改net.foo.server导入。

2)不要打扰net.foo.server包并在其他地方进行更改,例如gy.java等。编译所需的类并将它们添加到jar中。确保在构建时将类路径指向server.jar而不是编译源。

3)使用较旧的JDK进行编译 - 如果代码支持它。在较旧的JDK中,您可以使用“import Unfinished”从默认包导入。

4)等待并祈祷。 (最受欢迎的方法。)记住你做的任何事情很可能在星期五你最不希望的时候休息。