1、安装jdk1.6及以上
http://blog.csdn.net/hjx5200/article/details/21941425
http://blog.csdn.net/nomousewch/article/details/7885388
java运行机制:
1、编译:jdk的javac进行编译 javac java文件名路径 eg: javac D:\HelloWorld.java
编译成字节码
2、运行:包括类加载和类执行 java 文件名 eg: java D:\HelloWorld
根据Path中所配置的jdk路径找的其bin目录下的java.exe程序,然后再初始化一些java参数(比如CLASSPATH、虚拟机参数等)。
java.exe程序分配内存并启动jre/bin目录下client目录或者server目录(取决于第一步中的虚拟机参数)下的jvm.dll,java虚拟机开始启动,开始类加载、运行。
类加载:加载、连接、初始化
加载:首先加载java虚拟机默认加载类(java API:主要分布在jre/lib下,第一个被载入的java类是Object类,有时还会加 载jre/lib/ext下的jar包)--可通过以下命令查看java API加载类:java -verbose:class
然后开始加载自定义类(包括运行类和第三方jar包类)通过环境配置找到字节码文件,将字节码加载 到jvm内存区:
主类信息保存在运行时数据区的方法区(包括class的版本号,常量池,方法的字节码)
静态变量、对象的引用(实例化后的对象)保存在stack栈中,
非静态变量、方法、对象放入堆中。
连接:
验证字节码是否符合java规范,数据类型是否有效,继承和实现是否合乎标准。在这个阶段还为类的静态变量分配空间,并将其设置成JVM的默认值。对于非静态变量则不会赋值。
在jvm中各类型的初始值如下:
int,byte,char,long,float,double 默认初始值为0
boolean 为false(在jvm内部用int表示boolean,因此初始值为0)
reference类型为null
final static基本类型或者String类型,则直接采用常量值(这实际上是在编译阶段就已经处理好了)