封裝是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式
好處:封裝原則:
常用之一:
將成員變數私有化,對外提供get,set方法進行訪問,提高資料安全性
/*
private :私有,許可權修飾符:用於修飾類中的成員(成員變數,成員函式)。
私有只在本類中有效。
將age私有化以後,類以外即使建立了物件也不能直接訪問。
但是人應該有年齡,就需要在person類中提供對應訪問age的方式。
注意:私有僅僅是封裝的一種表現形式。
之所以對外提供訪問方式,就因為可以在訪問方式中加入邏輯判斷等語句。
對訪問的資料進行操作。提高**健壯性。
*/public class persondemo
}class person
// 對外提供公共訪問方法
public void setage(int age)else
}public int getage()
}
特點:
作用:注意:
/*
物件一建立就會呼叫與之對應的建構函式。
建構函式的作用:可以用於給物件進行初始化。
建構函式的小細節:
當乙個類中沒有定義建構函式時,那麼系統會預設給該類加入乙個空引數的建構函式。
當在類中自定義了建構函式後,預設的建構函式就沒有了。
建構函式和一般函式在寫法上有不同。
在執行上也有不同。
建構函式是在物件一建立就執行。給物件初始化。
而一般方法是物件呼叫才執行,給是物件新增物件具備的功能。
乙個物件建立,建構函式只執行一次。
而一般方法可以被該物件呼叫多次。
什麼時候定義建構函式呢?
當分析事物時,該事物存在具備一些特性或者行為,那麼將這些內容定義在建構函式中。
*/public class persondemo2
}class person
person()
person(string name,int age)
public void cry()
}
this:看上去,是用於區分區域性變數和成員變數同名情況。
簡單說:哪個物件在呼叫this所在的函式,this就代表哪個物件。
成員變數和區域性變數。
作用範圍。
在記憶體中的位置:
this的應用:當定義類中功能時,該函式內部要用到呼叫該函式的物件時,這時用this來表示這個物件。
/*
this:看上去,是用於區分區域性變數和成員變數同名情況。
this為什麼可以解決這個問題?
this到底代表的是什麼呢?
this:就代表本類的物件,到底代表哪乙個呢?
this代表它所在函式所屬物件的引用。
簡單說:哪個物件在呼叫this所在的函式,this就代表哪個物件。
this的應用:當定義類中功能時,該函式內部要用到呼叫該函式的物件時,這時用this來表示這個物件。
但凡本類功能內部使用了了本類物件,都用this表示。
*/class person
person(string name)
person(string name,int age)
public void speak()
public void show()
/*需求:給人定義乙個用於比較年齡是否相同的功能。也就是是否是同齡人。
*/ public boolean compare(person p)
}class persondemo3
}
static 關鍵字:
被修飾後的成員具備以下特點:
使用注意
靜態有利有弊
利處:對物件的共享資料進行單獨空間的儲存,節省空間。沒有必要每乙個物件中都儲存乙份。 可以直接被類名呼叫。
弊端:生命週期過長。 訪問出現侷限性。(靜態雖好,只能訪問靜態。)
例項變數和類變數的區別:
存放位置。 類變數隨著類的載入而存在於方法區中。 例項變數隨著物件的建立而存在於堆記憶體中。
生命週期: 類變數生命週期最長,隨著類的消失而消失。 例項變數生命週期隨著物件的消失而消失。
package 靜態方法;
/*靜態:static。
用法:是乙個修飾符,用於修飾成員(成員變數,成員函式).
當成員被靜態修飾後,就多了乙個呼叫方式,除了可以被物件呼叫外,
還可以直接被類名呼叫。類名.靜態成員。
static特點:
1,隨著類的載入而載入。
也就說:靜態會隨著類的消失而消失。說明它的生命週期最長。
2,優先於的物件存在
明確一點:靜態是先存在。物件是後存在的。
3,被所有物件所共享
4,可以直接被類名所呼叫。
例項變數和類變數的區別:
1,存放位置。
類變數隨著類的載入而存在於方法區中。
例項變數隨著物件的建立而存在於堆記憶體中。
2,生命週期:
類變數生命週期最長,隨著類的消失而消失。
例項變數生命週期隨著物件的消失而消失。
靜態使用注意事項:
1,靜態方法只能訪問靜態成員。
非靜態方法既可以訪問靜態也可以訪問非靜態。
2,靜態方法中不可以定義this,super關鍵字。
因為靜態優先於物件存在。所以靜態方法中不可以出現this。
3,主函式是靜態的。
靜態有利有弊
利處:對物件的共享資料進行單獨空間的儲存,節省空間。沒有必要每乙個物件中都儲存乙份。
可以直接被類名呼叫。
弊端:生命週期過長。
訪問出現侷限性。(靜態雖好,只能訪問靜態。)
*/public class staticdemo
}class person
public void haha()
}
主函式:是乙個特殊的函式。作為程式的入口,可以被jvm呼叫。
主函式的定義:
jvm在呼叫主函式時,傳入的是new string[0];
public class maindemo ;
maintest.main(arr); // 呼叫乙個類的主函式
}}class maintest
/*** 獲取整形陣列中的最大值
* @param arr 接受乙個int型別的陣列
* @return 返回該陣列中的最大值
*/public static int getmax(int arr)
}return arr[max];
}/**
* 獲取整形陣列中的最小值
* @param arr 接受乙個int型別的陣列
* @return 返回該陣列中的最小值
*/public static int getmin(int arr)}}
}/**
* 給陣列中的元素進行位置交換
* @param arr 接收乙個int型別的陣列
* @param i 要置換的位置
* @param j 要置換的位置
*/private static void swap(int arr,int i,int j)
/*** 用於列印陣列中的元素
* @param arr 接收乙個int型別的陣列
*/public static void printarray(int arr)else }}
}
格式:
static
特點:隨著類的載入而執行,只執行一次,並優先於主函式,用於給類進行初始化的。
public class staticcodedemo
}class staticcode
public staticcode(int num)
static
public static void show()
}
// 靜態**塊 》 構造**塊 》建構函式
class person
private string name = "hah";
private int age;
private static string country = "cn";
person(string name,int age)
public void setname(string name)
public void speak()
public static void showcountry()
public static void method() }
class persondemo}/*
person p = new person("zhangsan",20);
該句話都做了什麼事情?
1,因為new用到了person.class.所以會先找到person.class檔案並載入到記憶體中。
2,執行該類中的static**塊,如果有的話,給person.class類進行初始化。
3,在堆記憶體中開闢空間,分配記憶體位址。
4,在堆記憶體中建立物件的特有屬性。並進行預設初始化。
5,對屬性進行顯示初始化。
6,對物件進行構造**塊初始化。
7,對物件進行對應的建構函式初始化。
8,將記憶體位址付給棧記憶體中的p變數。
*/
static 靜態方法
乙個不需要任何主叫物件的方法就是靜態方法。靜態方法需要關鍵字static來宣告於定義,他不需要主叫物件,因為它不屬於物件而是屬於類。靜態方法可以被子類繼承,也可以被重寫,但是不能實現多型性。多型性的實現重點在於動態繫結,每一次在呼叫相應方法的時候都是去動態查詢匹配,靜態方法是在類初次載入的時候就已經...
static靜態方法
static也可以修飾方法,使之成為靜態方法,我們通常用的入口函式,也就是main方法就是乙個靜態方法。注意事項 靜態方法可以直接呼叫靜態變數,不能呼叫非靜態成員變數。public class helloworld 2.可以通過建立類的物件來呼叫非靜態成員 public class hellowor...
靜態static 筆記
1.類物件共享 2.類載入時產生,銷毀時釋放,生命週期長 靜態成員的訪問 1.物件.成員 2.類名.成員 static放於屬性名前稱作靜態屬性 類屬性 static放於方法名前稱作靜態方法 類方法 推薦呼叫方式 類名.靜態成員 在成員方法中,可以直接訪問類中的靜態成員 靜態方法中不能直接訪問同乙個類...