成員變量和局部變量java
package object; /** * 成員變量和局部變量 * * */ public class VariableTest { //成員變量 public static String staticname = "類屬性"; public String nostaticname = "實例屬性"; //沒有初始化的成員變量 public static String staticname1; public String nostaticname1; //定義一個方法 public void info(){ //在方法中定義一個局部變量i //int i; //直接輸出是輸出不出來的,由於沒有初始化 //System.out.println(i); //定義一個局部變量i並初始化 int i = 10; //輸出i System.out.println(i); } //定義了一個靜態的方法 public static void infos(){ int i = 20; System.out.println(i); } public static void main(String[] args) { /*第一問:類屬性和實例屬性的範圍同樣嗎?*/ //在沒建立實例以前 能夠調用類屬性,但不能調用實例屬性 System.out.println(VariableTest.staticname);//結果:類屬性 //實例化對象以後,就能夠調用實例屬性了 VariableTest vt = new VariableTest(); System.out.println(vt.nostaticname);//結果:實例屬性 /*--- 結論:在成員變量中,類屬性的範圍比實例屬性大一點 ---*/ System.out.println("----------"); /*第二問:成員變量須要顯性初始化嗎?*/ //直接調用沒有初始化的類屬性 System.out.println(VariableTest.staticname1);//結果:null //用實例化對象調用沒有初始化的實例屬性 System.out.println(vt.nostaticname1);//結果:null /*--- 結論:成員變量會自動隱性初始化,賦給變量一個默認值 ---*/ System.out.println("----------"); /*第三問:若是用實例化後的對象去調用類屬性會怎麼樣?*/ //vt.staticname; //這樣會報錯 //Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration //翻譯:語法錯誤,插入「變量聲明符」來完成局部變量聲明 /*爲何會報錯。一開始我覺得是由於eclipse出錯了 *後來我直接用文本文檔重寫了一個test *編譯文件後,報不是語句的錯,而後我又試了一下 *VariableTest.staticname *也是報錯,說明這種寫法是不正確的,具體爲何有待研究*/ vt.staticname = "改變了的類屬性"; //若是同時給類屬性賦值,就不會報錯...有警告 //The static field Variable Test.static name should be accessed in a static way //翻譯:靜態字段變量測試。靜態的名字應該在一個靜態方法訪問 System.out.println(vt.staticname);//結果:改變了的類屬性 //這樣就不會報錯,可是會有警告,同上↑ /*結論:用實例化後的對象調用類屬性,格式正確的狀況下,是能夠調用的,但有警告 *經過對象調用類屬性,一樣能夠改變類屬性的值*/ System.out.println("----------"); //定義在方法中的局部變量 /*第四問:定義在方法中的局部變量,出了方法還能訪問嗎?*/ //調用方法 vt.info();//結果:10 //如今還能用info中的i嗎? //System.out.println(i); //報錯:i cannot be resolved to a variable //翻譯:i 不能轉換成一個變量 /*結論:定義在方法中的局部變量,出了方法就不能被訪問了*/ System.out.println("----------"); //定義在代碼塊中的局部變量 /*第五問:定義在代碼塊中的局部變量,出了代碼塊還能訪問嗎?*/ { int j = 11; System.out.println(j);//結果:11 } //出了代碼塊 //System.out.println(j); //一樣報錯,內容與上面的同樣 /*定義在代碼塊中的局部變量,出了代碼塊就不能訪問了*/ System.out.println("----------"); //後續:一個靜態方法 infos();//結果:20 //這樣依然報錯 //System.out.println(i); } }
package object; /** * 局部變量覆蓋成員變量 * */ public class VariableCover { /*當實例變量與方法中的局部變量同名時, *局部變量的值會覆蓋實例變量*/ //定義實例變量 public String city = "合肥"; private static String citys = "滁州"; //定義一個方法 public void function(){ String city = "蚌埠"; //輸出 //方法中的同名局部變量會覆蓋實例變量 System.out.println(city);//結果:蚌埠 //要想調用實例變量,能夠用this System.out.println(this.city);//結果:合肥 } public static void main(String[] args) { String citys = "南京"; //方法中的同名局部變量會覆蓋實例變量 System.out.println(citys);//結果:南京 //能夠經過類名調用被覆蓋的類屬性 System.out.println(VariableCover.citys);//結果:滁州 String city = "上海"; System.out.println(city);//結果:上海 //這樣也能夠 System.out.println(new VariableCover().city);//結果:合肥 new VariableCover().function(); } }
/* 文章是我從個人CSDN博客裏考過來的,由於那邊用的不習慣,比較亂,沒有這邊純粹...雖然有些功能是挺好的...全轉過來以後,那邊就廢棄了.... */