深入了解Java中的static關(guān)鍵字
static修飾成員變量
static修飾的成員變量,稱為靜態(tài)成員變量,靜態(tài)成員變量最大的特性:不屬于某個具體的對象,是所有對象所共 享的
public class Student{ public String name; public String gender; public int age; public double score; public static String classRoom = "Bit306"; Student(String name,String gender,int age,double score){ this.name=name; this.gender=gender; this.age=age; this.score=score; } public static void main(String[] args) { // 靜態(tài)成員變量可以直接通過類名訪問 System.out.println(Student.classRoom); Student s1 = new Student("Li leilei", "男", 18, 3.8); Student s2 = new Student("Han MeiMei", "女", 19, 4.0); Student s3 = new Student("Jim", "男", 18, 2.6); // 也可以通過對象訪問:但是classRoom是三個對象共享的 System.out.println(s1.classRoom); System.out.println(s2.classRoom); System.out.println(s3.classRoom); } }
此時通過代碼我們可以看到被static關(guān)鍵字修飾的成員屬于某個具體的對象,是所有對象所共 享的
【靜態(tài)成員變量特性】
- 不屬于某個具體的對象,是類的屬性,所有對象共享的,不存儲在某個對象的空間中
- 既可以通過對象訪問,也可以通過類名訪問,但一般更推薦使用類名訪問
- 類變量存儲在方法區(qū)當(dāng)中
- 生命周期伴隨類的一生(即:隨類的加載而創(chuàng)建,隨類的卸載而銷毀)
static修飾成員方法
一般類中的數(shù)據(jù)成員都設(shè)置為private,而成員方法設(shè)置為public,那static屬性應(yīng)該如何訪問呢?
public class Student{ public String name; public String gender; public int age; public double score; private static String classRoom = "Bit306"; Student(String name,String gender,int age,double score){ this.name=name; this.gender=gender; this.age=age; this.score=score; } } class Textstudent{ public static void main(String[] args) { // 靜態(tài)成員變量可以直接通過類名訪問 System.out.println(Student.classRoom); Student s1 = new Student("Li leilei", "男", 18, 3.8); Student s2 = new Student("Han MeiMei", "女", 19, 4.0); Student s3 = new Student("Jim", "男", 18, 2.6); // 也可以通過對象訪問:但是classRoom是三個對象共享的 System.out.println(s1.classRoom); System.out.println(s2.classRoom); System.out.println(s3.classRoom); } }
此時我們會發(fā)現(xiàn)編譯器報錯
Java中,被static修飾的成員方法稱為靜態(tài)成員方法,是類的方法,不是某個對象所特有的。靜態(tài)成員一般是通過 靜態(tài)方法來訪問的
public class Student { public String name; public String gender; public int age; public double score; private static String classRoom = "Bit306"; public static String getClassRoom() { return classRoom; } } class Textstudent{ public static void main(String[] args) { System.out.println(Student.getClassRoom()); } }
這里的getClassRoom成員方法要用static關(guān)鍵字修飾否則還要重新實例化對象,用static修飾后可以直接通過類名調(diào)用
【靜態(tài)方法特性】
1.不屬于某個具體的對象,是類方法
2.可以通過對象調(diào)用,也可以通過類名.靜態(tài)方法名(…)方式調(diào)用,更推薦使用后者
3.不能在靜態(tài)方法中訪問任何非靜態(tài)成員變量
public class Student { public String name; public String gender; public int age; public double score; private static String classRoom = "Bit306"; public static String getClassRoom(){ age += 1; return classRoom; } } class Textstudent{ public static void main(String[] args) { System.out.println(Student.getClassRoom()); } }
4.靜態(tài)方法中不能調(diào)用任何非靜態(tài)方法,因為非靜態(tài)方法有this參數(shù),在靜態(tài)方法中調(diào)用時候無法傳遞this引用
public static String getClassRoom(){ doClass(); return classRoom; } // 編譯報錯:Error:(35, 9) java: 無法從靜態(tài)上下文中引用非靜態(tài) 方法 doClass()
static成員變量初始化
靜態(tài)成員變量的初始化分為兩種:就地初始化 和 靜態(tài)代碼塊初始化
就地初始化
public class Student{ private String name; private String gender; private int age; private double score; private static String classRoom = "Bit306"; }
靜態(tài)代碼塊初始化
static { classRoom = "bit306"; }
使用static定義的代碼塊稱為靜態(tài)代碼塊。一般用于初始化靜態(tài)成員變量。
默認(rèn)初始化
public class Student{ private String name; private String gender; private int age; private double score;
通過提供get和set方法初始化
public static String getClassRoom() { return classRoom; } ??????? public static void setClassRoom(String classRoom) { Student.classRoom = classRoom; }
其中g(shù)et方法是獲取修改后的值,set方法是設(shè)置static修飾的值
到此這篇關(guān)于深入了解Java中的static關(guān)鍵字的文章就介紹到這了,更多相關(guān)Java static關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解讀@RequestBody與post請求的關(guān)系
這篇文章主要介紹了解讀@RequestBody與post請求的關(guān)系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12解決Java調(diào)用BAT批處理不彈出cmd窗口的方法分析
本篇文章是對Java調(diào)用BAT批處理不彈出cmd窗口的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05SpringBoot3使用Jasypt實現(xiàn)配置文件信息加密的方法
對于一些單體項目而言,在沒有使用SpringCloud的情況下,配置文件中包含著大量的敏感信息,如果這些信息泄露出去將會對企業(yè)的資產(chǎn)產(chǎn)生重大威脅,因此,對配置文件中的敏感信息加密是一件極其必要的事,所以本文介紹了SpringBoot3使用Jasypt實現(xiàn)配置文件信息加密的方法2024-07-07深入理解SpringMVC中央調(diào)度器DispatcherServlet
這篇文章主要介紹了SpringMVC核心之中央調(diào)度器DispatcherServlet的相關(guān)知識,包括SpringMVC請求處理過程及SrpingMVC容器和spring?IOC容器關(guān)系,需要的朋友可以參考下2022-05-05Spring MVC+FastJson+Swagger集成的完整實例教程
這篇文章主要給大家分享介紹了關(guān)于Spring MVC+FastJson+Swagger集成的完整實例教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04Java開發(fā)之Spring連接數(shù)據(jù)庫方法實例分析
這篇文章主要介紹了Java開發(fā)之Spring連接數(shù)據(jù)庫方法,以實例形式較為詳細(xì)的分析了Java Spring開發(fā)中針對數(shù)據(jù)庫的相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10Java中JVM的雙親委派、內(nèi)存溢出、垃圾回收和調(diào)優(yōu)詳解
這篇文章主要介紹了Java中JVM的雙親委派、內(nèi)存溢出、垃圾回收和調(diào)優(yōu)詳解,類加載器是Java虛擬機(jī)(JVM)的一個重要組成部分,它的主要作用是將類的字節(jié)碼加載到內(nèi)存中,并生成對應(yīng)的Class對象,需要的朋友可以參考下2023-07-07