Java應(yīng)用程序開(kāi)發(fā)學(xué)習(xí)之static關(guān)鍵字應(yīng)用
Java的static關(guān)鍵字和C/C++語(yǔ)言的關(guān)鍵字有所不同:
一旦在Java里使用了static關(guān)鍵字,那么這樣的內(nèi)容不再屬于對(duì)象自己,而是屬于類本身的,所以凡是本類的對(duì)象,都共享一份。
1、使用Java static關(guān)鍵字修飾成員變量
以下是Stundent類。
package app_one; public class Student { private int id = 0 ; private int age = 0; private String name = null; static int id_count = 0 ; public Student(int age , String name) { this.age = age ; this.name = name ; this.id = ++id_count ; } public int getage() { return age; } public void setage(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
以下是主類:
package app_one; public class hello { public static void main(String[] args) { Student st1 = new Student(14,"小明"); System.out.println("年齡:" + st1.getage() + " 姓名:" + st1.getName() + " 序號(hào):" + Student.id_count); Student st2 = new Student(15,"小紅"); System.out.println("年齡:" + st2.getage() + " 姓名:" + st2.getName() + " 序號(hào):" + Student.id_count); Student st3 = new Student(18,"小李"); System.out.println("年齡:" + st3.getage() + " 姓名:" + st3.getName() + " 序號(hào):" + Student.id_count); } }
運(yùn)行結(jié)果:
從上面的案例可以看到,id_count是可以自動(dòng)進(jìn)行計(jì)數(shù)的,每一次實(shí)例化Student類的時(shí)候,id_count就自動(dòng)+1,然后賦值給成員變量id,由于定義了static關(guān)鍵字的變量不再屬于對(duì)象,而是屬于類,所以在訪問(wèn)的時(shí)候,我們可以用類名稱().靜態(tài)變量的形式來(lái)進(jìn)行訪問(wèn)。
2、使用static修飾成員方法
將上述程序中Student類的id_count修改為私有的靜態(tài)變量,并添加一個(gè)靜態(tài)的Get_idcount方法。
private static int id_count = 0 ; public static int Get_idcount() { return id_count ; }
在主類中獲取id_count不通過(guò)類.變量的方式獲取,而是改為類.方法()的方式獲取。
Student.Get_idcount()
強(qiáng)調(diào)兩點(diǎn):
①
- (1)成員方法可以訪問(wèn)成員變量
- (2)成員方法可以訪問(wèn)靜態(tài)變量
- (3)靜態(tài)方法可以訪問(wèn)靜態(tài)變量
- (4)靜態(tài)方法不可以訪問(wèn)成員變量(非靜態(tài))
原因:因?yàn)樵趦?nèi)存中是先有的靜態(tài)內(nèi)容,后有的非靜態(tài)內(nèi)容
②
- (1)靜態(tài)方法當(dāng)中不能使用this
原因:因?yàn)閠his代表當(dāng)前對(duì)象,通過(guò)誰(shuí)調(diào)用的方法,誰(shuí)就是當(dāng)前對(duì)象
小結(jié):
一旦使用了static修飾成員方法,那么這就成為了靜態(tài)方法,不屬于對(duì)象,而是屬于類本身的。
對(duì)于靜態(tài)方法來(lái)說(shuō),可以通過(guò)對(duì)象名進(jìn)行調(diào)用,也可以直接通過(guò)類名稱來(lái)調(diào)用。
如果沒(méi)有static關(guān)鍵字,那么必須首先創(chuàng)建對(duì)象,然后通過(guò)對(duì)象才能使用它
如果有了static關(guān)鍵字,那么不需要?jiǎng)?chuàng)建對(duì)象,直接就能通過(guò)類名稱進(jìn)行調(diào)用。
無(wú)論是成員變量,還是成員方法,如果有了static,都推薦使用類名稱進(jìn)行調(diào)用。
靜態(tài)變量:類名稱.靜態(tài)變量
靜態(tài)方法:類名稱.靜態(tài)方法();
對(duì)于本類中的靜態(tài)方法,可以省略類名稱。
3、靜態(tài)static的內(nèi)存圖
參照學(xué)習(xí)傳智的Java課程給出的圖,清晰易懂。
4、靜態(tài)代碼塊
靜態(tài)代碼塊格式:
public class 類名稱{ static { //靜態(tài)代碼塊的內(nèi)容 } }
- (1)特點(diǎn):當(dāng)?shù)谝淮斡玫奖绢悤r(shí),靜態(tài)代碼塊執(zhí)行唯一的一次,靜態(tài)內(nèi)容總是優(yōu)先于非靜態(tài),所以靜態(tài)代碼塊比構(gòu)造方法先執(zhí)行
- (2)典型用途:用來(lái)一次性地對(duì)靜態(tài)成員變量進(jìn)行賦值。
針對(duì)上面的案例做修改,在Student類中添加一個(gè)靜態(tài)代碼塊:
package app_one; public class Student { private int id = 0 ; private int age = 0; private String name = null; private static int id_count = 0 ; static { System.out.println("靜態(tài)代碼塊運(yùn)行!"); } public Student(int age , String name) { System.out.println("構(gòu)造方法運(yùn)行!"); this.age = age ; this.name = name ; this.id = ++id_count ; } public int getage() { return age; } public void setage(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static int Get_idcount() { return id_count ; } }
然后主程序修改如下:
package app_one; public class hello { public static void main(String[] args) { Student st1 = new Student(14,"小紅"); System.out.println("姓名: "+st1.getName() + " 年齡: " + st1.getage() + " 序號(hào): "+Student.Get_idcount()); Student st2 = new Student(14,"小李"); System.out.println("姓名: "+st2.getName() + " 年齡: " + st2.getage() + " 序號(hào): "+Student.Get_idcount()); } }
運(yùn)行結(jié)果:
很明顯得出結(jié)論。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- 在Docker中開(kāi)發(fā)Java 8 Spring Boot應(yīng)用程序的方法
- 詳解JavaFX桌面應(yīng)用開(kāi)發(fā)-Group(容器組)
- spring+springmvc+mybatis 開(kāi)發(fā)JAVA單體應(yīng)用
- 通過(guò)Spring Shell 開(kāi)發(fā) Java 命令行應(yīng)用
- 深入理解java異常處理機(jī)制的原理和開(kāi)發(fā)應(yīng)用
- Java的web開(kāi)發(fā)中SSH框架的協(xié)作處理應(yīng)用筆記
- 使用Java開(kāi)發(fā)實(shí)現(xiàn)OAuth安全認(rèn)證的應(yīng)用
- Java使用新浪微博API開(kāi)發(fā)微博應(yīng)用的基本方法
- 詳解Java編程中的反射在Android開(kāi)發(fā)中的應(yīng)用
- 安卓應(yīng)用開(kāi)發(fā)通過(guò)java調(diào)用c++ jni的圖文使用方法
- 如何開(kāi)發(fā)一個(gè)簡(jiǎn)單的Akka Java應(yīng)用
相關(guān)文章
Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能
這篇文章主要介紹了Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能,需要的朋友可以參考下2017-09-09SpringBoot中通過(guò)實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例
這篇文章主要介紹了SpringBoot中通過(guò)實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11java遞歸實(shí)現(xiàn)拼裝多個(gè)api的結(jié)果操作方法
本文給大家分享java遞歸實(shí)現(xiàn)拼裝多個(gè)api的結(jié)果的方法,說(shuō)白了就是好幾個(gè)API結(jié)果拼裝成的,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-09-09java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn)
這篇文章主要介紹了java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12一篇文章帶你入門(mén)Springboot沙箱環(huán)境支付寶支付(附源碼)
螞蟻沙箱環(huán)境 (Beta) 是協(xié)助開(kāi)發(fā)者進(jìn)行接口功能開(kāi)發(fā)及主要功能聯(lián)調(diào)的輔助環(huán)境。沙箱環(huán)境模擬了開(kāi)放平臺(tái)部分產(chǎn)品的主要功能和主要邏輯2021-06-06Java中properties文件中的中文亂碼問(wèn)題
Properties為了方便用戶的配置,用于讀取Java的配置文件,不同的編程語(yǔ)言有自己所支持的配置文件,能讓用戶夠脫離程序本身去修改相關(guān)的變量設(shè)置,這篇文章主要介紹了Java中properties文件中的中文亂碼問(wèn)題,需要的朋友可以參考下2023-08-08