淺析java 的 static 關(guān)鍵字用法
本篇淺析java中static的用法,主要五個(gè)方面:靜態(tài)成員變量,靜態(tài)方法,靜態(tài)塊,靜態(tài)內(nèi)部類,靜態(tài)導(dǎo)包。
首先還是一張表格說一下靜態(tài)對(duì)象和非靜態(tài)對(duì)象的區(qū)別:
| 靜態(tài)對(duì)象 | 非靜態(tài)對(duì)象 | |
| 歸屬 | 類共同具有 | 類的各個(gè)實(shí)例獨(dú)立擁有 |
| 內(nèi)存分配 | 內(nèi)存空間上固定的 | 附屬類分配 |
| 分配空間順序 | 優(yōu)先分配靜態(tài)對(duì)象空間 | 優(yōu)先分配靜態(tài)對(duì)象空間,初始化也一樣 |
1 靜態(tài)變量,靜態(tài)方法,靜態(tài)塊
靜態(tài)對(duì)象,靜態(tài)方法都是在原對(duì)象和方法上加上static關(guān)鍵字修飾,表示類可以直接調(diào)用這些,而不需要實(shí)例化后再調(diào)用。具有的好處是:
1--靜態(tài)對(duì)象的數(shù)據(jù)是全局唯一的,一改都改,可以保證數(shù)據(jù)的唯一性
2--引用方便,直接用類名.方法(屬性)就可以了,不用再get和set
當(dāng)然靜態(tài)方法(變量,塊)也有相應(yīng)的限制:
1--不能調(diào)用其他非靜態(tài)方法(只能調(diào)用static方法)
2--只能訪問static數(shù)據(jù)
3--不能以任何方式引用this或super
示例代碼:
public class StaticExercise {
public static String sky="jeyson";
public static String getMySky(String sky){
return sky;
}
static {
System.out.println("這是靜態(tài)塊中的內(nèi)容--");
System.out.println("靜態(tài)塊:"+getMySky(sky));
}
/**
* ***靜態(tài)對(duì)象好處:
* 1--靜態(tài)對(duì)象的數(shù)據(jù)是全局唯一的,一改都改,可以保證數(shù)據(jù)唯一。
* 2--引用方便,直接類名.方法就行了,不用set和get
* ***分配空間順序:
* 先分配靜態(tài)對(duì)象空間再分配非靜態(tài)。初始化順序也是這樣
* ***static final 修飾的成員變量和成員方法可以理解為全局變量(java中沒有全局變量概念)
* ***靜態(tài)對(duì)象,方法,塊的限制:
* 1--只能調(diào)用其他的static方法
* 2--只能訪問static數(shù)據(jù)
* 3--不能以任何方式引用this或super
* 靜態(tài)對(duì)象測(cè)試
*/
@Test
public void testStatic1(){
System.out.println(sky);
System.out.println("-----------------");
System.out.println(getMySky(sky));
System.out.println("-----------------");
System.out.println(StaticTest.getSms());
}
}
2 靜態(tài)內(nèi)部類
當(dāng)一個(gè)類跟另一個(gè)類(外部類)有緊密的聯(lián)系,一般只有用到外部類的時(shí)候才會(huì)用該類的話,可以將該類作為靜態(tài)的內(nèi)部類。這樣就可以隨著類的加載而直接產(chǎn)生。不用再可以實(shí)例化。
使用方法:隨類一同被加載,調(diào)用直接外部類.內(nèi)部類.靜態(tài)對(duì)象(方法)
示例代碼:
class StaticTest{
public static String sms="to my sky";
public static String getSms(){
return sms;
}
/**
* 靜態(tài)內(nèi)部類
* ***使用場(chǎng)景:
* 內(nèi)部類跟外部類聯(lián)系緊密,一般只有用到外部類的時(shí)候才會(huì)用到這個(gè)類
* ***使用
* 隨類一同被加載,直接外部類.內(nèi)部類.靜態(tài)對(duì)象(方法)
*/
static class InnerStatic{
public static final String MYSKY="MY FINAL SKY";
}
}
@Test
public void testStatic2(){
System.out.println(StaticTest.InnerStatic.MYSKY);
}
2 靜態(tài)導(dǎo)包
如果要用的靜態(tài)方法所在的類跟當(dāng)前類不在同一個(gè)包下,可以使用靜態(tài)導(dǎo)包。這樣你想要用的靜態(tài)方法或變量就相當(dāng)于在該類中直接可見,無需再類名.靜態(tài)變量的方式調(diào)用。
使用方法:
import static 包名.類名.靜態(tài)成員變量(方法)
好處:
被導(dǎo)入的靜態(tài)變量和方法在該類中直接可見,直接用
壞處:
一定程度上降低了代碼的可讀性
代碼示例:
public class MyStaticImportTest {
public static final int number=55;
public static void getMyWords(){
System.out.println("hello ,這是一個(gè)靜態(tài)導(dǎo)包的測(cè)試");
}
}
import static com.generic.MyStaticImportTest.number;
import static com.generic.MyStaticImportTest.getMyWords;
/**
* @Description:
* 靜態(tài)
*/
public class StaticExercise {
/**
* 靜態(tài)導(dǎo)包
* ***使用方法:
* 直接靜態(tài)導(dǎo)入相應(yīng)的變量和方法:(import static 包名.類名.靜態(tài)成員變量(方法)
* import static com.generic.MyStaticImportTest.number;
* import static com.generic.MyStaticImportTest.getMyWords;
* *** 好處:
* 被導(dǎo)入的靜態(tài)方法和變量在這個(gè)類中直接可見,無需再給出類名
* *** 壞處
* 一定程度上降低了代碼的可讀性
*/
@Test
public void testStatic3(){
//靜態(tài)導(dǎo)入后可以直接用
int myNumber=number;
getMyWords();
}
}
以上所述是小編給大家介紹的淺析java 的 static 關(guān)鍵字用法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
詳解spring cloud構(gòu)建微服務(wù)架構(gòu)的網(wǎng)關(guān)(API GateWay)
這篇文章主要介紹了詳解spring cloud構(gòu)建微服務(wù)架構(gòu)的網(wǎng)關(guān)(API GateWay),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01
java使用MulticastSocket實(shí)現(xiàn)組播
這篇文章主要為大家詳細(xì)介紹了java使用MulticastSocket實(shí)現(xiàn)組播,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
為什么Java中都不用a.equals(b)判斷對(duì)象相等
在面試中經(jīng)常會(huì)被問,a.equals(b)和“==”的區(qū)別,那么a.equals(b)能不能判斷對(duì)象相等,本文就來詳細(xì)的介紹一下2021-06-06
Java程序員的10道常見的XML面試問答題(XML術(shù)語詳解)
包括web開發(fā)人員的Java面試在內(nèi)的各種面試中,XML面試題在各種編程工作的面試中很常見。XML是一種成熟的技術(shù),經(jīng)常作為從一個(gè)平臺(tái)到其他平臺(tái)傳輸數(shù)據(jù)的標(biāo)準(zhǔn)2014-04-04
關(guān)于MyBatis模糊查詢的幾種實(shí)現(xiàn)方式
在實(shí)際項(xiàng)目中,我們會(huì)經(jīng)常對(duì)數(shù)據(jù)做一些模糊查詢的操作,這時(shí)候就需要利用到 like字段,那么在Mybatis中,有哪些方式可以實(shí)現(xiàn)模糊查詢呢,需要的朋友可以參考下2023-05-05
BCryptPasswordEncoder加密與MD5加密的區(qū)別及說明
這篇文章主要介紹了BCryptPasswordEncoder加密與MD5加密的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的問題
這篇文章主要介紹了使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的相關(guān)資料,需要的朋友可以參考下2015-11-11

