如何在一个文件中使用java中的多个类?

时间:2018-02-17 07:32:02

标签: java

我想知道如何在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();
    }
}

7 个答案:

答案 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 classesstatic 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();` }