- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Java基礎之static的用法
在java中static可以用來(lái)修飾以下內容:
靜態(tài)變量,可以直接通過(guò)類(lèi)名去訪(fǎng)問(wèn)
靜態(tài)方法,可以直接通過(guò)類(lèi)名去訪(fǎng)問(wèn)
靜態(tài)代碼塊,當java虛擬機加載類(lèi)時(shí),就會(huì )執行該代碼塊
靜態(tài)變量,可以直接通過(guò)類(lèi)名去訪(fǎng)問(wèn)
類(lèi)的成員變量包括
被static修飾的變量
在內存中只有一個(gè)拷貝
類(lèi)內部,可以在任何方法內直接訪(fǎng)問(wèn)靜態(tài)變量
其它類(lèi)中,可以直接通過(guò)類(lèi)名訪(fǎng)問(wèn)
沒(méi)有被static修飾的變量
沒(méi)創(chuàng )建一個(gè)實(shí)例,就為實(shí)例變量分配一次內存,實(shí)例變量可以在內存中有多個(gè)拷貝,互不影響
package cn.zhz.Kind.dh; public class Person04 { //屬性 成員變量 全局變量 實(shí)例變量 public int age; public String name; //靜態(tài)變量 調用時(shí)用類(lèi)名調用 public static String email; }
package cn.zhz.Case.dh; import cn.zhz.Kind.dh.Person04; public class Person04Test { public static void main(String[] args) { //調用類(lèi)的普通成員變量 (屬性) 創(chuàng )建對象(實(shí)例) 通過(guò)對象去調用-->實(shí)例變量 Person04 person04 = new Person04(); person04.age = 18; person04.name = "張三"; //靜態(tài)變量直接通過(guò)類(lèi)名去調用 Person04.email = "zhansan@gmail.com"; } }
可以被類(lèi)的所有的實(shí)例共享,可以作為實(shí)例之間進(jìn)行交流的共享數據
如果類(lèi)的所有實(shí)例都包含一個(gè)相同的常量屬性,可以把這個(gè)屬性定義為靜態(tài)常量屬性,從而節省內存空間。
package cn.zhz.Case.dh; public class StaticTest { static int num; public static void main(String [] args){ num++; StaticTest staticTest = new StaticTest(); staticTest.num++; StaticTest staticTest1 = new StaticTest(); staticTest1.num++; StaticTest.num++; System.out.println(num); } }
編寫(xiě)程序模擬實(shí)現選民投票過(guò)程,一群選民進(jìn)行投票,每一個(gè)選民只允許進(jìn)行一次投票,并且當投票總數達到100時(shí),就停止投票
package cn.zhz.Kind.dh; //模擬實(shí)現選民投票過(guò)程,一群選民進(jìn)行投票,每一個(gè)選民只允許進(jìn)行一次投票,并且當投票總數達到100時(shí),就停止投票 public class Voter { //目前投票數 被所有的選民實(shí)例共享 static int count; //投票的最大值 static final int MAX_COUNT = 100; //選民名稱(chēng) private String name; public Voter() { } public Voter(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void vote() { if (count == MAX_COUNT) { System.out.println("投票總數達到100,無(wú)法繼續投票"); } else { count++; System.out.println(this.name + "投票成功當前票數為" + count); } } }
package cn.zhz.Case.dh; import cn.zhz.Kind.dh.Voter; public class VoterTest { public static void main(String[] args) { Voter voter1 = new Voter("張三"); voter1.vote(); Voter voter2 = new Voter("李四"); voter2.vote(); Voter voter3 = new Voter("王五"); voter3.vote(); Voter voter4 = new Voter("趙六"); voter4.vote(); for (int i = 1;i <= 97;i++){ Voter v = new Voter("v"+ i); v.vote(); } Voter voter = new Voter("小尾巴"); voter.vote(); } }
靜態(tài)方法,可以直接通過(guò)類(lèi)名去訪(fǎng)問(wèn)
靜態(tài)方法中不可以使用this和super
不可以直接訪(fǎng)問(wèn)所屬類(lèi)的實(shí)例變量和實(shí)例方法
可以直接訪(fǎng)問(wèn)類(lèi)的靜態(tài)變量和靜態(tài)方法
可以直接訪(fǎng)問(wèn)所屬類(lèi)的靜態(tài)變量、靜態(tài)方法、實(shí)例變量和實(shí)例方法
注意:靜態(tài)方法必須被實(shí)現
package cn.zhz.Kind.dh; public class Person04 { //屬性 成員變量 全局變量 實(shí)例變量 public int age; public String name; //靜態(tài)變量 調用時(shí)用類(lèi)名調用 public static String email; public void m2() { System.out.println("實(shí)例方法m2"); } //成員方法:實(shí)例方法->可以調用實(shí)例變量 實(shí)例方法 靜態(tài)變量 靜態(tài)方法 public void m1() { System.out.println(this.age); System.out.println(email); m2(); m3(); } //靜態(tài)方法 public static void m3() { //在靜態(tài)方法中不可以使用this // System.out.println(this.age); // m1();//在靜態(tài)方法中不可以調用實(shí)例方法 //在靜態(tài)方法中不可以調用實(shí)例變量 // System.out.println(age); System.out.println("靜態(tài)方法m3"); //在靜態(tài)方法中可以直接訪(fǎng)問(wèn)靜態(tài)變量 System.out.println(email); m4(); } public static void m4() { System.out.println("這是一個(gè)靜態(tài)方法"); } }
package cn.zhz.Case.dh; import cn.zhz.Kind.dh.Person04; import java.util.Arrays; public class Person04Test { public static void main(String[] args) { //調用類(lèi)的普通成員變量 (屬性) 創(chuàng )建對象(實(shí)例) 通過(guò)對象去調用-->實(shí)例變量 Person04 person04 = new Person04(); person04.age = 18; person04.name = "張三"; //靜態(tài)變量直接通過(guò)類(lèi)名去調用 Person04.email = "zhansan@gmail.com"; //通過(guò)實(shí)例調用實(shí)例方法 person04.m1(); //可以通過(guò)類(lèi)名調用靜態(tài)方法 Person04.m3(); // Math.random(); // Arrays.sort(); // Arrays.binarySearch(); } }
其實(shí)java程序的入口main()方法就是最常用的靜態(tài)方法
public static void main(String [] args){ }
靜態(tài)代碼塊,當java虛擬機加載類(lèi)時(shí),就會(huì )執行該代碼塊
當程序中有多個(gè)靜態(tài)代碼塊時(shí),程序會(huì )依次向下執行,按照順序加載,并且每一個(gè)靜態(tài)方法塊只可以執行一次
package cn.zhz.Kind.dh; public class Static01 { static int num = 100; static { num += 100; System.out.println(num); } static { num += 100; System.out.println(num); } public static void main(String[] args) { Static01 static01 = new Static01(); Static01 static02 = new Static01(); System.out.println(Static01.num); } }
到此這篇關(guān)于Java基礎之static的用法的文章就介紹到這了,更多相關(guān)Java static的用法內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站