5.19(2)课堂笔记之深入理解HelloWord执行过程

Java结构

1.java源程序的基本组成单位为类。

2.只能有一个主类标识:public。

3.主类:类名就是文件名,又是编译器javac的入口。

4.虚拟机执行字节码文件(.class),main是jvm的入口方法,注意主方法不一定在主类中。


代码:

public class HelloWorld
{
    //Java应用程序入口方法
      public static void main(String[] args)
     {   String s;
           s="Hello World!";
         //向控制台打印一条信息
       System.out.println("s="+s);
       System.out.println("args="+args[0]);
     }  
}

HelloWorld的具体执行过程:

执行HelloWorld.java文件,生成HelloWorld.class字节码文件;

虚拟机执行HelloWorld.class,将这个类加载到内存中(即方法区的类代码区中);

虚拟机通过类找到HelloWorld的主方法(程序的入口方法),访问权限为public(公有可用),虚拟机传递String类型参数的地址到主方法的args中去,并在栈区为args开辟内存空间,返回一个void的返回值;

定义一个String(标准类库中的)类型的变量(在栈区开辟空间)s,s的值不确定(垃圾值,编译无法通过);

s = “Hello World!”,对象“Hello World!”在方法区的常量数据区开辟空间,属性即为:Hello World!,方法即为:toString(),变量s存放对象“Hello World!”的地址;

虚拟机找到标准类库中的System.class类并加载到内存中(即方法区的类代码区中),System.out为标准字节输出流对象(),并调用println()方法将变量s的值打印到屏幕上。


过程图解


通过HelloWorld理解java的流程(详解)
1: 编译成字节码文件:
文件名和主类名相同,通过javac编译HelloWorld.java,
Javac在安装目录的bean目录下,为什么一执行Tomcat,因为Path,
通过文件名找到主类名,1个类编译成一个字节码文件,编译器只认主类

2.用虚拟机执行java HelloWorld ,将字节码文件加载到内存,java的虚内存一般是3个区(方法区,堆区,栈区)(指令计数器的存储区、本地栈一般不用)

首先,Java虚拟机一执行后面的字节码文件,就把HelloWorld的字节码文件加载到方法区的类代码区;

加载完以后,去执行主方法;

(方法需要通过对象调用),通过类来调用方法,加一个static静态方法(目的:告诉虚拟机,通过类来找主方法),静态绑定,一加载类以后,虚拟机通过类找到它所绑定的静态方法;

虚拟机和主方法必须在同一个路径下,相同的包下,但是实际上并不在同一路径下,为使用主方法,加public(公有的,目的:能不能用主方法);

虚拟机告诉主方法有返回值,void,不处理返回值;

虚拟机向主方法传参数:形参:String[]类型,即字符串数组类型;没传参,则创建一个空数组对象,并传给主方法;

创建形参变量args(类型:String[])(存放在主方法main的栈帧),在方法的工作空间(栈)开辟空间,方法里的局部变量形参及异常断点和返回断点都会放在栈里;对应字节码文件(String[].class),加载在方法区的类代码段,虚拟机在堆里创建空数组对象(New String[0]);并将args指向空数组对象;

创建一个变量s,(在方法里定义的),在主方法的工作空间栈开辟空间,s的类型为String,
并加载String.class,s无确切的值,为垃圾值;HelloWorld在方法区的常量区开辟空间,创建一个对象,HelloWorld,s存放对象的地址、句柄;

三个流:标准字节输出流(System.out)、标准字节输入流(System.in)、标准字节错误流(System.error)通过System类创建并加载到内存中;虚拟机调用主方法时会创建这三个默认对象。

System.out.Println通过对象调用,对象名为标准字节输出流(System.out)调用println方法输出s的值(HelloWorld字符串对象的地址),toString()覆写了,自动调用toString()


源文件:1个 HelloWorld.java
类文件:5个 HelloWorld.class、String[].class、String.class、System.class、Object.class
对象:5个 空数组对象、标准字节输出流对象(System.out)、标准字节输入流对象(System.in)、标准字节错误流对象(System.error),常对象Hello World
方法:3个 主方法main()、println()、toString()
变量:2个 args、s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值