第一个java程序--HelloWorld

2018/06/25 21:38
阅读数 40

学习任何一门语言,写的第一个程序都是HelloWorld,神奇的Helloworld.

1.java的入门程序

建议使用编辑器编写源代码,使用dos窗口运行。为什么呢?这有助于我们理解一些东西,若一开始借助开发工具,很多细节可能会被我们所忽视。首先编辑源码文件,HelloWorld.java,如下:

当源码编辑结束后,我们得清楚这个文件不是一个可执行文件,仅仅是一个普通的文本文件。我们需要对这个文件进行编译,因为我们知道java程序运行时需要借助java虚拟机的。而虚拟机能够识别我们人类能够识别的文本文件么?显然是不能的,虚拟机看的懂的是字节码文件,那么从源码文件到字节码文件这个编译过程,是谁来做的呢?java编译器,那java编译器是个什么呢?具体的后面在学习java虚拟机的过程中可知道,目前可简单的认为它就是一个程序,具备编码源码文件的功能。那么我们在dos窗口是如何执行我们的第一个程序的呢?首先需要编译。在dos窗口切换到源码文件所在目录,运行javac命令,javac的全程是:javacomplication,意思很明显java编译。javac HelloWorld.java

当命令执行结束后,在HelloWorld.java所在目录下生成了一个名为HelloWorld.class的文件,这个文件一般称为类文件,或者字节码文件。接着我们就可以运行我们的第一个程序了。java HelloWorld,如下:

我的第一个java程序运行OK了。

 2.java入门程序引发的思考

当敲下java HelloWorld这句命令的时候,整个程序的底层过程到底是怎么样的呢?这个我们可以好好思考下。

首先我们都很清楚,操作系统是我们机器非常重要的一部分,编写的源码程序,以及字节码文件都是存放在硬盘中,例如我写的HelloWorld是存放在F盘上。那么虚拟机是怎么知道知道字节码的内容的,并且执行成功,打印出我们需要看到的内容的呢?这里必然存在一个加载相关数据到虚拟机内存中的过程,程序运行过程中,获取数据以及执行指令必然是在内存中进行的,以及最终机器识别的必然是二进制数。

(1)javac.exe程序负责将源码翻译成字节码,这个时候程序并未启动,相关的数据也还未加载进内存,执行后在当前目录生成了一个字节码文件。字节码文件:任何一个字节码文件对应着唯一一个类或者接口的定义信息。

(2)我们必须明确的一点是,字节码文件是一种和任何机器以及操作系统环境无关的中间代码,是一种二进制文件,编辑人员和计算机都无法直接识别的字节码文件,它必须由专业的java解释器来解释执行,java解释器负责将字节码翻译成具体的硬件环境和操作系统能够识别的机器代码,以便执行。

(3)当我们启动java.exe来运行一段代码的时候。操作系统会启动一个JVM进程,Java虚拟机得以启动,它开始工作,JVM进程会在在内存开辟一段内存空间,作为虚拟机自己的内存空间,受虚拟机自己所管理和分配。

(4)当我们运行java helloworld命令的时候,到底发生了什么?这里涉及到类的加载,说类的加载之前,我们先认识程序运行的入口---main方法。具体过程是:开始类加载,相关的类的均被加载到内存中。虚拟机通过读取字节码文件,获取二进制字节码的字节流,通过一系列的过程,类加载完毕后,执行main方法,执行完毕后,main线程消退。最后卸载类对象。

(5)这个main()方法的声明为:public static void main(String args[])。必须这么定义,这是Java的规范。为什么要这么定义?这和JVM的运行有关系

当一个类中有main()方法,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用因此需要是限制为public static。对于java中的main方法,jvm有限制,不能有返回值,因此返回值类型为void。main方法中还有一个输入参数,类型为String[],这个也是java的规范,main()方法中必须有一个入参,类型必须String[],至于字符串数组的名字,这个是可以自己设定的,根据习惯,这个字符串数组的名字一般和sun java规范范例中main参数名保持一致,取名为args。

因此,main()方法定义必须是:“public static void main(String 字符串数组参数名[])

 3.HelloWorld另外一个版本

public class HelloWorld2{

  static{

    System.out.printlnt("Hello world");

  }

  public static void main (String [] args){

    System.exit(0);

  }

}

main方法中是让程序正常结束,Hello World会在main执行前打印出来。至于为什么,好好思考下!

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部