本篇淺析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();
}
}