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