深入了解Java中的static關(guān)鍵字
static修飾成員變量
static修飾的成員變量,稱(chēng)為靜態(tài)成員變量,靜態(tài)成員變量最大的特性:不屬于某個(gè)具體的對(duì)象,是所有對(duì)象所共 享的
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)成員變量可以直接通過(guò)類(lèi)名訪問(wèn)
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);
// 也可以通過(guò)對(duì)象訪問(wèn):但是classRoom是三個(gè)對(duì)象共享的
System.out.println(s1.classRoom);
System.out.println(s2.classRoom);
System.out.println(s3.classRoom);
}
}

此時(shí)通過(guò)代碼我們可以看到被static關(guān)鍵字修飾的成員屬于某個(gè)具體的對(duì)象,是所有對(duì)象所共 享的
【靜態(tài)成員變量特性】
- 不屬于某個(gè)具體的對(duì)象,是類(lèi)的屬性,所有對(duì)象共享的,不存儲(chǔ)在某個(gè)對(duì)象的空間中
- 既可以通過(guò)對(duì)象訪問(wèn),也可以通過(guò)類(lèi)名訪問(wèn),但一般更推薦使用類(lèi)名訪問(wèn)
- 類(lèi)變量存儲(chǔ)在方法區(qū)當(dāng)中
- 生命周期伴隨類(lèi)的一生(即:隨類(lèi)的加載而創(chuàng)建,隨類(lèi)的卸載而銷(xiāo)毀)
static修飾成員方法
一般類(lèi)中的數(shù)據(jù)成員都設(shè)置為private,而成員方法設(shè)置為public,那static屬性應(yīng)該如何訪問(wèn)呢?
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)成員變量可以直接通過(guò)類(lèi)名訪問(wèn)
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);
// 也可以通過(guò)對(duì)象訪問(wèn):但是classRoom是三個(gè)對(duì)象共享的
System.out.println(s1.classRoom);
System.out.println(s2.classRoom);
System.out.println(s3.classRoom);
}
}
此時(shí)我們會(huì)發(fā)現(xiàn)編譯器報(bào)錯(cuò)
Java中,被static修飾的成員方法稱(chēng)為靜態(tài)成員方法,是類(lèi)的方法,不是某個(gè)對(duì)象所特有的。靜態(tài)成員一般是通過(guò) 靜態(tài)方法來(lái)訪問(wèn)的
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)鍵字修飾否則還要重新實(shí)例化對(duì)象,用static修飾后可以直接通過(guò)類(lèi)名調(diào)用
【靜態(tài)方法特性】
1.不屬于某個(gè)具體的對(duì)象,是類(lèi)方法
2.可以通過(guò)對(duì)象調(diào)用,也可以通過(guò)類(lèi)名.靜態(tài)方法名(…)方式調(diào)用,更推薦使用后者
3.不能在靜態(tài)方法中訪問(wèn)任何非靜態(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)方法,因?yàn)榉庆o態(tài)方法有this參數(shù),在靜態(tài)方法中調(diào)用時(shí)候無(wú)法傳遞this引用
public static String getClassRoom(){
doClass();
return classRoom;
}
// 編譯報(bào)錯(cuò):Error:(35, 9) java: 無(wú)法從靜態(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定義的代碼塊稱(chēng)為靜態(tài)代碼塊。一般用于初始化靜態(tài)成員變量。
默認(rèn)初始化
public class Student{
private String name;
private String gender;
private int age;
private double score;

通過(guò)提供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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)鏈表的常見(jiàn)操作算法詳解
這篇文章主要介紹了Java實(shí)現(xiàn)鏈表的常見(jiàn)操作算法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Mybatis中的游標(biāo)查詢(xún)Cursor(滾動(dòng)查詢(xún))
這篇文章主要介紹了Mybatis中的游標(biāo)查詢(xún)Cursor(滾動(dòng)查詢(xún)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Java多線(xiàn)程之synchronized關(guān)鍵字的使用
這篇文章主要介紹了Java多線(xiàn)程之synchronized關(guān)鍵字的使用,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
Java中實(shí)現(xiàn)時(shí)間類(lèi)型轉(zhuǎn)換的代碼詳解
這篇文章主要為大家詳細(xì)介紹了Java中實(shí)現(xiàn)時(shí)間類(lèi)型轉(zhuǎn)換的相關(guān)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2023-09-09
Java讀取Properties文件的七種方法的總結(jié)
這篇文章主要介紹了Java讀取Properties文件的七種方法的總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-07-07
web容器中實(shí)例化spring相關(guān)配置解析
這篇文章主要介紹了web容器中實(shí)例化spring相關(guān)配置解析,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Java并發(fā)編程之synchronized底層實(shí)現(xiàn)原理分析
這篇文章主要介紹了Java并發(fā)編程之synchronized底層實(shí)現(xiàn)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02

