Java 如果main方法包含在main中调用的实例的定义,那么它怎么可能在类中拥有main方法呢?
通常,我编写类定义,然后创建一个单独的类来编写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
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
。在同一个类中创建一个类的实例对我来说完全有意义。你能解释一下哪一部分对你来说没有意义吗?