设置Java - 基础(但不是那么基本...)问题

时间:2011-06-13 14:38:59

标签: java classpath

我最近使用Head First Java跳转到Java,我发现这本书缺乏很多关于设置Java的信息。它几乎告诉我下载JDK,并提到了一些类路径变量。

我很困惑,显然,我的Java没有设置正常运行。所以...我研究过,并设法将/ bin /目录添加到我的CLASS_PATH中,并且我还创建了一个名为JAVA_HOME的新系统变量,并将其指向bin文件夹。我不确定该怎么做 - 这个主题对于其他所有程序员来说似乎都很容易,因为我找不到其他人在设置他们的Java环境时遇到这么多困难。

所以,我现在可以编译和运行程序了。我做了一些Hello World的东西,yada yada。现在,在第37页,我们实际上会做一些OOP的东西。以下是课程:

class Movie {
    String title;
    String genre;
    int rating;

    void PlayIt() {
        System.Out.println("Playing the movie");
    }
}

和第二个:

public class MovieTestDrive  {
    public static void main(String[] args) {
        Movie one = new Movie();
        one.title = "Movie 1";
        one.genre = "Movie 1 Genre";
        one.rating = -2
        two.title = "Movie 2";
        two.genre = "Movie 2 Genre";
        two.rating = -1
        three.title = "Movie 3";
        three.genre = "Movie 3 Genre";
        three.rating = 3
    }
}

所以,我可以编译第一个类(Movie.java)。但是,当我尝试编译第二个类(对象?) - MovieTestDrive.java时,我返回了这个错误:

MovieTestDrive.java:12: cannot find symbol
symbol : method PlayIt()
location: class Movie
two.playIt();

1 error

我做了一些研究,从我收集的内容来看,我猜Java也不知道是否也在寻找第一堂课。但是,我的研究几乎没有找到任何有用的信息来说明如何将愚蠢的东西引导到它的位置。

8 个答案:

答案 0 :(得分:4)

您是否有任何特殊原因导致您未使用EclipseIntelliJ IDEANetbeans等IDE?

答案 1 :(得分:3)

尝试将PlayIt()方法的定义改为公开,如下所示:

  public void PlayIt() {
    System.out.println("Playing the movie");
  }

然后重新编译并重试。

可能是您的班级不在同一个套餐中。

此外,您提供的主要方法看起来不对。你没有宣布两个和三个!您需要在使用它们之前声明它们并实例化它们。

答案 2 :(得分:2)

你缺少一些分号和一些声明。

public class MovieTestDrive  {
    public static void main(String[] args) {
        Movie one = new Movie();
        Movie two = new Movie(); // <-- missing declaration
        Movie three = new Movie(); // <-- missing declaration
        one.title = "Movie 1";
        one.genre = "Movie 1 Genre";
        one.rating = -2; // <-- Missing ;
        two.title = "Movie 2";
        two.genre = "Movie 2 Genre";
        two.rating = -1; // <-- Missing ;
        three.title = "Movie 3";
        three.genre = "Movie 3 Genre";
        three.rating = 3; // <-- Missing ;
    }
}

答案 3 :(得分:0)

  1. JAVA_HOME必须指向JDK根目录而不是bin文件夹。
  2. PATH必须指向JDK bin文件夹,即JAVA_HOME\bin
  3. 要指向jars and classes文件夹,请将其添加到CLASSPATH变量,而不是CLASS_PATH
  4. 每个变量声明和方法调用都以分号结尾(;);
  5. 此外,您正在调用two.playIt();p中的小playIt()),PlayIt()方法的资本为P。 Java区分大小写,因此必须使用正确的大小写调用/使用每个方法,变量,类等。

答案 4 :(得分:0)

JAVA_HOME在大多数情况下不应指向bin文件夹,它应指向Java发行版的根目录。在开发环境中,这是JDK的根。通常这个目录中有一个bin目录,里面包含javac和jre目录。

编译第二个类时,它找不到你的第一个类,因为你忘了告诉编译器这个项目的类所在的位置。 Javac会将类添加到类路径中,但不会独立发现类。您需要执行以下操作:

javac -classpath . MovieTestDrive.java

“dot”表示当前工作目录是类路径树的根目录。

请注意,您确实需要做更多工作才能使您的程序(即使它们只是玩具项目)在Java环境中运行得更好。不建议在“默认”包中进行开发。要修复“默认”软件包开发,请将该行添加到每个.java文件的顶部

package org.myname.movie;

并创建对应的目录

./org
./org/myname
./org/myname/movie

然后将文件移动到相应的目录中。

作为奖励,您很快就会想要将构建系统编组在一起,以防止需要手动输入java编译命令。我推荐使用ant作为Java的构建系统,但是如果你有make的历史记录,你可能想要使用它,直到你熟练使用ant。

其他好主意是将源代码目录与包含编译类的目录分开。 Javac有一个命令行选项“destdir”,它将“.class”文件放在与源不同的目录树中。这样可以轻松完全重建(删除类而不会损坏源代码),并为您提供简单的jar包装(您最终可以这样做)。

祝你好运,如果你需要帮助,请随时发表评论。

答案 5 :(得分:0)

如果您使用默认的-empty-包并在同一目录中编译您拥有java源代码和已编译的类,则可能需要将当前目录添加到类路径中。尝试将-classpath .添加到javac命令行。

答案 6 :(得分:0)

我认为问题是你班上有编译错误。

电影中的System.Out应该是System.out,例如

首先编译两个java类,然后尝试运行。

javac Movie.java

javac MovieTestDrive.java

然后当他们都编译时,运行然后使用: java -cp。 MovieTestDrive

答案 7 :(得分:0)

你缺少第二和第三部电影以及分号的声明。

public class MovieTestDrive  {
    public static void main(String[] args) {
        Movie one = new Movie();
        one.title = "Movie 1";
        one.genre = "Movie 1 Genre";
        one.rating = -2;
        Movie two = new Movie();
        two.title = "Movie 2";
        two.genre = "Movie 2 Genre";
        two.rating = -1;
        Movie three = new Movie();
        three.title = "Movie 3";
        three.genre = "Movie 3 Genre";
        three.rating = 3;
        two.PlayIt(); // Try adding this once fixing the code.
    }
}

同样在

 System.Out.println("Playing the movie");
中你应该有一个小写'o'。例如

 System.out.println("Playing the movie");

运行的第一个文件是MovieTestDrive.java,因为它是带有main方法的公共类,而movie.java文件则没有。因此,您需要在MovieTestDrive文件中运行PlayIt()方法。

注意:这适用于eclipse(Eclipse Download