Java |自定义创建的包不存在 目的 我希望能够创建一个包并调用它 或者,我想为我的方法创建单独的文件(以避免在一个文件中包含x个类) 安装程序

Java |自定义创建的包不存在 目的 我希望能够创建一个包并调用它 或者,我想为我的方法创建单独的文件(以避免在一个文件中包含x个类) 安装程序,java,package,classpath,method-call,Java,Package,Classpath,Method Call,这是我的LetterGrader.java文件: package grade.util; import java.util.*; import java.io.*; public class LetterGrader { private void readArgs() { System.out.println("Hello, read CLA!"); } } import java.util.*; import java.io.*; public class

这是我的LetterGrader.java文件:

package grade.util;
import java.util.*;
import java.io.*;

public class LetterGrader {
  private void readArgs() {
          System.out.println("Hello, read CLA!");
  }
}
import java.util.*;
import java.io.*;


public class TestLetterGrader {
  public static void main(String[] args) {
    LetterGrader letterGrader = new LetterGrader(); // instantiate
        letterGrader.readArgs(); // call method
  }
}
这是我的testletegrader.java文件:

package grade.util;
import java.util.*;
import java.io.*;

public class LetterGrader {
  private void readArgs() {
          System.out.println("Hello, read CLA!");
  }
}
import java.util.*;
import java.io.*;


public class TestLetterGrader {
  public static void main(String[] args) {
    LetterGrader letterGrader = new LetterGrader(); // instantiate
        letterGrader.readArgs(); // call method
  }
}
采取的步骤
  • 首先,我编译LetterGrader:
    • 这将自动创建bin/grade/util/LetterGrader.class文件 javac-dbin-sourcepath src/grade/util/LetterGrader.java

  • 其次,我编译TestLetterGrader:
    • 这失败了
  • javac-dbin-sourcepath src/grade/util/testletegrader.java

    错误消息:

    src/grade/util/TestLetterGrader.java:6: error: cannot find symbol
        LetterGrader letterGrader = new LetterGrader(); // instantiate
        ^
      symbol:   class LetterGrader
      location: class TestLetterGrader
    
    问题:
    • 我相信我误解了如何从不同的文件(在同一位置)调用类。我怎样才能做到这一点
    您正在导入bin文件夹中的类。不要那样做,那是行不通的。您不需要任何导入,因为类位于同一位置。将包放在src文件夹下,并将类放在那里。删除
    package grade.util
    ,并将其重命名为放置类的包

    文件结构:

    src
     \ 
      \
      yourpackage 
           \
            \
        LetterGrader.java   TestLetterGrader.java
    
    然后删除构建文件夹中的所有内容并编译类。Java会让它变魔术。您确实需要担心bin文件夹,它只用于存储编译后的类

    类将如下所示:

    //package name that you created
    package yourpackage;
    
    public class LetterGrader {
    //need to be public when calling from another class
    public void readArgs() {
            System.out.println("Hello, read CLA!");
    }
    }
    
    

    你的第二个问题:

    您可以使用其他文件夹中的类,但必须导入它们,并且它们必须位于src文件夹下

    告诉您在第二个文件夹中有class A.java,在主文件夹中有class B.java。在本例中,您将导入文件夹
    import Second.A
    然后调用类
    aa=newa()
    如果在中有要调用的方法,只需执行以下操作:
    
    a.yourmethod()

    您必须将
    private void…
    更改为
    public void…
    ,因为您不能在类外调用private


    运行编译类时,它们必须位于同一文件夹中。

    您正在导入bin文件夹中的类。不要那样做,那是行不通的。您不需要任何导入,因为类位于同一位置。将包放在src文件夹下,并将类放在那里。删除
    package grade.util
    ,并将其重命名为放置类的包

    文件结构:

    src
     \ 
      \
      yourpackage 
           \
            \
        LetterGrader.java   TestLetterGrader.java
    
    然后删除构建文件夹中的所有内容并编译类。Java会让它变魔术。您确实需要担心bin文件夹,它只用于存储编译后的类

    类将如下所示:

    //package name that you created
    package yourpackage;
    
    public class LetterGrader {
    //need to be public when calling from another class
    public void readArgs() {
            System.out.println("Hello, read CLA!");
    }
    }
    
    

    你的第二个问题:

    您可以使用其他文件夹中的类,但必须导入它们,并且它们必须位于src文件夹下

    告诉您在第二个文件夹中有class A.java,在主文件夹中有class B.java。在本例中,您将导入文件夹
    import Second.A
    然后调用类
    aa=newa()
    如果在中有要调用的方法,只需执行以下操作:
    
    a.yourmethod()

    您必须将
    private void…
    更改为
    public void…
    ,因为您不能在类外调用private


    运行编译类时,它们必须位于同一文件夹中。

    感谢@maratonec的指导

    我最初的错误是,当通过终端运行程序时,我误解/错误地分配了classpath赋值变量。下面的故事帮助了我

    编译和运行Java程序(在PC上)

    •设置工作目录(比如JavaBook)
    C:\>cdjavabook

    •编译HelloWorld.java
    C:\JavaBook>javac-d bin src\HelloWorld.java

    •运行程序
    C:\JavaBook>java-classpath bin HelloWorld

    而且,将所有类文件放在同一位置的方法简化了事情。我不必担心类路径。但并不理想,因为我有很多文件要处理

    至于包的创建,在使用java之前,我将更多地使用java。我想我需要巩固我的理解


    谢谢你帮助我

    感谢@maratonec的指导

    我最初的错误是,当通过终端运行程序时,我误解/错误地分配了classpath赋值变量。下面的故事帮助了我

    编译和运行Java程序(在PC上)

    •设置工作目录(比如JavaBook)
    C:\>cdjavabook

    •编译HelloWorld.java
    C:\JavaBook>javac-d bin src\HelloWorld.java

    •运行程序
    C:\JavaBook>java-classpath bin HelloWorld

    而且,将所有类文件放在同一位置的方法简化了事情。我不必担心类路径。但并不理想,因为我有很多文件要处理

    至于包的创建,在使用java之前,我将更多地使用java。我想我需要巩固我的理解


    谢谢你帮助我

    这对你有帮助吗?
    Java会让它变得神奇。您确实需要担心bin文件夹,它只用于存储已编译的类。
    我对此有点茫然。你能指出那是什么命令吗?我的工作理解如下:1。我必须编译第2类。理想情况下,混合使用.class和.java文件不是一个很好的实践。话虽如此,我还是做了以下几点。1.构建了ran
    javac LetterGrader.java
    ,这样类与.java文件位于同一文件夹中。2.已从
    testletegrader
    中删除导入stmt。仍然有相同的错误,尽管您必须在src下创建文件夹,并将.java文件放在该文件夹中。然后在这两个类中添加
    包yourfoldernameJava变魔术:Java将在编译命令后自动将编译好的类放入bin folderThreak@maratonec。