如何解决在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
,
您可以尝试以下方法:
- 在p1中打开cmd,使用
javac .\Demo.java .\Protection.java
;然后您会看到生成了两个.class文件 - 使用
cd ..
,然后您可以看到自己的包裹p1
- 使用
java p1.Demo
,然后您可以看到预期的输出
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。