求解决!Java中引用自己写的类,JDK报错:找不到符号

写的两个类是在同一包中的不同源文件里,类TestMyClass1调用类MyClass报错:

package corejava.chp6;
public class MyClass{
private int value;
public MyClass(){}
MyClass(int value){
this.value = value;
}
public int getValue(){
return value;
}
public void setValue(int value){
this.value = value;
}
}

 

package corejava.chp6;
public class TestMyClass1{
public static void main(String args[]){
MyClass mc1 = new MyClass();
MyClass mc2 = new MyClass(10);
System.out.println(mc1.getValue());
System.out.println(mc2.getValue());
}
}
 

报错信息:

\javaTest\corejava\chp6>javac -d . TestMyClass1.java
TestMyClass1.java:4: 错误: 找不到符号
MyClass mc1 = new MyClass();
^
  符号:   类 MyClass
  位置: 类 TestMyClass1

 

环境变量设置无问题,编译其他无包名的Java文件没有问题,就是带包名后就不行了。

你的Java类有问题啊

两个class写在同一个java文件中有一下三种情况

第一种:

一个public类,多个非public类,例如:
public class A{}
class B{}
第二个class前面不能加public。

二种:
第二种是内部类,写在公共类体里面的,例如:
public class A{
  private class B{}

只有A能调用B。
第三种:
第三种是匿名内部类,一般在awt编程中比较多,位于方法体内部,一般用于只调用一次或者只有这个方法调用,例如:
public class A{
  public void c(){
    this.addWindowListener(new WindowAdapter(){
   public void windowClosing(WindowEvent e){
    System.exit(0);
————————————————
版权声明:本文为CSDN博主「斜阳雨陌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_15037231/article/details/80086099

javac是编译 -d是打包 .是代表当前目录 hello.java是要编译的java程序,运行时候TestMyClass1.java前加完整的路径试试

你得先编译MyClass类吧。

你的第一个包里的代码问题:第三个MyClass 前面加public

要想使用一个类需要先加载这个类,让jvm知道这个类的信息,你只编译了MyClass1,但是没有编译MyClass

嗯,我验证了一下,发现了一个有意思的事。

javac有可能自动编译依赖类的java文件,不过前提是目录结构和包结构要一致。

也就是说,编译TestMyClass1时,如果在类路径中没有找到MyClass这个class文件,就会以当前的工作目录(也就是你执行javac命令的目录)为基础路径,依赖类的【包名+类名+.java】为相对路径去找源文件一起编译,找不到肯定就报错了。

这就能解释如果两个类都不加包名就能一起编译。

如果想加了包名也起到同样的效果,javac就应该在起始包名的父目录下执行,即\javaTest目录下执行>javac -d . corejava\chp6\TestMyClass1.java

-d是指定编译结果的目录,可以另选一个目录,比如./out,Eclipse或IDEA的编译方式和这差不多。