一、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]);
}
}
}