微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Java包中使用主类

如何解决在Java包中使用主类

我正在尝试运行文件Demo.java,该文件正在同一包中调用Protection类,但是它给出了错误 这是主要课程。

package p1;
// Instantiate the varIoUs classes in p1.
class Demo {
  public static void main(String args[]) {
    Protection ob1 = new Protection();
    //Derived ob2 = new Derived();
    //SamePackage ob3 = new SamePackage();
  }
}

这是我要在主类中使用的类。

package p1;

public class Protection {

  public int n = 1;
  private int n_pri = 2;
  protected int n_pro = 3;
  public int n_pub = 4;

  public Protection() {
    System.out.println("base constructor");
    System.out.println("n = " + n);
    System.out.println("n_pri = " + n_pri);
    System.out.println("n_pro = " + n_pro);
    System.out.println("n_pub = " + n_pub);
  }
}

出现此错误

$ javac Demo.java
Demo.java:6: error: cannot find symbol
Protection ob1 = new Protection();
^
  symbol:   class Protection
  location: class Demo
Demo.java:6: error: cannot find symbol
Protection ob1 = new Protection();
                     ^
  symbol:   class Protection
  location: class Demo
2 errors
error: compilation Failed

解决方法

您应该仅使用javac,而不是java

使用命令java时,可以执行一个文件,但只能执行该文件中的类。这里有几个文件,因此您应该对其进行编译才能使用它们。

执行以下操作:

$ mkdir p1
$ mv Demo.java Protection.java p1/
# edit p1/Demo.java to change `class Demo` to `public class Demo`
$ javac p1/*
$ java p1.Demo

这行得通,并导致了以下结果:

base constructor
n = 1
n_pri = 2
n_pro = 3
n_pub = 4
,

您可以尝试以下方法:

  1. 在p1中打开cmd,使用javac .\Demo.java .\Protection.java;然后您会看到生成了两个.class文件
  2. 使用cd ..,然后您可以看到自己的包裹p1
  3. 使用java p1.Demo,然后您可以看到预期的输出

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。