Java 如果main方法包含在main中调用的实例的定义,那么它怎么可能在类中拥有main方法呢?

Java 如果main方法包含在main中调用的实例的定义,那么它怎么可能在类中拥有main方法呢?,java,Java,通常,我编写类定义,然后创建一个单独的类来编写main方法的定义,以创建类实例并调用其方法。但是,我已经看到,可以将main方法放在main方法调用其实例的类本身中。这怎么可能?我认为我们不能在类本身中创建类的实例,这是毫无意义的 下面是我的示例:如何在类定义本身中有一个测试实例 import java.util.*; public class Test{ public int tester() { return 5; } public s

通常,我编写类定义,然后创建一个单独的类来编写main方法的定义,以创建类实例并调用其方法。但是,我已经看到,可以将main方法放在main方法调用其实例的类本身中。这怎么可能?我认为我们不能在类本身中创建类的实例,这是毫无意义的

下面是我的示例:如何在类定义本身中有一个测试实例

 import java.util.*;

public class Test{

    public int tester()
    {
        return 5;
    }

    public static void main(String args[]) {
        Test x = new Test();
        x.tester();
    }
}
当你写作时

Test x = new Test();
它只是创建一条关于如何创建对象的指令,编译器只是编译它,而不是执行该行

在Java中,在类定义完成之前,确实可以为同一类创建实例,但这只是一个编译。它没有创建任何对象。对象将在运行时创建。在运行时,它将拥有Java文件的
.class
版本,当不需要任何实例的JVM调用静态main方法时,将执行main并在运行时创建
类测试的实例


因此,在main方法中编写实例创建代码是非常好的,正如您在示例中所给出的那样。你可以一直这样做。

试着把你的类看作是一个不可更改的桶。当你执行你的程序时,你把一些沙子放在你的桶里,然后创建一个城堡(对象)。此时,这是您的第一个城堡,因此您还将执行主方法(在执行构造函数之后),主程序将创建与之前不同的另一个城堡,没有执行main,因为程序已经启动。

main
是一个静态方法,创建其类的实例是完全有效的

记住

在Java中,静态方法是属于类而不是类的方法 而不是一个类的实例。每个人都可以使用该方法 类的实例,但实例中定义的方法只能 由类的该成员访问

你可以这样做

public class Test{
   static Test x= new Test();
    public int tester()
    {
        return 5;
    }

    public static void main(String args[]) {
        x.tester();
    }
}

Java虚拟机通过创建初始类启动,该类 以依赖于实现的方式指定,使用 引导类加载器(§5.3.1)。然后,Java虚拟机链接 初始化类,初始化它,并调用公共类方法 void main(字符串[])。此方法的调用将进一步推动 执行。Java虚拟机指令的执行 构成主方法可能会导致链接(以及 (创建)其他类和接口,以及调用 其他方法的选择


因此,java只需加载您使用
JavaTest
执行的类,并执行
static
方法
main
,该方法应为
public
,返回类型为
void
<代码>测试
对象直到现在才创建,但现在它将按照您提到的那样创建
测试x=new Test()
main
方法中。

如果我没有错,这称为
callbyreference
。在同一个类中创建一个类的实例对我来说完全有意义。你能解释一下哪一部分对你来说没有意义吗?