這篇文章主要為大家展示了“java中關(guān)鍵字static怎么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“java中關(guān)鍵字static怎么用”這篇文章吧。
在六安等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都營(yíng)銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),六安網(wǎng)站建設(shè)費(fèi)用合理。
static是java中又一重要的關(guān)鍵字,在一定環(huán)境下使用,可以提高程序的運(yùn)行性能,優(yōu)化程序的結(jié)構(gòu)。其主要應(yīng)用有以下幾方面:
1.static修飾的成員變量,稱為類變量/靜態(tài)變量,以實(shí)現(xiàn)所有對(duì)象對(duì)該成員的共享。
2.static修飾的成員方法,稱為類方法/靜態(tài)方法,可直接通過類名調(diào)用,無需創(chuàng)建對(duì)象。
3.形成靜態(tài)代碼塊,優(yōu)化程序性能。
4.靜態(tài)導(dǎo)包,一般將類的方法直接導(dǎo)入到當(dāng)前類中,從而直接使用方法名即可調(diào)用類方法,更加方便。
5.修飾內(nèi)部類,無需實(shí)例化外部類就可以調(diào)用內(nèi)部類。
下面一附代碼說明:
public class Student { String name; static int age; public String toString() { return "Name:" + name + ", Age:" + age; } public static void main(String[] args) { Student s1 = new Student(); s1.name="張三"; s1.age=20; Student s2 = new Student(); s2.name="李四"; s2.age=10; System.out.println(s1); System.out.println(s2); } } /**輸出結(jié)果 Name:張三, Age:10 Name:李四, Age:10 */
如上述代碼,s1和s2兩個(gè)對(duì)象分別存儲(chǔ)在內(nèi)存中堆區(qū)域的不同地址中,所以他們之間相互不會(huì)干擾。然而static關(guān)鍵字修飾了成員變量age,讓其變成類的所屬,而不是對(duì)象的所屬,任何該類實(shí)例的對(duì)象都可以共享使用它。所以,輸出的age均是最終賦給的10。如果去掉static,顯然對(duì)象之間互不影響,輸出如下:
Name:張三, Age:20 Name:李四, Age:10
如上述代碼,out1調(diào)用out2時(shí)出錯(cuò)。由此代碼可得,靜態(tài)方法不能調(diào)用非靜態(tài)的成員變量和成員方法。非靜態(tài)方法可以調(diào)用靜態(tài)的成員變量和成員方法。注意,static不影響成員的訪問權(quán)限,Java中能夠影響到訪問權(quán)限的關(guān)鍵詞是private、public、protected,default。
public class Test extends Base{ static{ System.out.println("static靜態(tài)塊1"); } public Test(){ System.out.println("test構(gòu)造器"); } public static void main(String[] args) { new Test(); } } class Base{ static{ System.out.println("static靜態(tài)塊2"); } public Base(){ System.out.println("base構(gòu)造器"); } }
如上述代碼,記住兩句話,static代碼塊隨類的加載一起加載。static修飾的變量方法比其他變量方法優(yōu)先加載,且只加載一次。加載子類時(shí),會(huì)首先加載父類。由此可以分析:在執(zhí)行開始,先要尋找到main方法,因?yàn)閙ain方法是程序的入口,但是在執(zhí)行main方法之前,必須先加載Test類,而在加載Test類的時(shí)候發(fā)現(xiàn)Test類繼承自Base類,因此會(huì)轉(zhuǎn)去先加載Base類,在加載Base類的時(shí)候,發(fā)現(xiàn)有static塊,便執(zhí)行了static塊。在Base類加載完成之后,便繼續(xù)加載Test類,然后發(fā)現(xiàn)Test類中也有static塊,便執(zhí)行static塊。在加載完所需的類之后,便開始執(zhí)行main方法。在main方法中執(zhí)行new Test()的時(shí)候會(huì)先調(diào)用父類的構(gòu)造器,然后再調(diào)用自身的構(gòu)造器。因此,運(yùn)行結(jié)果如下:
static靜態(tài)塊2 static靜態(tài)塊1 base構(gòu)造器 test構(gòu)造器
/* A.java文件 */ package com.dogo.test; public class A { public static void outWord(Object o){ System.out.println(o); } } /* B.java文件 */ import static com.dogo.test.A.*; public class B { public static void main( String[] args ) { outWord("Hello World!"); } /**輸出 * Hello World! */ }
如上述代碼,A.java中包含一個(gè)簡(jiǎn)單的靜態(tài)方法,在B.java中我們用static關(guān)鍵字將A類導(dǎo)入,由此,便無需使用“類名.方法名”的方法去調(diào)用類方法了,直接可以采用"方法名"去調(diào)用類方法,就好像是該類自己的方法一樣。
/*Outer.java*/ public class Outer { static { System.out.println("Outer靜態(tài)塊"); } public Outer(){ System.out.println("Outer構(gòu)造器"); } static class Inner{ static{ System.out.println("Inner靜態(tài)塊"); } public Inner(){ System.out.println("Inner構(gòu)造器"); } } } /*Test.java*/ public class Test{ public static void main(String[] args) { new Outer.Inner(); } }
如上述代碼,記住,用static修飾內(nèi)部類,外部類可以直接調(diào)用內(nèi)部類,因?yàn)閟tatic修飾的的內(nèi)部類是在加載外部類的同時(shí)加載的,所以,并不要實(shí)例化外部類就能直接調(diào)用靜態(tài)內(nèi)部類。例子中,在進(jìn)入Test的main方法之前,加載Test類,然后執(zhí)行new Outer.Inner();這里需要注意:因?yàn)镮nner是靜態(tài)的,所以這里并不需要加載外部類和實(shí)例化外部類,可以直接加載Inner并實(shí)例化。運(yùn)行結(jié)果如下:
Inner靜態(tài)塊 Inner構(gòu)造器
大喬注:static另一個(gè)很重要的應(yīng)用就是實(shí)現(xiàn)單例設(shè)計(jì)模式。單利模式的特點(diǎn)是該類只能有一個(gè)實(shí)例,為了實(shí)現(xiàn)這一功能,必須隱藏類的構(gòu)造函數(shù),即把構(gòu)造函數(shù)聲明為private,并提供一個(gè)創(chuàng)建對(duì)象的方法,由于構(gòu)造對(duì)象被聲明為private,外界無法直接創(chuàng)建這個(gè)類型的對(duì)象,只能通過該類提供的方法來獲取類的對(duì)象,于是只能把創(chuàng)建對(duì)象的方法聲明為static,程序?qū)嵗缦拢?/p>
class SingleDemo{ private static SingleDemo ins=null; private SingleDemo(){} public static SingleDemo getIns(){ if(ins==null){ ins=new SingleDemo(); } return ins; } }
以上是“java中關(guān)鍵字static怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!