1、安裝jdk1.6及以上
http://blog.csdn.net/hjx5200/article/details/21941425
http://blog.csdn.net/nomousewch/article/details/7885388
java運(yùn)行機(jī)制:
1、編譯:jdk的javac進(jìn)行編譯 ?javac ?java文件名路徑 ?eg: javac D:\HelloWorld.java
編譯成字節(jié)碼
2、運(yùn)行:包括類加載和類執(zhí)行 java 文件名 ?eg: java D:\HelloWorld
根據(jù)Path中所配置的jdk路徑找的其bin目錄下的java.exe程序,然后再初始化一些java參數(shù)(比如CLASSPATH、虛擬機(jī)參數(shù)等)。
java.exe程序分配內(nèi)存并啟動(dòng)jre/bin目錄下client目錄或者server目錄(取決于第一步中的虛擬機(jī)參數(shù))下的jvm.dll,java虛擬機(jī)開始啟動(dòng),開始類加載、運(yùn)行。
類加載:加載、連接、初始化
加載:首先加載java虛擬機(jī)默認(rèn)加載類(java API:主要分布在jre/lib下,第一個(gè)被載入的java類是Object類,有時(shí)還會(huì)加 ? ? ? ?載jre/lib/ext下的jar包)--可通過以下命令查看java API加載類:java?-verbose:class
然后開始加載自定義類(包括運(yùn)行類和第三方j(luò)ar包類)通過環(huán)境配置找到字節(jié)碼文件,將字節(jié)碼加載 ? ? ? ?到j(luò)vm內(nèi)存區(qū):
主類信息保存在運(yùn)行時(shí)數(shù)據(jù)區(qū)的方法區(qū)(包括class的版本號(hào),常量池,方法的字節(jié)碼)
靜態(tài)變量、對(duì)象的引用(實(shí)例化后的對(duì)象)保存在stack棧中,
非靜態(tài)變量、方法、對(duì)象放入堆中。
連接:
驗(yàn)證字節(jié)碼是否符合java規(guī)范,數(shù)據(jù)類型是否有效,繼承和實(shí)現(xiàn)是否合乎標(biāo)準(zhǔn)。在這個(gè)階段還為類的靜態(tài)變量分配空間,并將其設(shè)置成JVM的默認(rèn)值。對(duì)于非靜態(tài)變量則不會(huì)賦值。
在jvm中各類型的初始值如下:
int,byte,char,long,float,double 默認(rèn)初始值為0
boolean 為false(在jvm內(nèi)部用int表示boolean,因此初始值為0)
reference類型為null
final static基本類型或者String類型,則直接采用常量值(這實(shí)際上是在編譯階段就已經(jīng)處理好了)