JAVA環境變量以及變量初始化的問題

安裝JDK 選擇安裝目錄 安裝過程中會出現兩次 安裝提示 。第一次是安裝 jdk ,第二次是安裝 jre 。建議兩個都安裝在同一個java文件夾中的不同文件夾中。(不能都安裝在java文件夾的根目錄下,jdk和jre安裝在同一文件夾會出錯)

在myeclipse 當中已經自行安裝了內置的jdk和jre,而Eclipse當中沒有。

1)在系統變量裏新建JAVA_HOME變量,變量值爲:C:\Program Files\Java\jdk1.6.0_14(根據自己的安裝路徑填寫)
2)新建classpath變量,變量值爲:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
3)在path變量(已存在不用新建)添加變量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(注意變量值之間用“;”隔開)

只知道第三個環境變量的作用是可以在任何地方運行javac

javahome就是java的家,你電腦裏jdk包可能會換地方存放,如果你換了路徑,就需要修改path,這樣會很麻煩,因爲path裏面還有很多其他的路徑。所以設置一個javahome,以後你不管怎麼修改jdk存放路徑,把javahome改成你的路徑就行了

classpath,就是class文件的路徑,當你編譯一個源文件,會生成一個.class文件,如果設置了classpath,當你執行java時,它就會去classpath路徑裏面找你要執行的class文件,如果沒有設置,它就只能執行當前文件夾下的class文件。在前面加上.;這樣它就會先在當前目錄找.class文件,如果沒有,再去classpath路徑下找



轉自:http://blog.163.com/shuzhen_an/blog/static/119399304200962334211324/

類的成員變量,不管程序有沒有顯式的進行初始化,Java虛擬機都會先自動給它初始化爲默認值。 

 默認值如下:
             Boolean      false
             Char           '\u0000'(null)
             byte            (byte)0
             short           (short)0
             int               0
             long            0L
             float            0.0f
             double        0.0d
2. 局部變量聲明之後,Java虛擬機就不會自動給它初始化爲默認值,因此局部變量的使用必須先經過顯式的初始化。
      但是需要聲明的是:對於只負責接收一個表達式的值的局部變量可以不初始化,參與運算和直接輸出等其它情況的局部變量需要初始化。

通過下面這個測試可以看到JVM對哪些數據初始化,哪寫數據不初始化:

public class TestStatic {
 static int x; //類的成員變量,JVM負責初始化
 static int method()
 {
    int y=0;  //此處必須自己初始化,它不屬於類成員變量,是個method的局部變量,JVM不負責初始化

    return y;
 }
 public static void main(String[] args) {
     TestStatic as=new TestStatic();
     int z=0;  //此處必須自己初始化,它不屬於類成員變量,是個主函數裏的局部變量,JVM不負責初始化
     int aa=3; //此處aa參與了運算,所以必須初始化
     aa=aa+2;
     int a=1,b=2,max; //max只是負責接收表達式的值,不需要初始化
     max=a>b?2:1; 
     System.out.println(max); //1
     System.out.println(aa); //5
     System.out.println("z="+z); //z=0
     System.out.println("x="+as.x); //x=0  

    System.out.println("y="+as.method()); //y=0
 }

總結爲一句話便是:
 類裏定義的數據成員稱爲屬性,屬性可不賦初值,若不賦初值則JAVA會按上表爲其添加默認值;方法裏定義的數據成員稱爲變量,變量在參與運算或者打印輸出等使用之前必須賦初值。

本問題討論變量的初始化,所以先來看一下Java中有哪些種類的變量。
1. 類的屬性,或者叫值域
2. 方法裏的局部變量
3. 方法的參數

對於第一種變量,Java虛擬機會自動進行初始化。如果給出了初始值,則初始化爲該初始值。如果沒有給出,則把它初始化爲該類型變量的默認初始值。

int類型變量默認初始值爲0
float類型變量默認初始值爲0.0f
double類型變量默認初始值爲0.0
boolean類型變量默認初始值爲false
char類型變量默認初始值爲0(ASCII碼)
long類型變量默認初始值爲0
所有對象引用類型變量默認初始值爲null
,即不指向任何對象。

注意數組本身也是對象,所以沒有初始化的數組引用在自動初始化後其值也是null。初始化的數組如datetype[] a = new datetype[10];無論是局部變量還是全局變量,都初始化爲各種類型的默認值了。


對於兩種不同的類屬性,static屬性與instance屬性,初始化的時機是不同的。instance屬性在創建實例的時候初始化,static屬性在類加載,也就是第一次用到這個類的時候初始化,對於後來的實例的創建,不再次進行初始化。這個問題會在以後的系列中進行詳細討論。

對於第二種變量,必須明確地進行初始化。如果再沒有初始化之前就試圖使用它,編譯器會抗議。如果初始化的語句在try塊中或if塊中,也必須要讓它在第一次使用前一定能夠得到賦值。也就是說,把初始化語句放在只有if塊的條件判斷語句中編譯器也會抗議,因爲執行的時候可能不符合if後面的判斷條件,如此一來初始化語句就不會被執行了,這就違反了局部變量使用前必須初始化的規定。但如果在else塊中也有初始化語句,就可以通過編譯,因爲無論如何,總有至少一條初始化語句會被執行,不會發生使用前未被初始化的事情。對於try-catch也是一樣,如果只有在try塊裏纔有初始化語句,編譯部通過。如果在catch或finally裏也有,則可以通過編譯。總之,要保證局部變量在使用之前一定被初始化了。所以,一個好的做法是在聲明他們的時候就初始化他們,如果不知道要出事化成什麼值好,就用上面的默認值吧!

其實第三種變量和第二種本質上是一樣的,都是方法中的局部變量。只不過作爲參數,肯定是被初始化過的,傳入的值就是初始值,所以不需要初始化。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章