1. 程式人生 > >JavaSE之面向物件程式設計—類與物件(上)—— 5

JavaSE之面向物件程式設計—類與物件(上)—— 5

首先我們來認識一下static關鍵字表示什麼:static關鍵字表示靜態的意思,更加通俗的解釋就是static修飾屬性或者方法它表示類的屬性或者方法,而前面所學的都表示物件的熟悉感或者方法。下面我們將從兩個方面來介紹static關鍵字。
一、static屬性
static屬性也叫類屬性,對於咱們前面所學屬性表示物件的屬性。它們兩者之對於間最本質的區別在於儲存空間的位置不同了。對於我們沒有被static修飾的屬性,它的存放是在堆記憶體的。而對於被static修飾過的類屬性,它的存放實在全域性資料區,是所有物件共享的。
下面我們將通過程式碼解釋它們的區別:


//(1):非靜態屬性
// public class Jintai{
	// private int num;
	// private String color;
	// public static void main(String[] args){
		// //在靜態方法中呼叫非靜態屬性需要通過建立這個非靜態屬性所在的類的物件來呼叫
		// Jintai t1=new Jintai();
		// t1.num=30;
		// t1.color="read";
		// System.out.println("這是普通屬性的值:"+"num="+t1.num+",color="+t1.color);
	// }
// }
//(2):靜態屬性
public class Jintai{
	private static int num;
	private static String color;
	public static void main(String[] args){
		//在靜態方法中呼叫靜態屬性,可以直接寫屬性名進行訪問,也可以寫:類名.屬性名進行訪問
		Jintai.num=30; //num=30;
		Jintai.color="red";//color="red";
		System.out.println("這是普通屬性的值:"+"num="+Jintai.num+",color="+Jintai.color);
	}
}

從以上的程式碼段我們可以總結出:
(1)靜態屬性為了防止出現歧義,所以我們訪問靜態屬性統一採用:類名.屬性名。
(2)要訪問非靜態屬性我們需要通過例項化物件,然後通過物件訪問屬性。
(3)一般static屬性用在那種表示公共的屬性。
二、static方法(類方法)
從上面靜態屬性類推我們可以推出靜態的都是屬於類的,屬於類的需要通過類名來訪問。
下面我們通過程式碼來看靜態方法和非靜態方法的區別:

// //非靜態方法:
 // public class Jintai{
	 // private int num;
	 // private String color;
	 
	 // public void getJintai(){
		 // System.out.println("這是非靜態方法!");
	 // }
	
	 // public String printJintai(){
		 // return "num="+this.num+" color="+this.color;
	 // }
	 // public static void main(String[] args){
		 // //在靜態方法中呼叫非靜態方法需要通過建立物件來呼叫。
		 // Jintai t1=new Jintai();
		 // t1.getJintai();
		 // System.out.println(t1.printJintai());
	 // }
 // }
//靜態方法:
public class Jintai{
	 private static int num;
	 private static String color;
	 
	 public static void getJintai(){
		 System.out.println("這是靜態方法!");
	 }
	
	 public static String printJintai(){
		 //在靜態方法中訪問非靜態屬性要通過類名訪問
		 return "num="+Jintai.num+" color="+Jintai.color;
	 }
	 public static void main(String[] args){
		 //在靜態方法中呼叫靜態方法,直接通過類名訪問
		 Jintai.getJintai();
		 System.out.println(Jintai.printJintai());
	 }
 }

從上面的靜態方法和非靜態方法的使用我們可以看到:當一個方法是非靜態方法時即為普通方法,要呼叫這個普通方法我們需要對建立物件來訪問非靜態方法;當一個方法是靜態方法時,可以直接通過類名訪問。
注意:對於靜態方法和非靜態方法訪問之間的關係
(1)在靜態方法中不可以訪問非靜態方法和非靜態屬性,如果要訪問都需要建立對應的物件來進行訪問。在靜態方法中可以訪問及港臺方法的屬性和靜態方法的變數,就像訪問普通函式一樣;
(2)在非靜態方法中可以訪問非靜態的屬性和非靜態的方法;可以通過類名直接訪問靜態方法和靜態屬性;
(3)使用static的目的:有些方法不想受到類的限制,想要不通過建立物件直接呼叫,這時就用static去修飾它。