java中HelloWorld程序的执行流程

public class HelloWorld {
    public static void main(String[] args)
    {    
            String  s ;             //定义一个String类型的变量 s
              s = “Hello World!”;  //定义字符串 s
          System.out.println(s); 
    }
}

二:详细分析从编译到执行到输出结果的过程:

1.先通过编译器(javac)编译HelloWorld.java文件,找到主类HelloWorld里面有多少个类(多个类中只有一个类可以被public修饰)就编译成多少个.class字节码文件

2.然后通过虚拟机(JVM)解释含有主函数的.class文件(HelloWorld.class)。通过main()方法获得程序的入口,此时通过三个允许(static静态绑定类,用public确定方法,再用void确定不处理返回值)才可以进入并执行该程序。

3.主方法在内存的栈区的开辟工作空间,开始main方法的时候会到标准类库调用String[] ,String , System标准字节输入输出流,Object等这几个类的字节码文件加载到方法区的类代码段中。

4.在堆区创建一个空(String[ ])数组对象从栈区把args传过来到堆的空数组对象String[ ]中。

5.因为String s 是成员变量所以在主方法的工作区间创建String类型的 s 变量。

6.定义了一个”Hello world !”常量对象存放在方法区的常量值数据区并且会创建相应的toString()方法,栈区的s变量指向了 这个方法区的常量。

7.最后执行输出语句输出其实是s的地址,但是s指向(存储)的是“Hello world !”常对象的地址,而且该常对象覆盖重写了父类的toString()方法,所以最后输出的结果是:Hello world !

三:通过画图理解对象如何创建

四:对象,方法,创建的个数

System类不能创建对象,他是静态的所有的属性方法都是以System为前缀,图中的三个属性 是流的对象,这点不能理解错了。

产生了一个.java源文件.
字节码文件:至少5个(HelloWorld.class,String[].class, string.class, object.class, System.class)还有其他的一些深入的;
对象:5个 ;String[ ]空数组对象,流对象三个,(helloworld)常量对象在方法区的常量区;

几个方法:3个;main方法,print,toString();
几个变量:2个 args,s (在主方法的栈帧中);

————————————————
版权声明:本文为CSDN博主「小白_hy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaobai_hy/article/details/81380723

Last modification:May 3rd, 2020 at 11:59 pm
如果觉得我的文章对你有用,请随意赞赏