我想知道如何在java中的一个文件中使用多个类。我输入了这段代码,但它显示了编译错误。
class test {
int a, b, c;
void getdata(int x, int y) {
a = x;
b = y;
}
void add() {
c = a + b;
System.out.println("Addition = " + c);
}
}
public class P8 {
public static void main(String[] args) {
test obj = new test();
test.getdata(200, 100);
test.add();
}
}
答案 0 :(得分:2)
每个文件只能有一个 public 顶级类。因此,从除了一个(或所有)类之外的所有类中删除public
。
但是,如果文件中有多个类,可能会出现一些令人惊讶的问题。基本上,你可以通过(意外或其他方式)在同一个包中定义多个具有相同名称的类来解决问题。
如果你只是一个初学者,可能很难想象我会发生什么。避免这些问题的简单规则是:每个文件一个类,并调用该文件与它声明的类相同。
答案 1 :(得分:0)
我希望它会对你有所帮助.... 我刚刚将test.getdata()更改为obj.getdata() 和test.add()到obj.add().....检查出来..
class test {
int a,b,c;
void getdata(int x, int y) {
a=x;
b=y;
}
void add() {
c=a+b;
System.out.println("Addition = "+c);
}
}
公共类P8 {
public static void main(String[] args) {
test obj = new test();
obj.getdata(200,100);
obj.add();
}
}
你不能调用test.getdata().. 和test.add()...作为非静态方法
答案 2 :(得分:0)
每个 java 文件(COMPILATION UNIT)最多可以使用一个 public class
,并且可以使用不限数量的单独package-private
类。
编译单元必须命名为公共类。
您还可以在public class
inner classes
和static nested classes
中拥有无限数量。
内部类具有指向封闭类的内部指针,因此它们可以访问其成员以及本地变量。它们可以是匿名的。
静态嵌套类就像常规的公共类一样,但是在封闭类
中定义答案 3 :(得分:0)
您向我们展示的类中的编译错误与在文件中包含两个类无关。
public static void main(String[] args) {
test obj = new test();
test.getdata(200, 100); // error here
test.add(); // error here
}
当我使用javac
编译代码时,错误消息为:
$ javac P8.java
P8.java:21: error: non-static method getdata(int,int) cannot be referenced from a static context
test.getdata(200, 100);
^
P8.java:22: error: non-static method add() cannot be referenced from a static context
test.add();
^
2 errors
问题是test
是类名,而不是变量名。因此,您尝试调用实例方法,就像它们是静态方法一样。
但在我看来,这是一个经典的"我已经在脚下妈妈拍摄了#34;时刻。
您已经破坏了最受广泛观察的Java风格规则之一。
Java类名应始终以大写字母开头。
您已将您的课程命名为test
而不是Test
。所以当你写了
test.getdata(200, 100);
test
看起来像一个变量名,看起来像是一个实例方法的调用。但它不是。
我敢打赌,这是导致您误解错误消息的一部分,因为它与某个文件中有两个类有关(以某种方式)。
您的代码中还有另一种风格咆哮。您已调用方法getdata
,但它实际上表现为Test
类的(某种)setter。如果您的代码不是很小,以至于它适合单个页面,那将会产生误导。
最后,我同意那些建议您不要将多个顶级课程放入单个源文件的人。这是合法的代码,但不必要。并且样式指南通常建议不要这样做。
答案 4 :(得分:-1)
这是一个如何在类中嵌套类的基本示例。对于这个例子,让我们说我的文件名为Test.java
public class Test {
public Test() {
}
class Person {
public Person() {
}
}
}
你应该真正看看构造函数是如何工作的,因为这可能是你的问题之一。不幸的是,无法在没有更多信息的情况下告诉其他什么。
答案 5 :(得分:-2)
您必须将您的课程彼此嵌套,但不建议这样做。
public class P8 {//Currently inside P8 class
class test {//Declaring while inside P8
private int a, b, c;//Private vars in a nested class
void getdata(int x, int y) {
a = x;
b = y;
}
void add() {
c = a + b;
System.out.println("Addition = " + c);
}
}
public static void main(String[] args) {//Running the main for P8 class
test obj = new test();
test.getdata(200, 100);
test.add();
}
}
嵌套类的一个原因是一个坏主意是剥离了它的隐私类。私密' java中的tag接受用它标记的任何变量,并且只允许该类访问它,但如果该类在另一个内部,则两个类都可以自由访问这些私有变量。
答案 6 :(得分:-2)
{
// 您必须通过您创建的对象调用该方法。然后它将运行而不会出错。
测试 obj = 新测试();
obj.getdata(20, 10);
obj.add();`
}