目錄
面向物件
類與物件的關系:
類的定義:
如何使用剛才創建的類呢?
成員變數和區域變數的區別
形式引數的問題
匿名物件
面向物件
1、什么是面向物件的思想?
面向物件的思想是基于面向程序的思想發展而來的,
面向程序:強調的是實作功能的每一個步驟
面向物件:強調的是物件,然后由這個物件去呼叫功能
2、面向物件的特點:
1)、是一種更加符合我們現實生活習慣的思想
2)、可以將復雜的事情簡單化
3)、我們從之前的參與者(執行者)變成了指揮者
類與物件的關系:
類:是一組相關的屬性和行為的集合
物件:是該類事物的具體體現
舉例: 類 學生
物件 班長就是一個物件
類的定義:
現實世界的事物
屬性 : 人的身高,體重等
行為 :人可以學習,吃飯等
Java中用class描述事物也是如此, 成員變數 :就是事物的屬性, 成員方法 : 就是事物的行為
定義類其實就是定義類的成員(成員變數和成員方法)
//創建一個老師類
class Teacher{
//定義teacher的屬性(成員變數)
String name; //定義姓名
int age; //定義年齡
String sex; //定義性別
//定義teacher的行為(成員方法)
public void teach(){ //定義一個教學生的方法
System.out.println("教學生");
}
}
如何使用剛才創建的類呢?
創建物件: 類名 物件名 = new 類名();
呼叫方法: 物件名.成員變數 /物件名.成員方法
public class Test1 {
public static void main(String[] args) {
Teacher teacher=new Teacher();
teacher.age=22; //呼叫Teacher類的年齡屬性,給其賦值
System.out.println(teacher.age); //輸出
teacher.teach(); //呼叫Teacher類的成員方法
}
}

成員變數和區域變數的區別
1.在類中的位置不同
成員變數 :類中方法外 區域變數 :方法內或者方法宣告上
2.在記憶體中的位置不同
成員變數 :堆記憶體 區域變數 :堆疊記憶體
3.生命周期不同
成員變數 :隨著物件的存在而存在,隨著物件的消失而消失
區域變數:隨著方法的呼叫而存在,隨著方法的呼叫完畢而消失
4.初始化值不同
成員變數:有默認的初始化值
區域變數: 沒有默認的初始化值,必須先定義,賦值,才能使用,
注意:區域變數和成員變數的名字一樣時,在方法呼叫時采用就近原則,
形式引數的問題
1.當形式引數是基本資料型別時,將來呼叫方法傳入的是常量值,或者是該型別的變數,
class Number{
public int getSum(int a,int b){ //在一個類中定義一個求和方法
return a+b;
}
}
public class Test2 {
public static void main(String[] args) {
Number number=new Number();//在測驗類中創建一個Number類的物件,只有創建了物件才能呼叫類中的方法
System.out.println(number.getSum(10,20));//呼叫Number類中的求和方法,并輸出結果,
}
}

若在方法中對變數修改,不會影響到外部實際在堆疊記憶體中的值,
2.當形式引數是參考資料型別,呼叫方法傳入的是該類物件的地址值
class Student2 {
public void study() { //在Student中創建一個學習的方法
System.out.println("學習");
}
}
class StudentTest2 {
public void function(Student2 s) { //創建StudentTest類,創建方法參考Student類的方法
s.study();
}
}
public class Test3 {
public static void main(String[] args) {
StudentTest2 studentTest2 = new StudentTest2();//想要呼叫function方法,需創建StudentTest2的物件
Student2 student2 = new Student2();//創建Student2的物件
studentTest2.function(student2); //呼叫方法
}
}
若在方法中對變數修改,會影響到外部實際堆記憶體中的值,
匿名物件
匿名物件:就是沒有名字的物件,是物件的一種簡化表示形式
匿名物件的兩種使用情況 :
物件呼叫方法僅僅一次的時候 ;作為實際引數傳遞,
參考上面的學生類,new完物件后直接使用,:
class Student2 {
public void study() { //在Student中創建一個學習的方法
System.out.println("學習");
}
}
class StudentTest2 {
public void function(Student2 s) { //創建StudentTest類,創建方法參考Student類的方法
s.study();
}
}
public class Test3 {
public static void main(String[] args) {
StudentTest2 studentTest2 = new StudentTest2();//想要呼叫function方法,需創建StudentTest2的物件
Student2 student2 = new Student2();//創建Student2的物件
studentTest2.function(student2); //呼叫方法
new StudentTest2().function(new Student2());//當new 完物件后直接使用,沒有使用變數名接收的物件,稱之為匿名物件
}
}

注意:匿名物件不適合多次呼叫,每次new的時候都是一個新的匿名物件,會頻繁的在堆記憶體中開辟空間,匿名物件使用完畢之后,無法使用第二次,
面向物件三大特征——封裝
https://blog.csdn.net/qq_52400447/article/details/122520149
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413323.html
標籤:其他
下一篇:HadoopHA 搭建
