在Java中从该类的主要内部实例化对象

Mih*_*csu 17 java program-entry-point class object instantiation

我正在浏览我的OOP类文档,我发现了这个例子:

class Student {
    private String name;
    public int averageGrade;


    public Student(String n, int avg) {
        name = n;
        averageGrade = avg;
    }

    public static void main(String[] args) {
        Student s = new Student("John", 9);
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现它们正在从同一个类的主要实例化一个对象时感到困惑.这被认为是不好的做法吗?新创建的对象s是否有主方法?

谢谢!

Jon*_*eet 17

这完全没有错.这完全正常.(不可否认,对于一个主要方法的类来说,显然可以执行某些东西会更有意义- 类中的main方法Student没有多大意义.)

对象实际上没有方法 - 具有方法,无论是在没有任何特定上下文的情况下调用的静态方法,还是在该类型(或子类)的特定对象上调用的实例方法.

虽然你可以调用s.main(...),实际上只会解析为静态方法的调用Student.main; 你不应该像这样调用静态方法"via"表达式,因为它令人困惑.


JB *_*zet 15

不,这不是不好的做法.它实际上相当频繁.你错过的是main是一种静态方法.它不是Student对象的方法.这是Student课程的一种方法.你不用它调用它someStudent.main(...),但是Student.main(...).

有关更多说明,请参阅http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html.