Java不会编译我创建的对象

Java不会编译我创建的对象,java,compilation,compiler-errors,Java,Compilation,Compiler Errors,最近,每当我试图编译创建我创建的类实例的代码时,我都会遇到这个Java编译错误。我尝试过手动编译,从不同的位置编译,甚至尝试过在安全模式下编译。我也在我的计算机上完全重新安装了Java。下面是我编写的代码示例和我经常遇到的错误: 实例创建者类: public class Nothing { public static void main(String args[]) { Can World = new Can(); } } public class Can {

最近,每当我试图编译创建我创建的类实例的代码时,我都会遇到这个Java编译错误。我尝试过手动编译,从不同的位置编译,甚至尝试过在安全模式下编译。我也在我的计算机上完全重新安装了Java。下面是我编写的代码示例和我经常遇到的错误:
实例创建者类:

public class Nothing {
    public static void main(String args[]) {
        Can World = new Can();
    }
}
public class Can {
    public Can() {
        System.out.println("Test");
    }
}
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
        Can World = new Can();
        ^
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
        Can World = new Can();
                        ^
2 errors
实例化类:

public class Nothing {
    public static void main(String args[]) {
        Can World = new Can();
    }
}
public class Can {
    public Can() {
        System.out.println("Test");
    }
}
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
        Can World = new Can();
        ^
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
        Can World = new Can();
                        ^
2 errors
编译错误:

public class Nothing {
    public static void main(String args[]) {
        Can World = new Can();
    }
}
public class Can {
    public Can() {
        System.out.println("Test");
    }
}
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
        Can World = new Can();
        ^
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
        Can World = new Can();
                        ^
2 errors
一些比我更了解Java的人尝试编译我遇到问题的文件,但没有成功。另外,当我从我的IDE Eclipse中运行代码时,它会像应该的那样运行

任何建议或解决方案都将非常非常感谢。我真的很讨厌像这样的东西阻止我编程。再次感谢

编辑:我以前能够像这样编译类,直到最近我才开始收到这个错误。我使用在EclipseIDE中创建的一个外部工具进行编译,但我也尝试了通过导航到CMD窗口中的两个文件所在的目录进行编译,并使用了javacNothing.java,但同样的错误也出现了。我也尝试过先编译Can.java(可编译),然后再编译Nothing.java,但也失败了。以下是从CMD窗口编译时得到的文本:

02/09/2011  06:44 PM    <DIR>          .
02/09/2011  06:44 PM    <DIR>          ..
02/09/2011  03:45 PM               289 .classpath
02/09/2011  03:45 PM               382 .project
02/09/2011  03:45 PM    <DIR>          .settings
02/09/2011  06:00 PM                75 Can.java
02/09/2011  05:49 PM               102 Nothing.java
               4 File(s)            848 bytes
               3 Dir(s)  64,669,216,768 bytes free

C:\Users\Alex\Mindstorms\NXT\leJOS NXJ\Moment>javac Nothing.java
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
                Can World = new Can();
                ^
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
                Can World = new Can();
                                ^
2 errors
2011年9月2日下午6:44。
2011年9月2日下午6:44。。
2011年9月2日03:45下午289.classpath
2011年9月2日03:45 PM 382.项目
2011年9月2日下午3:45设置
2011年9月2日06:00 PM 75 Can.java
2011年9月2日下午5:49 102 Nothing.java
4个文件848字节
3个目录64669216768可用字节
C:\Users\Alex\Mindstorms\NXT\leJOS NXJ\Moment>javac Nothing.java
Nothing.java:4:找不到符号
符号:班级可以
地点:无课
罐头世界=新罐头();
^
Nothing.java:4:找不到符号
符号:班级可以
地点:无课
罐头世界=新罐头();
^
2个错误

将您为每个类提供的代码放入单独的文件中(当然是名为Can.java和Nothing.java),并将这两个文件放在使用命令行编译器为我编译的同一目录中:

javac Nothing.java

此错误表示编译器在不编译任何内容时找不到can类。两个文件是否都在同一目录中?

问题是,您需要有一个适当的导入语句(如果在单独的包中),并且需要从适当的目录运行Java编译器。假设您的目录结构如下所示:

src/
   com/
      yourdomain/
         example/
            Can.java
            Nothing.java
然后,您需要在两个*.java文件的顶部都添加以下内容:

package com.yourdomain.example;
您应该将下面的import语句放在Nothing.java中(从技术上讲,当它们都在同一个包中时,这是不必要的,但当它们在不同的包中时,这是必要的,这是一个好习惯):

然后从
src
目录中调用编译器,如下所示:

 javac com/yourdomain/example/*.java
然后,您可以使用以下命令运行此程序:

 java com.yourdomain.example.Nothing
顺便说一句,你真的不应该用这种方式手工建造项目;您应该使用自动生成系统,如或。如果您使用创建项目,除了提供简单的“Build”、“Run”和“Build&Run”按钮以及各种优秀的IDE功能(代码高亮显示、增量编译和修复建议),它还会为您生成一个Ant构建项目

编辑

根据您最新的问题,。。。请注意,Eclipse的编译器不同于
javac
。如果使用Cygwin安装javac,或者在Windows和UNIX之间共享文件(可能通过版本控制系统),则可能会遇到编码问题。我建议将这些文件重新保存在UTF-8中,运行unix2dos(如果您通过Cygwin安装javac,则反之亦然)并重新编译。如果这不起作用,可能值得重新安装javac。如果做不到这一点,总是有Ubuntu;)

我已经弄明白了。事实证明,我曾尝试在我的计算机上用Java设置一个旧版本的乐高机器人,并创建了一些环境变量。其中一个是CLASSPATH变量。我非常确信Java试图读取该变量(我不再使用该变量)来查找我的类。一旦我删除了它(以及我没有使用的其他旧变量),重新启动了我的计算机,并重新安装了JDK,一切正常


谢谢大家的帮助:)

这两个类都在同一个文件中吗?我的意思是可以在Nothing类中声明类吗?如果不是,则必须导入it@Chuck,两个公共类不能存在于同一个文件中(如果它们存在,他会因此得到一个错误),所以不可能是这样。@Chuck Birkin:这两个类都是公共的。如果它们在同一个文件中,它们将不会编译,但错误是“类Can是公共的,应该在名为Can.java public class Can{”的文件中声明”或者类似的东西。你是如何编译这些类的?如果你使用
javac
来编译这些类,你能提供你正在使用的确切命令吗?我认为值得检查你的源文件中是否没有不可打印的字符(正如Greenmart在a中建议的那样)包中的类不需要导入。@Damian,Java入门已经够混乱的了……它不值得添加到包中。有import语句不会有什么坏处,如果他将它们放在单独的包中,这是必要的。哇,我没想到会这么快收到这么多回复,谢谢!下面是关于e的更多细节每件事:我以前能够像这样编译类,直到最近我才开始收到这个错误