java程序解析

Python09

java程序解析,第1张

这里的java程序运行过程,是指我们编译好代码之后,在命令行开始执行java xxx命令,到java程序开始执行起来的这一过程,我们称其为运行时。

第一步,操作系统解析我们输入的java xxx命令,根据PATH中所配置的jrd路径找的其bin目录下的java.exe程序(这个程序是用c语言写的,源码在jdk的src文件中的laucher目录下),然后再初始化一些java参数(比如classpath、虚拟机参数等)。

第二步,java.exe程序根据上一步读入的虚拟机参数,分配内存并启动jre/bin目录下client目录或者server目录(哪个目录取决于第一步中的虚拟机参数)下的jvm.dll,java虚拟机开始启动。

第三步,java虚拟机初始化内存,产生bootstrap classloader,这个类加载器负责加载java API(jvm+java API被称为java运行时),其实这些jar包主要分布在jre/lib下,这些我们可以通过在java命令后加-verbose:class(如下图),可见第一个被载入的java类是Object类。

[java] view plain copy

C:\Documents and Settings\nomouse>java -verbose:class

[Loaded java.lang.Object from shared objects file]

[Loaded java.io.Serializable from shared objects file]

[Loaded java.lang.Comparable from shared objects file]

[Loaded java.lang.CharSequence from shared objects file]

[Loaded java.lang.String from shared objects file]

[Loaded java.lang.reflect.GenericDeclaration from shared objects file]

[Loaded java.lang.reflect.Type from shared objects file]

[Loaded java.lang.reflect.AnnotatedElement from shared objects file]

[Loaded java.lang.Class from shared objects file]

[Loaded java.lang.Cloneable from shared objects file]

[Loaded java.lang.ClassLoader from shared objects file]

[Loaded java.lang.System from shared objects file]

[Loaded java.lang.Throwable from shared objects file]

[Loaded java.lang.Error from shared objects file]

[Loaded java.lang.ThreadDeath from shared objects file]

[Loaded java.lang.Exception from shared objects file]

[Loaded java.lang.RuntimeException from shared objects file]

[Loaded java.security.ProtectionDomain from shared objects file]

[Loaded java.security.AccessControlContext from shared objects file]

...

第四步,bootstrap classloader载入完java API后,还会负责载入ExtClassLoader并生成一个实例,它继承于ClassLoader类,负责载入jre/lib/ext下的jar包(所以有时候需要把servlet.jar包加进去,相当于一个不配置在classpath中就可以默认访问的公共jar目录),到这里,java虚拟机默认加载类工作完成,java虚拟机找到我们指定的Class,加载这个类(所谓自定义类加载,是指我们自己写的java类、以及我们引入的一些第三方jar包的加载方式,只有代码中运行到类的时候才回去加载,我们可以实现自己的ClassLoader类,用来加载我们自己的类,如果我们没有实现自己的类加载器,上面说的ExtClassLoader会默认载入AppClassLoader并生成一个实例,由这个类加载器来进行加载),然后找到这个类的main方法,启动程序。

第1行个最后一行的“}”是java程序基本框架。

java程序一般由模块的入口函数main()的模块开始运行。

第2行到第五行定义了main()函数,其中定义了整型变量y,用于存储以0调用的自定义函数的返回值;然后用行输出函数输出变量y的值。

第6行至倒数第二行为自定义函数,形参x类型为整型,返回值为整型。

局部变量y用于存储返回值,并于倒数第三行处进行回传结果。

第8行到第14行为IF语句结构

第8行判断x>0的情况,第9行进行运算并赋给变量y;

第10行判断x为0的情况,第11行将返回值0赋给变量y;

第12行判断x<0的情况,第13行进行运算并赋给变量y;

倒数第三行处进行结果回传。