來自拉鉤教育-JAVA就業(yè)集訓(xùn)營
面向?qū)ο缶幊痰母拍?/h2>
- 萬物皆對象。
- 面向?qū)ο笾敢詫傩院托袨榈挠^點(diǎn)去分析現(xiàn)實(shí)生活中事務(wù)羞芍。
- 面向?qū)ο缶幊讨赶纫悦嫦驅(qū)ο蟮乃枷脒M(jìn)行分析,然后使用面向?qū)ο蟮木幊陶Z言進(jìn)行表達(dá)的過程郊艘。
- 面向?qū)ο缶幊淌擒浖a(chǎn)業(yè)化發(fā)展的需求荷科。
- 理解面向?qū)ο蟮乃枷刖瑁ǚ盅b、繼承纱注、多態(tài))畏浆,至少掌握一種編程語言。
類和對象的概念
- 對象主要指現(xiàn)實(shí)生活中客觀存在的實(shí)體狞贱,在Java語言中對象體現(xiàn)為內(nèi)存空間中的一塊存儲(chǔ)區(qū)域刻获。
- 類簡單來就是“分類”,是對具有相同特征和行為的多個(gè)對象共性的抽象描述瞎嬉,在Java語言中體現(xiàn)為一種引用數(shù)據(jù)類型蝎毡,里面包含了描述特征/屬性的成員變量以及描述行為的成員方法厚柳。
- 類時(shí)用于構(gòu)建對象的模板,對象的數(shù)據(jù)結(jié)構(gòu)由定義它的類來決定沐兵。
類的定義
// class 類名 {
// 類體;
// }
class Person {
}
- 注意:
通常情況下别垮,當(dāng)類名由多個(gè)單次組成時(shí),要求每個(gè)單次首字母都要大寫扎谎。
成員變量的定義
- 語法:
class 類名 {
數(shù)據(jù)類型 成員變量名 = 初始值;
}
- 例子:
class PerSon {
String name;
}
- 注意:
當(dāng)成員變量由多個(gè)單詞組成時(shí)碳想,通常要求從第二個(gè)單詞起每個(gè)單詞的首字母大寫。
對象的創(chuàng)建
- 語法:
new 類名();
- 列子:
new person();
- 注意:
a.當(dāng)一個(gè)類定義完畢后毁靶,可以使用new關(guān)鍵字來創(chuàng)建該類的對象胧奔,這個(gè)過程叫做類的實(shí)例化。
b.創(chuàng)建對象的本質(zhì)就是在內(nèi)存空間的堆區(qū)申請一塊存儲(chǔ)區(qū)域预吆,用于存放該對象獨(dú)有特征信息龙填。
創(chuàng)建出來的對象,但是又沒有名字的對象叫做匿名對象啡浊。
引用的定義
- 基本概念:
a.使用引用數(shù)據(jù)類型定義的變量叫做引用類型變量觅够,簡稱為“引用”。
b.引用變量主要用于記錄對象在堆區(qū)中的內(nèi)存地址信息巷嚣,便于下次訪問喘先。
- 語法格式
類名 引用變量名;
引用變量名.成員變量名;
- 列子:
Person p = new Persion();
p.name = "張飛";
System.out.println(p.name);
案列題目
- 編程實(shí)現(xiàn)Person類的定義和使用
/*
編程實(shí)現(xiàn)Person類的定義
*/
public class Person {
// 數(shù)據(jù)類型 成員變量名 = 初始值; - 其中 = 初始值廷粒,通常都省略不寫
String name; // 用于描述姓名的成員變量
int age; // 用于描述年齡的成員變量
public static void main(String[] args) {
// 1.聲明Person類型的引用執(zhí)行Person類型的對象
// 數(shù)據(jù)類型(類名) 引用變量名 = new 類名();
Person p = new Person();
// 2.打印對象中的成員變量值
// 引用變量名.成員變量名
System.out.println("我是" + p.name + ", 今年" + p.age + "歲了"); // null 0
System.out.println("-------------------------------------------");
// 3.修改成員變量的數(shù)值
p.name = "zhangfei";
p.age = 30;
// 4.再次打印修改后的數(shù)值
System.out.println("我是" + p.name + ", 今年" + p.age + "歲了"); // zhangfei 30
}
}
-
運(yùn)行效果:
-
執(zhí)行流程和內(nèi)存分析
成員變量的初始值
案例題目
編程實(shí)現(xiàn)Point類的定義窘拯,特征有:橫縱坐標(biāo)(整數(shù)),要求在main方法中聲明Point類型的引用指向Point對象并打印特征坝茎,然后將橫縱坐標(biāo)修改為3和5再次打印涤姊。
/*
編程實(shí)現(xiàn)Point類的定義
*/
public class Point {
int x; // 用于描述橫坐標(biāo)的成員變量
int y; // 用于描述縱坐標(biāo)的成員變量
public static void main(String[] args) {
// 1.聲明Point類型的引用指向Point類型的對象
Point p = new Point();
// 打印成員變量的數(shù)值
System.out.println("橫坐標(biāo):" + p.x + ",縱坐標(biāo):" + p.y); // 0 0
System.out.println("-------------------------------------");
// 2.將橫縱坐標(biāo)修改為3和5后再次打印
p.x = 3;
p.y = 5;
System.out.println("橫坐標(biāo):" + p.x + ",縱坐標(biāo):" + p.y); // 3
}
}
成員方法的定義
- 語法:
class 類名 {
返回值類型 成員方法名(形參列表) {
成員方法體;
}
}
- 列子:
class Person {
void show(){
System.out.println("沒事秀一下");
}
}
當(dāng)成員方法名有多個(gè)單次組成時(shí),要求從第二個(gè)單詞起每個(gè)單詞的首字母大寫嗤放。
返回值類型
- 返回值主要指從方法體內(nèi)返回到方法體外的數(shù)據(jù)內(nèi)容思喊。
- 返回值類型主要指返回值的數(shù)據(jù)類型,可以是基本數(shù)據(jù)類型次酌,也可以是引用數(shù)據(jù)類型恨课。
- 當(dāng)返回的數(shù)據(jù)內(nèi)容是66時(shí),則返回值類型寫int即可岳服。
- 在方法體中使用return關(guān)鍵字可以返回具體的數(shù)據(jù)內(nèi)容并結(jié)束當(dāng)前方法剂公。
- 當(dāng)返回的數(shù)據(jù)內(nèi)容是66時(shí),則方法體中寫return 66; 即可吊宋。
- 當(dāng)該方法不需要返回任何數(shù)據(jù)內(nèi)容時(shí)纲辽,則返回值類型寫void即可。
形參類表
- 形式參數(shù)主要用于將方法體外的數(shù)據(jù)內(nèi)容帶入到方法體內(nèi)部。
- 形式參數(shù)列表主要指多個(gè)形式參數(shù)組成的列表拖吼,語法個(gè)數(shù)如下:
數(shù)據(jù)類型 形參變量名1, 數(shù)據(jù)類型 形參變量名2, ……
- 當(dāng)帶入的數(shù)據(jù)內(nèi)容是"hello"時(shí)鳞上,則形參列表寫String s 即可
- 當(dāng)帶入的數(shù)據(jù)內(nèi)容是66和"hello"時(shí),則形參列表寫 int i, String s 即可
- 若該方法不需要帶入任何數(shù)據(jù)內(nèi)容時(shí)绿贞,則形參列表位置啥也不寫即可因块。
方法體的詳解
- 成員方法體主要用于編寫描述該方法功能的語句塊。
- 成員方法可以實(shí)現(xiàn)代碼的重用籍铁,簡化代碼涡上。
/*
編程實(shí)現(xiàn)Person類的定義
*/
public class Person {
// 數(shù)據(jù)類型 成員變量名 = 初始值; - 其中 = 初始值拒名,通常都省略不寫
String name; // 用于描述姓名的成員變量
int age; // 用于描述年齡的成員變量
// 自定義成員方法實(shí)現(xiàn)所有成員變量的打印
// 返回值類型 方法名稱(形參列表) { 方法體; }
void show() {
// 成員變量和成員方法都屬于類內(nèi)部的成員吩愧,因此可以直接訪問成員變量不需要在加引用.的前綴
System.out.println("我是" + name + ", 今年" + age + "歲了");
}
}
方法的調(diào)用
- 引用變量名.成員方法名(實(shí)參列表);
- 實(shí)際參數(shù)列表主要用于對形式參數(shù)列表進(jìn)行初始化操作,因此參數(shù)的個(gè)數(shù)增显、類型以及順序都要完全一致
- 實(shí)際參數(shù)可以傳遞直接量雁佳、變量、表達(dá)式同云、方法的調(diào)用等糖权。
/*
編程實(shí)現(xiàn)Point類的定義
*/
public class Point {
int x; // 用于描述橫坐標(biāo)的成員變量
int y; // 用于描述縱坐標(biāo)的成員變量
// 自定義成員方法實(shí)現(xiàn)成員變量數(shù)值的打印
void show() {
System.out.println("橫坐標(biāo):" + x + ",縱坐標(biāo):" + y);
}
public static void main(String[] args) {
// 1.聲明Point類型的引用指向Point類型的對象
Point p = new Point();
// 打印成員變量的數(shù)值
// System.out.println("橫坐標(biāo):" + p.x + ",縱坐標(biāo):" + p.y); // 0 0
// 方法調(diào)用
p.show();
System.out.println("-------------------------------------");
// 2.將橫縱坐標(biāo)修改為3和5后再次打印
p.x = 3;
p.y = 5;
// System.out.println("橫坐標(biāo):" + p.x + ",縱坐標(biāo):" + p.y); // 3 5
p.show();
}
}
可變長參數(shù)
- 返回值類型 方法名(參數(shù)的類型... 參數(shù)名)
- 方法參數(shù)部分指定類型的參數(shù)個(gè)數(shù)是可以改變的,也就是0~n個(gè)炸站。
- 一個(gè)方法的形參列表中最多只能聲明一個(gè)可變形參星澳,并且需要參數(shù)列表的末尾。
方法的傳參過程
int max(int ia, int ib){
…… …… ……
}
int a = 5;
int b = 6;
int res = m.max(a,b);
-
為main方法中的變量a旱易、b禁偎、res分配空間并初始化。
-
調(diào)用max方法阀坏,為max方法的形參變量ia如暖、ib分配空間。
-
將實(shí)參變量的數(shù)值賦值到形參變量的內(nèi)存空間中忌堂。
-
max方法運(yùn)行完畢后返回盒至,形參變量空間釋放。
-
main方法中的res變量得到max方法的返回值士修。
main方法結(jié)束后釋放相關(guān)變量的內(nèi)存空間妄迁。
參數(shù)傳遞的注意事項(xiàng)
- 基本數(shù)據(jù)類型的變量作為方法的參數(shù)傳遞時(shí),形參變量數(shù)值的改變通常不會(huì)影響到實(shí)參變量的數(shù)值李命,因?yàn)閮蓚€(gè)變量有各自獨(dú)立的內(nèi)存空間;
- 引用數(shù)據(jù)類型的變量作為方法的參數(shù)傳遞時(shí)箫老,形參變量指向內(nèi)容的改變會(huì)影響到實(shí)參變量指向內(nèi)容的數(shù)值封字,因?yàn)閮蓚€(gè)變量指向同一塊內(nèi)存空間。
- 當(dāng)引用數(shù)據(jù)類型的變量作為方法的參數(shù)傳遞時(shí),若形參變量改變指向后在改變指定的內(nèi)容阔籽,則通常不會(huì)影響到實(shí)參變量執(zhí)行內(nèi)容的改變流妻,因?yàn)閮蓚€(gè)變量指向不同的內(nèi)存空間。
/*
編程實(shí)現(xiàn)參數(shù)傳遞的測試
*/
public class ArgumentTest {
// 自定義成員方法打印參數(shù)傳入的整數(shù)數(shù)據(jù)
// int ia = ib = 10
void show1(int ia) {
ia = 200;
System.out.println("show方法中:ia = " + ia);
}
// 自定義成員方法打印參數(shù)傳入的數(shù)組內(nèi)容
void show2(int[] arr1) {
arr1 = new int[2]; // 加上該行代碼后笆制,相當(dāng)于在堆區(qū)中又重新申請一塊內(nèi)存空間
arr1[0] = 200;
System.out.println("show方法中:arr[0] = " + arr1[0]);
}
public static void main(String[] args) {
// 1.聲明ArgumentTest類型的引用指向該類型的對象
ArgumentTest at = new ArgumentTest();
// 2.使用引用變量調(diào)用show1方法進(jìn)行測試
int ib = 10;
at.show1(ib);
System.out.println("main方法中:ib = " + ib);
System.out.println("----------------------------");
// 3.調(diào)用show2方法進(jìn)行測試
int[] arr2 = new int[]{10, 20};
at.show2(arr2);
System.out.println("main方法中:arr[0] = " + arr2[0]);
}
}
內(nèi)存結(jié)構(gòu)之棧區(qū)
- 棧用于存放程序運(yùn)行過程當(dāng)中所有的局部變量绅这。一個(gè)運(yùn)行的java程序從開始到結(jié)束會(huì)有多次方法的調(diào)用。
- JVM會(huì)為每一個(gè)方法的調(diào)用在棧中分配一個(gè)對應(yīng)的空間在辆,這個(gè)空間稱為該方法的棧幀证薇。一個(gè)棧幀對應(yīng)一個(gè)正在調(diào)用中的方法,棧幀中存儲(chǔ)了該方法的參數(shù)匆篓、局部變量等數(shù)據(jù)浑度。
- 當(dāng)某一個(gè)方法調(diào)用完成后,其對應(yīng)的棧幀將被清除鸦概。
傳參的相關(guān)概念
- 參數(shù)分為形參和實(shí)參箩张,定義方法時(shí)的參數(shù)叫形參,調(diào)用方法時(shí)傳遞的參數(shù)叫做實(shí)參窗市。
- 調(diào)用方法時(shí)采用值傳遞把實(shí)參傳遞給形參先慷,方法內(nèi)部其實(shí)是在使用形參。
- 所謂值傳遞就是當(dāng)參數(shù)是基本類型時(shí)咨察,傳遞參數(shù)的值论熙,比如傳遞i=10,真實(shí)傳參時(shí)扎拣,把10復(fù)制給了形參赴肚。當(dāng)參數(shù)是對象時(shí),傳遞的是對象的值二蓝,也就是把對象的地址賦值給形參誉券。
// class 類名 {
// 類體;
// }
class Person {
}
通常情況下别垮,當(dāng)類名由多個(gè)單次組成時(shí),要求每個(gè)單次首字母都要大寫扎谎。
class 類名 {
數(shù)據(jù)類型 成員變量名 = 初始值;
}
class PerSon {
String name;
}
當(dāng)成員變量由多個(gè)單詞組成時(shí)碳想,通常要求從第二個(gè)單詞起每個(gè)單詞的首字母大寫。
new 類名();
new person();
a.當(dāng)一個(gè)類定義完畢后毁靶,可以使用new關(guān)鍵字來創(chuàng)建該類的對象胧奔,這個(gè)過程叫做類的實(shí)例化。
b.創(chuàng)建對象的本質(zhì)就是在內(nèi)存空間的堆區(qū)申請一塊存儲(chǔ)區(qū)域预吆,用于存放該對象獨(dú)有特征信息龙填。
創(chuàng)建出來的對象,但是又沒有名字的對象叫做匿名對象啡浊。
a.使用引用數(shù)據(jù)類型定義的變量叫做引用類型變量觅够,簡稱為“引用”。
b.引用變量主要用于記錄對象在堆區(qū)中的內(nèi)存地址信息巷嚣,便于下次訪問喘先。
類名 引用變量名;
引用變量名.成員變量名;
Person p = new Persion();
p.name = "張飛";
System.out.println(p.name);
/*
編程實(shí)現(xiàn)Person類的定義
*/
public class Person {
// 數(shù)據(jù)類型 成員變量名 = 初始值; - 其中 = 初始值廷粒,通常都省略不寫
String name; // 用于描述姓名的成員變量
int age; // 用于描述年齡的成員變量
public static void main(String[] args) {
// 1.聲明Person類型的引用執(zhí)行Person類型的對象
// 數(shù)據(jù)類型(類名) 引用變量名 = new 類名();
Person p = new Person();
// 2.打印對象中的成員變量值
// 引用變量名.成員變量名
System.out.println("我是" + p.name + ", 今年" + p.age + "歲了"); // null 0
System.out.println("-------------------------------------------");
// 3.修改成員變量的數(shù)值
p.name = "zhangfei";
p.age = 30;
// 4.再次打印修改后的數(shù)值
System.out.println("我是" + p.name + ", 今年" + p.age + "歲了"); // zhangfei 30
}
}
運(yùn)行效果:
執(zhí)行流程和內(nèi)存分析
編程實(shí)現(xiàn)Point類的定義窘拯,特征有:橫縱坐標(biāo)(整數(shù)),要求在main方法中聲明Point類型的引用指向Point對象并打印特征坝茎,然后將橫縱坐標(biāo)修改為3和5再次打印涤姊。
/*
編程實(shí)現(xiàn)Point類的定義
*/
public class Point {
int x; // 用于描述橫坐標(biāo)的成員變量
int y; // 用于描述縱坐標(biāo)的成員變量
public static void main(String[] args) {
// 1.聲明Point類型的引用指向Point類型的對象
Point p = new Point();
// 打印成員變量的數(shù)值
System.out.println("橫坐標(biāo):" + p.x + ",縱坐標(biāo):" + p.y); // 0 0
System.out.println("-------------------------------------");
// 2.將橫縱坐標(biāo)修改為3和5后再次打印
p.x = 3;
p.y = 5;
System.out.println("橫坐標(biāo):" + p.x + ",縱坐標(biāo):" + p.y); // 3
}
}
class 類名 {
返回值類型 成員方法名(形參列表) {
成員方法體;
}
}
class Person {
void show(){
System.out.println("沒事秀一下");
}
}
當(dāng)成員方法名有多個(gè)單次組成時(shí),要求從第二個(gè)單詞起每個(gè)單詞的首字母大寫嗤放。
數(shù)據(jù)類型 形參變量名1, 數(shù)據(jù)類型 形參變量名2, ……
/*
編程實(shí)現(xiàn)Person類的定義
*/
public class Person {
// 數(shù)據(jù)類型 成員變量名 = 初始值; - 其中 = 初始值拒名,通常都省略不寫
String name; // 用于描述姓名的成員變量
int age; // 用于描述年齡的成員變量
// 自定義成員方法實(shí)現(xiàn)所有成員變量的打印
// 返回值類型 方法名稱(形參列表) { 方法體; }
void show() {
// 成員變量和成員方法都屬于類內(nèi)部的成員吩愧,因此可以直接訪問成員變量不需要在加引用.的前綴
System.out.println("我是" + name + ", 今年" + age + "歲了");
}
}
/*
編程實(shí)現(xiàn)Point類的定義
*/
public class Point {
int x; // 用于描述橫坐標(biāo)的成員變量
int y; // 用于描述縱坐標(biāo)的成員變量
// 自定義成員方法實(shí)現(xiàn)成員變量數(shù)值的打印
void show() {
System.out.println("橫坐標(biāo):" + x + ",縱坐標(biāo):" + y);
}
public static void main(String[] args) {
// 1.聲明Point類型的引用指向Point類型的對象
Point p = new Point();
// 打印成員變量的數(shù)值
// System.out.println("橫坐標(biāo):" + p.x + ",縱坐標(biāo):" + p.y); // 0 0
// 方法調(diào)用
p.show();
System.out.println("-------------------------------------");
// 2.將橫縱坐標(biāo)修改為3和5后再次打印
p.x = 3;
p.y = 5;
// System.out.println("橫坐標(biāo):" + p.x + ",縱坐標(biāo):" + p.y); // 3 5
p.show();
}
}
int max(int ia, int ib){
…… …… ……
}
int a = 5;
int b = 6;
int res = m.max(a,b);
為main方法中的變量a旱易、b禁偎、res分配空間并初始化。
調(diào)用max方法阀坏,為max方法的形參變量ia如暖、ib分配空間。
將實(shí)參變量的數(shù)值賦值到形參變量的內(nèi)存空間中忌堂。
max方法運(yùn)行完畢后返回盒至,形參變量空間釋放。
main方法中的res變量得到max方法的返回值士修。
main方法結(jié)束后釋放相關(guān)變量的內(nèi)存空間妄迁。
/*
編程實(shí)現(xiàn)參數(shù)傳遞的測試
*/
public class ArgumentTest {
// 自定義成員方法打印參數(shù)傳入的整數(shù)數(shù)據(jù)
// int ia = ib = 10
void show1(int ia) {
ia = 200;
System.out.println("show方法中:ia = " + ia);
}
// 自定義成員方法打印參數(shù)傳入的數(shù)組內(nèi)容
void show2(int[] arr1) {
arr1 = new int[2]; // 加上該行代碼后笆制,相當(dāng)于在堆區(qū)中又重新申請一塊內(nèi)存空間
arr1[0] = 200;
System.out.println("show方法中:arr[0] = " + arr1[0]);
}
public static void main(String[] args) {
// 1.聲明ArgumentTest類型的引用指向該類型的對象
ArgumentTest at = new ArgumentTest();
// 2.使用引用變量調(diào)用show1方法進(jìn)行測試
int ib = 10;
at.show1(ib);
System.out.println("main方法中:ib = " + ib);
System.out.println("----------------------------");
// 3.調(diào)用show2方法進(jìn)行測試
int[] arr2 = new int[]{10, 20};
at.show2(arr2);
System.out.println("main方法中:arr[0] = " + arr2[0]);
}
}