一、其他註意點 1.對於帶有static的方法,我們講過需要用“類名.”的方式進行訪問,但是其實我們使用“引用.”的方式也是可以進行訪問這個方法的舉例。 2.對於上面的特性,為什麼這樣,我想用下麵這個更進一步的例子,也許可以知曉一二了,我們之前講過空指針異常。 這個空指針異常,是指空引用訪問實例相關 ...
一、其他註意點
1.對於帶有static的方法,我們講過需要用“類名.”的方式進行訪問,但是其實我們使用“引用.”的方式也是可以進行訪問這個方法的舉例。
package com.bjpowernode.java_learning; public class D43_ { public static void main(String[] args) { Test3.test3(); Test3 t1 = new Test3(); t1.test3(); } } class Test3{ String name; public Test3() {} public static void test3(){ System.out.println("我可以執行"); } }
2.對於上面的特性,為什麼這樣,我想用下麵這個更進一步的例子,也許可以知曉一二了,我們之前講過空指針異常。
這個空指針異常,是指空引用訪問實例相關的數據就是對象相關的數據,這些數據在訪問的時候,必須有對象的參與,當空引用的時候,對象是不存在的,訪問這些數據就會出現空指針異常。
我們在緊接著上面的程式,再加一段執行程式
t1 = null; t1.test3();
我們可以看到,即使是空指針,也照樣可以執行並沒有出現空指針異常,這說明瞭這裡的t1這個對象,我們根本就沒用到它,在執行的時候,系統依然會改寫為Test3.test3()這樣進行執行。
但是這種方式不推薦,雖能執行但不合我們的邏輯。
二、靜態變數
1.首先看一段對象創建的代碼
package com.bjpowernode.java_learning; public class D43_2_static_keyword { public static void main(String[] args) { Chinese c1 = new Chinese("zhangsan",32,"China"); Chinese c1 = new Chinese("lisi",34,"China"); } } class Chinese{ String name; int id; String country; public Chinese(String name,int id,String country) { this.name = name; this.id = id; this.country = country; } }
解釋:我們創建了兩個Chinese對象,他們的國籍都是中國,但是這樣我們每次創建都得寫一次China,這樣就造成了代碼的冗餘,當我們去掉這個實例變數的時候,場景不合理,還需要這樣的屬性值,因此我們對於這種對象都共有的屬性,引出靜態變數的概念。
2.靜態變數,也就是在類的代碼中,對於實例變數,我們加一個static關鍵字,代表這個屬性是所有創建出來的該對象共有的屬性
(1)靜態變數在類載入的時候進行初始化,不需要創建對象了,記憶體就開闢出來了。
(2)靜態變數存儲在方法區記憶體。
例子:
package com.bjpowernode.java_learning; public class D43_2_static_keyword { public static void main(String[] args) { Chinese c1 = new Chinese("zhangsan",32); System.out.println(c1.country); System.out.println(Chinese.country); c1 = null; System.out.println(c1.country); } } class Chinese{ String name; int id; static String country = "China"; public Chinese(String name,int id) { this.name = name; this.id = id; } pubic Chinese() {} }
個例子可以看出我們訪問這個實例變數的時候,可以用"類."訪問,也可以用"引用."訪問,都成功了,而且原理也和我們上面講述空指針類似,下麵的再幾個例子。
package com.bjpowernode.java_learning; public class D43_2_static_keyword { public static void main(String[] args) { // Chinese c1 = new Chinese("zhangsan",32);//這樣寫報錯因為,缺一個參數,即使是提前被定義了 Chinese c2 = new Chinese("lisi",34,"fhai"); //換個值 Chinese c3 = new Chinese("lisi",34,"China"); System.out.println(c2.country); System.out.println(c3.country); } } class Chinese{ String name; int id; static String country = "China"; public Chinese(String name,int id,String country) { this.name = name; this.id = id; this.country = country; } pubic Chinese() {} }
解釋:說明即使我們定義了構造函數來修改這種對象裡面的country值也修改不了。
(3)總結:
i.static英語的那次翻譯為:靜態的;
ii.static修飾的方法是靜態方法;
iii.static修飾的變數是靜態的;
iv.所有的static修飾的元素都稱為靜態的,都可以使用“類名.”的方式進行訪問,當然也可以用“引用.”的方式進行訪問(但不建議這麼做)
三、源碼:
D43_other_anouncements_of_interviewing_object.java
D43_2_static_keyword1.java
D43_2_static_keyword2.java
地址:
https://github.com/ruigege66/Java/blob/master/D43_other_anouncements_of_interviewing_object.java
https://github.com/ruigege66/Java/blob/master/D43_2_static_keyword1.java
https://github.com/ruigege66/Java/blob/master/D43_2_static_keyword2.java
2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料