本篇淺析java中static的用法,主要五個方面:靜態成員變量,靜態方法,靜態塊,靜態內部類,靜態導包。
首先還是一張表格說一下靜態對象和非靜態對象的區別:
靜態對象 非靜態對象 歸屬 類共同具有 類的各個實例獨立擁有 內存分配 內存空間上固定的 附屬類分配 分配空間順序 優先分配靜態對象空間 優先分配靜態對象空間,初始化也一樣public class StaticExercise { public static String sky="jeyson"; public static String getMySky(String sky){ return sky; } static { System.out.println("這是靜態塊中的內容--"); System.out.println("靜態塊:"+getMySky(sky)); } /** * ***靜態對象好處: * 1--靜態對象的數據是全局唯一的,一改都改,可以保證數據唯一。 * 2--引用方便,直接類名.方法就行了,不用set和get * ***分配空間順序: * 先分配靜態對象空間再分配非靜態。初始化順序也是這樣 * ***static final 修飾的成員變量和成員方法可以理解為全局變量(java中沒有全局變量概念) * ***靜態對象,方法,塊的限制: * 1--只能調用其他的static方法 * 2--只能訪問static數據 * 3--不能以任何方式引用this或super * 靜態對象測試 */ @Test public void testStatic1(){ System.out.println(sky); System.out.println("-----------------"); System.out.println(getMySky(sky)); System.out.println("-----------------"); System.out.println(StaticTest.getSms()); } }
class StaticTest{ public static String sms="to my sky"; public static String getSms(){ return sms; } /** * 靜態內部類 * ***使用場景: * 內部類跟外部類聯系緊密,一般只有用到外部類的時候才會用到這個類 * ***使用 * 隨類一同被加載,直接外部類.內部類.靜態對象(方法) */ static class InnerStatic{ public static final String MYSKY="MY FINAL SKY"; } }
@Test public void testStatic2(){ System.out.println(StaticTest.InnerStatic.MYSKY); }
public class MyStaticImportTest { public static final int number=55; public static void getMyWords(){ System.out.println("hello ,這是一個靜態導包的測試"); } }
import static com.generic.MyStaticImportTest.number; import static com.generic.MyStaticImportTest.getMyWords; /** * @Description: * 靜態 */ public class StaticExercise { /** * 靜態導包 * ***使用方法: * 直接靜態導入相應的變量和方法:(import static 包名.類名.靜態成員變量(方法) * import static com.generic.MyStaticImportTest.number; * import static com.generic.MyStaticImportTest.getMyWords; * *** 好處: * 被導入的靜態方法和變量在這個類中直接可見,無需再給出類名 * *** 壞處 * 一定程度上降低了代碼的可讀性 */ @Test public void testStatic3(){ //靜態導入後可以直接用 int myNumber=number; getMyWords(); } }