设置Java-Basic(但不是那么基本…)问题

设置Java-Basic(但不是那么基本…)问题,java,classpath,Java,Classpath,我最近带着Head First Java进入Java,我发现这本书缺少很多关于设置Java的信息。它几乎告诉我下载JDK,并提到了一些关于类路径变量的内容 我很困惑,很明显,我的Java没有设置为正常运行。所以我研究并设法将/bin/目录添加到我的CLASS_路径中,我还创建了一个名为JAVA_HOME的新系统变量,并将其指向bin文件夹。我真的不知道该做什么——这个话题对其他程序员来说似乎很容易,因为我找不到其他人在设置Java环境时有这么大的困难 所以,我现在可以编译和运行程序了。我做了一些

我最近带着Head First Java进入Java,我发现这本书缺少很多关于设置Java的信息。它几乎告诉我下载JDK,并提到了一些关于类路径变量的内容

我很困惑,很明显,我的Java没有设置为正常运行。所以我研究并设法将/bin/目录添加到我的CLASS_路径中,我还创建了一个名为JAVA_HOME的新系统变量,并将其指向bin文件夹。我真的不知道该做什么——这个话题对其他程序员来说似乎很容易,因为我找不到其他人在设置Java环境时有这么大的困难

所以,我现在可以编译和运行程序了。我做了一些“你好世界”的事情,亚达亚达。现在,在第37页,我们实际上要做一些面向对象的东西。以下是课程:

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不知道也应该寻找第一个类。然而,我的研究几乎没有找到任何有用的信息来说明如何引导这个愚蠢的东西到它所在的位置。

有没有什么特别的原因让你不使用IDE,比如,或者?

试着像这样将PlayIt()方法的定义公开:

  public void PlayIt() {
    System.out.println("Playing the movie");
  }
然后重新编译并重试

可能是您的类不在同一个包中


另外,您提供的主要方法看起来是错误的。你没有申报二加三!在使用这些对象之前,您需要声明它们并实例化它们。

您缺少一些分号和一些声明

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 ;
    }
}
公共级MovieTestDrive{
公共静态void main(字符串[]args){
电影一=新电影();
电影二=新电影();//
  • JAVA_HOME
    必须指向JDK根目录,而不是bin文件夹
  • PATH
    必须指向JDK-bin文件夹,即
    JAVA\u-HOME\bin
  • 要指向jars和classes文件夹,请将其添加到
    类路径
    变量,而不是
    类路径
  • 每个变量声明和方法调用都以分号(
    )结尾

  • 另外,您正在调用
    two.playIt();
    (在
    playIt()和
    playIt()中的小
    p
    方法有一个大写字母
    P
    。Java是区分大小写的,因此每个方法、变量、类等都必须使用正确的大小写来调用/使用。

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

    编译第二个类时,它找不到第一个类,因为您忘记告诉编译器此项目的类位于何处。Javac将向类路径添加类,但它不会独立发现类。您需要执行以下操作:

    javac -classpath . MovieTestDrive.java
    
    “点”表示当前工作目录是类路径树的根

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

    package org.myname.movie;
    
    并制作相应的目录

    ./org
    ./org/myname
    ./org/myname/movie
    
    然后将文件移动到相应的目录中

    作为奖励,您将很快希望将构建系统脚本化,以避免手动键入java编译命令。我建议将ant作为java的构建系统,但如果您以前有
    make
    的历史,您可能希望在精通ant之前使用它

    另一个好主意是将源代码目录与保存编译类的目录分开。Javac有一个命令行选项“destdir”,它会将“.class”文件放在不同于源代码的目录树中。这允许轻松地进行完全重建(删除类而不损坏源代码)并将为您设置轻松的罐子包装(这是您最终想要做的)


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

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

    <>我认为问题是你的类有编译错误

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

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

    javac Movie.java

    javac MovieTestDrive.java

    然后,当它们都编译时,使用以下命令运行:
    java-cp.MovieTestDrive

    您缺少电影二、三和分号的声明

    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.
        }
    }
    此外,在in中,你应该用小写字母“o”in out

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


    注意:这适用于eclipse()

    如何设置问题中的代码格式:正如我在下面的帖子中提到的,您不需要在javac类路径中包含以前编译过的类,因此当它试图单独编译一个文件时,如果该文件依赖于一个已经编译过的类,就不能。解决方法是添加一个classpath指令,后续编译可以引用pr的输出以前的编译。您正在显示的代码不会给出您正在显示的错误消息(但会给出其他错误消息)。这将为您节省大量时间
     System.out.println("Playing the movie");