java hello_Java里的HelloWorld?

当读者看到这个标题时,一定还在想,HelloWorld这么简单,我上课第一节课就是这个,可是你想过它的底层原理吗?为什么可以输出字符串到控制台?这之间究竟发生了什么吗?于是,这便是我们讨论的内容了,首先贴代码:

4fa469f0a0fd

HelloWorld代码

首先,看到这串代码,我们会有几个问题。

第一个问题:System.out.println可以输出字符串,但是为什么可以输出字符串,为什么不可以直接print()输出,于是,我们按住ctrl+鼠标左键,或者F3,进入到方法源码里面去:

4fa469f0a0fd

System源码

可以看到,这是一个常量类,于是我们继续往下找:

4fa469f0a0fd

out部分代码

我们可以通过右边的Outline快速查找,可以看到,这是一个常量+静态的属性,也就意味着,可以直接调用System.out。这就解释了第一个问题的一半了,于是我们接着往下走,在out属性那里,按住ctrl键,会出现Open declaration Type,点击进入,就可以看到方法啦:

4fa469f0a0fd

Out在PrintStream类里

看到类名PrintStream,就可以知道这是一个打印类了,我们继续在方法里面,找print方法,在右边工具栏,会更容易看到。

4fa469f0a0fd

print方法

看到这里,也就恍然大悟了,System是一个类,out是一个静态变量,print是一个方法,所以可以直接调用。

4fa469f0a0fd

write方法

至于这里的write方法,就不细讲了,因为看代码,会扯到Buffer缓冲区,synchronized高并发之魂,以及JVM编译,还要补一下操作系统的知识等等。

第二个问题:为什么main方法里,要写成(String[] args){}

答:String[] args是main函数的形式参数,可以用来获取命令行用户输入进去的参数。public static void main(String[] args)是固定的入口形式,不能变。

比如编译文件的时候java HelloWorld a b c,这样String[] args就是[a,b,c];

第三个问题:Java是怎么执行的,你肯定会回答Java -c 编译成class字节码文件,然后再Java,就可以了。答案也正确,可是在这过程中究竟发生了什么呢?

首先是Java -c 编译成.class(类字节码)文件,而这文件,操作系统是能认识的,有个小建议,就是先了解一下计算机操作系统,不用钻太深,了解之后,更容易形成一个体系。

之后再Java 运行,这里便是重点了,首先,JVM虚拟机装载.class,JVM虚拟机可以让程序在不同的系统上(Windows,Linux),也可以实现相同的功能,接着,便是类装载器(JVM)装载类字节码(class文件)。

java中,类加载器把一个类装入JAVA虚拟机需要经过三个步骤来完成:装载、链接、初始化,其中链接又分来校验、准备、解析过程

装载:查找和导入.class文件

连接:检查装入.class文件的正确性,然后,java虚拟机为变量分配内存,设置默认值

初始化:把符号引用变成直接引用。

在书中,深入理解Java虚拟机讲到了这个。

于是这样,helloworld就输出啦!

旁白:JVM虚拟机最好两年工作经验学比较好,并且要有操作系统的基础,有C的基础,毕竟Java是基于C语言的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值