.;%JAVA_HOME%/lib/tool.jar;%java_home%/lib/rt.jar
之因此提到這個,是由於在作後面程序的測試時,犯了這個錯誤,我在配置classpath時忘掉了「.」,因而一直報 NoClassDefFoundError的錯誤,而後發現是本身沒有把當前路徑加入到java的classpath,jvm固然找不到我編譯好的class。java
public class Member_and_local { public static void main(String[] args){ //測試main函數傳參 System.out.println( "第1個參數是"+args[0]+" 第2個參數是"+args[1]+" 第3個參數是"+args[2]); } }
在咱們用cmd命令行運行java程序時,通常狀況下,首先 javac Member_and_local.java 編譯,而後 java Member_and_local 運行,其實args給咱們提供了一個傳遞參數的接口。只要咱們代碼中有相應的處理,能夠在後面加上參數運行,例如圖1中,咱們執行java Member_and_local 李根 1 232,這樣咱們在程序中就能夠經過args[0]來訪問字符串「李根」,args[1]來訪問「1」,args[2]來訪問「232」。程序員
圖1.args使用測試 jvm
Public static void main( String[] int[] args){}
public class Member_and_local { public static void main(String[] args){ //測試局部變量 //error: local variables must be initialed String name; int age; boolean sex; System.out.println( name+age+sex); } }
此段程序會報錯,由於name,age,sex是main方法中的局部變量在不初始化時會編譯不經過,由於它未初始化函數
而成員變量則不一樣,咱們用以下代碼測試:測試
public class Member_and_local { public static void main(String[] args){ Human ligen = new Human(); ligen.getInfo(); } } class Human{ public static int population; private boolean sex; private String name; private int age; private Human partner; private double height; public void getInfo(){ System.out.println( this.population+" "+this.sex+" "+this.name+" "+this.age); System.out.println( " "+this.partner+" "+this.height); } }
咱們定義了一個Human類,而且定義了6種不一樣類型的成員變量,他們均未初始化,可是咱們使用getInfo()方法直接訪問成員變量,結果並未出錯,而是以下this
0 false null 0 null 0.0
類型(Type) | int | double | String(Object) | Human(Object) | boolean |
默認值(default) | 0 | 0.0 | null | null | false |
public class Member_and_local { public static void main(String[] args){ //測試類變量和實例變量 System.out.println(Human.population); Human ligen = new Human(); System.out.println(ligen.population); } } class Human{ public static int population; public Human(){ this.population += 1; } }
結果爲0 1;說明類變量能夠同時被類對象,實例對象訪問。spa
4.引用中存放的不是對象地址,可是存放的內容能夠找到對象的堆地址;命令行
public class Member_and_local { public static void main(String[] args){ //查看引用中存放的是什麼 Human ligen = new Human(); System.out.println(ligen); } }
結果爲指針
Human@459189e1
這個內容不是地址,可是應該能夠用於尋找ligen這個對象的地址。修正:準確是 ligen.getClass().getName() + "@" + 16進制哈希碼。code
5.java參數的值傳遞和引用傳遞
java中方法的參數有多是基本變量int,long,boolean等,也多是普通包裝類對象String,Object等。在作參數傳遞時,前者是值傳遞,也就是將原變量複製一份傳給參數;後者是引用傳遞,則是將對象的引用複製一份傳遞給參數;這麼一來就會致使一些問題,若是該方法對傳入的參數作改變,值傳遞是不會影響原變量,可是引用傳遞則會影響原變量。