程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java關鍵字---static,java---static

java關鍵字---static,java---static

編輯:JAVA綜合教程

java關鍵字---static,java---static


   本篇淺析java中static的用法,主要五個方面:靜態成員變量,靜態方法,靜態塊,靜態內部類,靜態導包。

   首先還是一張表格說一下靜態對象和非靜態對象的區別:

  靜態對象 非靜態對象 歸屬 類共同具有 類的各個實例獨立擁有 內存分配 內存空間上固定的 附屬類分配 分配空間順序 優先分配靜態對象空間 優先分配靜態對象空間,初始化也一樣

   1 靜態變量,靜態方法,靜態塊

   靜態對象,靜態方法都是在原對象和方法上加上static關鍵字修飾,表示類可以直接調用這些,而不需要實例化後再調用。具有的好處是:      1--靜態對象的數據是全局唯一的,一改都改,可以保證數據的唯一性      2--引用方便,直接用類名.方法(屬性)就可以了,不用再get和set   當然靜態方法(變量,塊)也有相應的限制:     1--不能調用其他非靜態方法(只能調用static方法)     2--只能訪問static數據     3--不能以任何方式引用this或super   示例代碼:    
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());
		
	}
}

  

   2 靜態內部類

     當一個類跟另一個類(外部類)有緊密的聯系,一般只有用到外部類的時候才會用該類的話,可以將該類作為靜態的內部類。這樣就可以隨著類的加載而直接產生。不用再可以實例化。      使用方法:隨類一同被加載,調用直接外部類.內部類.靜態對象(方法)     示例代碼:     
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);
	}

  

 

 2 靜態導包

    如果要用的靜態方法所在的類跟當前類不在同一個包下,可以使用靜態導包。這樣你想要用的靜態方法或變量就相當於在該類中直接可見,無需再類名.靜態變量的方式調用。     使用方法:       import static 包名.類名.靜態成員變量(方法)     好處:        被導入的靜態變量和方法在該類中直接可見,直接用     壞處:        一定程度上降低了代碼的可讀性     代碼示例:    
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();
	}
	
}

  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved