Java中的static關鍵字修飾屬性和方法(推薦)
static關鍵字
static關鍵詞與對象無關。
static關鍵字主要修飾四個部分的內容
這里我們主要介紹static修飾屬性和修飾方法。
1.static修飾屬性(靜態(tài)屬性)
1.1.哪些成員屬性可以被static修飾。
我們把static修飾的屬性稱為靜態(tài)屬性,又叫類屬性。一個類里面的所有實例的這個屬性值都相同,我們就可以把這個屬性用static修飾,所有實例共享這個屬性值。靜態(tài)屬性在程序運行中是保存在方法區(qū)中的,而非靜態(tài)成員屬性在創(chuàng)建一個個實例對象時,和這個對象一樣存儲在堆區(qū)。
1.1.1.所有實例的某個屬性的值是一樣的,就可以使用static關鍵字修飾
例如:生活在同一個城市的所有人的所在地區(qū)屬性值是一樣的。
那么在定義這個屬性時就可以使用static關鍵字修飾。
public class Person { String name; int age; String sex; //所在地區(qū) static String country; }
1.1.2.類中的final常量
使用final修飾的常量的值是不能夠被改變的,那么就意味著這個類中,所有實例的這個屬性的值是一樣的。非靜態(tài)成員屬性每次在創(chuàng)建實例時都會開辟內存,如果將final修飾的常量定義成靜態(tài)屬性,就可以節(jié)省每次創(chuàng)建實例后的一點內存。
注意:定義final成員屬性時一定要賦初值。
public class Person { String name; String sex; //所在地區(qū) static String country; static final int age=18;
1.2.靜態(tài)屬性的訪問。
1.靜態(tài)屬性又稱為類屬性,對靜態(tài)屬性的訪問不需要創(chuàng)建對象,可以直接使用類名稱去訪問。
public class Person { String name; int age; String sex; //所在地區(qū) static String country; public static void main(String[] args) { System.out.println(Person.country); } }
2.如果這個類里面已經創(chuàng)建了實例對象,也可以通過實例對象訪問靜態(tài)屬性。(不推薦)
public class Person { String name; int age; String sex; //所在地區(qū) static String country; public static void main(String[] args) { Person per1=new Person(); System.out.println(per1.country); } }
我們就以前面這段代碼解釋一下代碼運行過程中內存中的變化。
思考題:
1.我們可以在方法中定義靜態(tài)變量嗎?
答:不可以。方法中的變量是方法在被調用之后在棧區(qū)中存儲的,而靜態(tài)變量存在方法區(qū)的,不可能存在一個變量既存儲在方法區(qū)又存儲在棧區(qū)。
2.
public class Person { String name; String sex; //所在地區(qū) static String country; static final int age=18; public static void main(String[] args) { Person per1=new Person(); per1=null; System.out.println(per1.name); } }
上面這串代碼在運行時會出現
即:空指針異常,這段代碼中,per1引用指向的地址為空。
那么
public class Person { String name; String sex; //所在地區(qū) static String country; static final int age=18; public static void main(String[] args) { Person per1=new Person(); per1=null; System.out.println(per1.country); } }
這段代碼可以運行嗎?
答:可以的。因為conutry屬性是靜態(tài)屬性。運行這段代碼的時候系統會識別到是Person類中的,per1.country
就相當于Person.country
。所以不會出現空指針異常。
2.static關鍵字修飾方法
static關鍵字修飾的方法又叫類方法,工具方法,靜態(tài)方法。同樣的,他也是可以直接使用類名稱.方法名稱調用。沒有對象就可以訪問。
1.那些方法可以使用static修飾
1.工具類的方法設置為static方法
例如:
Arrays.sort(int [ ]):傳入一個int[ ]就可以使用,不需要創(chuàng)建對象去使用
2.一個程序的主方法
程序的主方法就是程序的入口,如果設置成非靜態(tài)方法,那么主方法的使用就需要創(chuàng)建對象,而程序都沒有入口進入,怎么去創(chuàng)建對象,程序就無法運行。因此程序的主方法要設置成靜態(tài)方法,直接使用,不需要創(chuàng)建對象。
2.常見的問題
1.靜態(tài)方法能否訪問成員變量和成員方法
答:不能。靜態(tài)方法的訪問是不需要創(chuàng)建對象的,也就是說靜態(tài)方法使用中是沒有對象的,而成員方法和成員變量的使用是需要創(chuàng)建對象的,所以靜態(tài)方法是無法訪問成員變量和成員方法。
2.成員方法能否訪問靜態(tài)屬性和靜態(tài)方法。
答:可以,成員方法的訪問前提是有對象,靜態(tài)方法和靜態(tài)屬性的訪問是沒有前提條件的。因此成員方法都可以訪問,那么靜態(tài)方法和靜態(tài)屬性是一定可以訪問的
3.普通的類能否使用static修飾(不是內部類)。
答:不可以。類定義出來就是產生相應實例對象的,而用static修飾之后這個類沒有對象就可以調用了,這個類就沒有存在的意義了。在編譯過程中程序也會報錯。
到此這篇關于Java中的static關鍵字修飾屬性和方法的文章就介紹到這了,更多相關Java static關鍵字修飾屬性和方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
IntelliJ IDEA2020.2.2創(chuàng)建Servlet方法及404問題
這篇文章主要介紹了IntelliJ IDEA2020.2.2創(chuàng)建Servlet方法及404問題,這里小編使用的2020.2.2企業(yè)破解版本,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09IDEA啟動報錯Internal?error.?Please?refer?to?https://jb.gg/i
這篇文章主要介紹了IDEA啟動報錯Internal?error.?Please?refer?to?https://jb.gg/ide/critical-startup-errors解決辦法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04Java中構造方法set/get和toString的使用詳解
這篇文章主要介紹了Java中構造方法set/get和toString的使用詳解,構造函數的最大作用就是創(chuàng)建對象時完成初始化,當我們在new一個對象并傳入參數的時候,會自動調用構造函數并完成參數的初始化,需要的朋友可以參考下2019-07-07