Java中的static的使用指南
一、Java中的static使用之靜態(tài)變量
1.Java 中被static修飾的成員稱為靜態(tài)成員或類成員。它屬于整個(gè)類所有,而不是某個(gè)對(duì)象所有,即被類的所有對(duì)象所共享、且優(yōu)先于對(duì)象存在。靜態(tài)成員可以使用類名直接訪問(wèn),也可以使用對(duì)象名進(jìn)行訪問(wèn)。使用 static 可以修飾變量、方法和代碼塊。
2.public 修飾符表示公開(kāi)的、公有的,靜態(tài)變量使用static修飾
3.靜態(tài)方法中可以直接調(diào)用同類中的靜態(tài)成員,但不能直接調(diào)用非靜態(tài)成員。
public class HellWorld{ String name = “Java”;//非靜態(tài)變量 static String hobby = “ programing”;//靜態(tài)變量 public static void print(){ System.out.println(“歡迎您:” + name + ” !”);//不能直接調(diào)用非靜態(tài)變量 System.out.println(“歡迎您:” + hobby + ” !”);//可以直接調(diào)用靜態(tài)變量 } }
4.如果希望在靜態(tài)方法中調(diào)用非靜態(tài)變量,可以通過(guò)創(chuàng)建類的對(duì)象,然后通過(guò)對(duì)象來(lái)訪問(wèn)非靜態(tài)變量?!?/p>
public class HellWorld{ String name = “Java”;//非靜態(tài)變量 static String hobby = “program ”;//靜態(tài)變量 //靜態(tài)方法中調(diào)用非靜態(tài)變量 public static void print(){ //創(chuàng)建類的對(duì)象 HelloWorld hello=new HelloWorld(); //通過(guò)對(duì)象來(lái)實(shí)現(xiàn)在靜態(tài)方法中調(diào)用非靜態(tài)變量 System.out.println(“歡迎您:”+hello.name+”!”); //靜態(tài)方法中可以直接調(diào)用靜態(tài)變量 System.out.prinltn(“歡迎喜歡”+program+”的”+hello.name); } }
5.在普通成員方法中,則可以直接訪問(wèn)同類的非靜態(tài)變量和靜態(tài)變量
public class HellWorld{ String name = “Java”;//非靜態(tài)變量 static String hobby = “ programing”;//靜態(tài)變量 public void print(){//普通方法 System.out.println(“歡迎您:” + name + ” !”); System.out.prinltn(“歡迎喜歡”+program+”的”+hello.name); } }
6.靜態(tài)方法中不能直接調(diào)用非靜態(tài)方法,需要通過(guò)對(duì)象來(lái)訪問(wèn)非靜態(tài)方法
public class HellWorld{ String name = “Java”;//非靜態(tài)變量 static String hobby = “program ”;//靜態(tài)變量 //非靜態(tài)方法 public void show(){ System.out.println(“我是非靜態(tài)方法,不能被靜態(tài)方法直接調(diào)用。。?!?; } //靜態(tài)方法 public static void show2(){ System.out.println(“我是靜態(tài)方法,可以直接被靜態(tài)方法調(diào)用”); } //靜態(tài)方法中通過(guò)對(duì)象來(lái)調(diào)用非靜態(tài)方法??梢灾苯诱{(diào)用靜態(tài)方法 public static void print(){ //創(chuàng)建類的對(duì)象 HelloWorld hello=new HelloWorld(); //通過(guò)對(duì)象來(lái)實(shí)現(xiàn)在靜態(tài)方法中調(diào)用非靜態(tài)方法 hello.show(); //靜態(tài)方法中可以直接調(diào)用靜態(tài)方法 show2(); } }
二、Java 中的 static 使用之靜態(tài)初始化塊
1.在類的聲明中,可以包含多個(gè)初始化塊,當(dāng)創(chuàng)建類的實(shí)例時(shí),就會(huì)依次執(zhí)行這些代碼塊。如果使用 static 修飾初始化塊,就稱為靜態(tài)初始化塊。
2.實(shí)例變量和類變量的區(qū)別:
a) 存放位置:類變量隨著類的加載而存放于方法區(qū)中;實(shí)例變量隨著對(duì)象的建立存在于堆內(nèi)存中。
b) 生命周期:類變量生命周期最長(zhǎng),隨著類的消失而消失;實(shí)例變量生命周期隨著對(duì)象的消失而消失。
3.靜態(tài)初始化塊只在類加載時(shí)執(zhí)行,且只會(huì)執(zhí)行一次,同時(shí)靜態(tài)初始化塊只能給靜態(tài)變量賦值,不能初始化普通的成員變量。程序運(yùn)行時(shí),靜態(tài)初始化快先被執(zhí)行并優(yōu)先于主函數(shù),然后執(zhí)行普通初始化塊,最后才執(zhí)行構(gòu)造方法。
public class StaticDemo { int num1;//聲明變量1 int num2;//聲明變量2 static int num3;//聲明靜態(tài)變量3 public StaticDemo(){//構(gòu)造方法 num1 = 88; System.out.println("通過(guò)構(gòu)造方法為變量1賦值"); } {//初始化塊 num2 = 99; System.out.println("通過(guò)初始化塊為變量2賦值"); } static{//靜態(tài)初始化這里不能giel普通變量賦值 num3 = 77; System.out.println("通過(guò)靜態(tài)初始化塊為靜態(tài)變量3賦值"); } public static void main(String[] args) { StaticDemo hello = new StaticDemo();//創(chuàng)建類的對(duì)象hello System.out.println("num1:" + hello.num1); System.out.println("num2:" + hello.num2); System.out.println("num3:" + hello.num3); StaticDemo hello1 = new StaticDemo(); } }
運(yùn)行結(jié)果:
相關(guān)文章
Java 實(shí)現(xiàn)簡(jiǎn)單靜態(tài)資源Web服務(wù)器的示例
這篇文章主要介紹了Java 實(shí)現(xiàn)簡(jiǎn)單靜態(tài)資源Web服務(wù)器的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-11-11Java案例使用集合方法實(shí)現(xiàn)統(tǒng)計(jì)任意字符串中字符出現(xiàn)的次數(shù)
這篇文章主要介紹了Java案例使用集合方法實(shí)現(xiàn)統(tǒng)計(jì)任意字符串中字符出現(xiàn)的次數(shù),下面我們將用兩種方法實(shí)現(xiàn),需要的小伙伴可以參考一下文章具體內(nèi)容2022-04-04springboot集成flyway自動(dòng)創(chuàng)表的詳細(xì)配置
Flayway是一款數(shù)據(jù)庫(kù)版本控制管理工具,支持?jǐn)?shù)據(jù)庫(kù)版本自動(dòng)升級(jí),Migrations可以寫(xiě)成sql腳本,也可以寫(xiě)在java代碼里;本文通過(guò)實(shí)例代碼給大家介紹springboot集成flyway自動(dòng)創(chuàng)表的詳細(xì)過(guò)程,感興趣的朋友一起看看吧2021-06-06Java Mybatis框架Dao層的實(shí)現(xiàn)與映射文件以及核心配置文件詳解分析
MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過(guò)簡(jiǎn)單的 XML 或注解來(lái)配置和映射原始類型、接口和 Java POJO為數(shù)據(jù)庫(kù)中的記錄2021-10-10說(shuō)說(shuō)Spring中為何要引入Lookup注解
這篇文章主要給大家介紹了關(guān)于Spring中為何要引入Lookup注解的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01關(guān)于HashMap相同key累加value的問(wèn)題
這篇文章主要介紹了關(guān)于HashMap相同key累加value的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05GateWay動(dòng)態(tài)路由與負(fù)載均衡詳細(xì)介紹
這篇文章主要介紹了GateWay動(dòng)態(tài)路由與負(fù)載均衡,GateWay支持自動(dòng)從注冊(cè)中心中獲取服務(wù)列表并訪問(wèn),即所謂的動(dòng)態(tài)路由2022-11-11