java學習基礎面向對象之this和static關鍵字 五-4

一、this關健字

1.      有什麼用?

三個代表,在類中代表對象引用成員變量

在函數中代表對象調用函數

在構造函數中代表構造函數的引用

 

2.      怎麼用?

this只能用在方法中,代表對象的引用,因爲成員變量里加載於對象創建之前.

this.成員變量名:在方法中代表對象引用成員變量

 

this,方法名():在函數中代表對象調用函數

 

格式this(變量):用於構造函數間的相互調用,而且只能放在構造函數的第一行。

 

然後先初始化其this調用的構造函數,再初始化本身的構造函數。

因爲所有構造函數名是一樣的,都是重載函數,

所以,通過變量來標記構造函數,用this去引用

 

3.      什麼時候用?

當需要引用時?

4.      有什麼特點?

this只能應用在本類中.可以修飾類的成員也可以修飾類的成員.

但凡本類功能內部使用到了本類對象,用this表示。

看到this就是有代表對象,代表哪個對象就看其所在功能被哪個對象調用。

這樣就知道誰在參與運算。

 

 

二、靜態(static關鍵字)

1.    什麼是靜態?

 

類的成員用static修飾後,就叫靜態.

2.    靜態有什麼用?

靜態可以讓類的成員隨類的加載而加載,先於對象存在,可以真接用類名訪問,不用先創建象.

靜態成員只在隨類加載一次,並給所有對象共享,這樣可以節省內存空間,不用在每個對象中生成.

3.    靜態怎麼用?

靜態可以修飾類的成員裏的成員變量,成員方法,和構造代碼塊.

靜態使用格式爲:在成員前面加static 就可以.

修飾後類的成員調用格式,類名.類屬性    類名.類方法

 

4.    靜態什麼時候用?

有時你希望定義一個類成員,使它的使用完全獨立於該類的任何對象。通常情況下,類成員必須通過它的類的對象訪問,但是可以創建這樣一個靜態成員,它能夠被它自己使用,而不必引用特定的實例。

或者一個類的成員變量,你不需要爲各個對象所獨有,而是由所有對象共享,任意對其改變將影響所有的對象,即當對象中出現共享數據時,使用靜態修飾。

當功能內部沒有訪問到非靜態數據時,(即對象的特有數據)那麼可以使用靜態修飾。

 

 

5.    靜態有什麼特點?

靜態只能修飾類的成員變量和方法,而不能修飾局部變量

靜態成員可以直接通過 類名.類屬性     類名.類方法

 

被static修飾後,類屬性與類方法加載到方法區的靜態區內,普通實例屬性是在對象中存在,也就是說它在堆內.

static修飾後的成員屬於類的,當類被創建時創建,當類銷燬時銷燬。它的生命週期比實例變量的生命週期長.

static修飾的屬性也是有默認值的。Static屬性它被類的對象所共享,實例屬性是每一個對象自己的。

(在使用static方法時,要注意只能使用static成員。在實例方法中可以使用任意成員

static中不可以使用this,super關鍵字,爲什麼不能使用this關鍵字,因爲static成員是在對象創建前就被加載的,這時還沒有對象產生,所以不能用this。this 指代對象的。

 

 

靜態的利於弊”
利:對對象的共享數據進行單獨空間的存儲,節省空間,沒有必要每一個對象中都存儲一份
    可以被類名調用
弊:生命週期過長
    訪問出現侷限性(靜態只能訪問靜態)
執行優先級

靜態代碼塊初始化----默認初始化------顯示初始化------構造代碼塊初始化----構造函數初始化
例子工具類:
class ArrayTool {
	
	//私有化構造函數
	private  ArrayTool(){		
	}
	
	//定義一個功能獲取數組中的最大值
	public static int  getmax(int[] arr){
		
		int max=0;
		for(int x=0; x<arr.length;x++){
			if(arr[max]<arr[x]){
				max=x;
			}
		}
			return max;
		}
	//查詢某個值在數組中是否存在
	public static int  select(int[] arr,int key){
					
			for(int x=0; x<arr.length;x++){
				if(arr[x]==key){
					
					return x;
				}
			}
				return -1;
		}
	//選擇排序
	public static void  xuanze(int[] arr){
		
		
		for(int x=0; x<arr.length-1;x++){
			 
			for(int y=x;y<arr.length;y++)
			{
				if(arr[x]>arr[y]){
					int temp=arr[y];
					arr[y]=arr[x];
					arr[x]=temp;
						}
			}
		}
	}
	//冒泡排序
	public static void  maopo(int[] arr){
		for(int x=0; x<arr.length-1;x++){//控制比較的圈數
			 
			for(int y=0;y<arr.length-x-1;y++)//控制每圈比較的次數
			{
				if(arr[y]>arr[y+1]){
					int temp=arr[y+1];
					arr[y+1]=arr[y];
					arr[y]=temp;					
				}				
			}
		}
	}
	//數組打印
	public static void pring(int[] arr)
	{
		  for(int x=0;x<arr.length;x++)
		  {
		         if(x!=arr.length-1)
		          System.out.print( arr[x]+",");
		         else
		           System.out.println( arr[x]);
		  }
	}
	
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章