JAVA_面向物件思想概述、基本介紹及方法的過載與遞迴(一)
面向物件
什麼是面向物件
java類及類的成員:屬性、方法、構造器、程式碼塊、內部類
面向物件的三大特點:封裝性、繼承性、多型性、(抽象性)
其它關鍵字:this
、super
、static
、final
、abstract
、interface
、package
、import
等
面向過程:強調的是功能行為,以函式為最小單位,考慮怎麼做。
面向物件:強調具備功能的物件,以類/物件為最小單位,考慮誰來做。
面向物件的思想概述
類(Class
)和物件(Object
)是是面向物件的核心概念
- 類是對一類事物的描述,是抽象的、概念上的定義
- 物件是實際存在的該類事物的每個個體,因而也稱為例項(
instance
)
類
屬性:成員變數(field
)
方法:成員方法(method
)
類和物件的使用
建立類,設計類的成員
class Person { // 屬性 String name; int age = 1; boolean isMale; // 方法 public void eat() { System.out.println("人可以吃飯"); } public void sleep() { System.out.println("人可以睡覺"); } public void talk(String language) { System.out.println("人可以說話,使用的是:" + language); } }
建立類的物件
建立類的物件,也稱為類的例項化、例項化類。
Person p1 = new Person();
通過“物件.屬性”或“物件.方法”呼叫物件的結構
// 呼叫物件結構:屬性
p1.name = "Tom";
p1.isMale = true;
System.out.println(p1.name);
// 呼叫物件結構:方法
p1.eat();
p1.sleep();
p1.talk("Chinese");
如果建立了一個類的多個物件,則每個物件都是獨立的擁有一套類的屬性。(非static的)
如果我們修改一個物件的屬性,則不影響其它物件屬性的值
物件的記憶體解析
屬性(成員變數)與區域性變數的區別
相同點:
- 定義變數的格式:
資料型別 變數名 = 變數值
- 先宣告:後使用
- 變數都有其對應的作用域
不同點:
一、在類中宣告的位置不同
- 屬性:直接定義在類的一對
{ }
內。 - 區域性變數:宣告在方法內、方法形參、程式碼快內、構造器形參、構造器內部的變數。
二、關於許可權修飾符的不同
-
屬性:可以在宣告屬性時:指明其許可權,使用許可權修飾符。
常用的許可權修飾符:
private
、public
、protected
、預設(預設) -
區域性變數:不可以使用許可權修飾符
三、預設初始化值的情況
-
屬性:類的屬性,根據其型別,都是預設初始化值。
整形(
byte
、short
、int
、long
): 0浮點型(
float
、double
):0.0字元型(
char
):0 或 ‘\u0000’布林型(
boolean
):false
引用資料型別(類、陣列、介面):
null
-
區域性變數:沒有預設初始化值。
注意:我們在呼叫區域性變數前一定要先賦值。
特別:形參在呼叫時進行賦值即可。
四、在記憶體中載入的位置
-
屬性:載入到堆空間中(heap)(非
static
) -
區域性變數:載入到棧空間中(stack)
有返回值和沒有返回值
-
如果方法有返回值,則必須在方法宣告時,指定返回值的型別。
同時,方法中,需要使用
return
關鍵字來返回指定型別的變數或常量的資料。 -
如果方法沒有返回值,則方法宣告時,使用
void
來表示。通常,在沒有返回值的方法中,就不需要使用
return
,如果使用return;
,則表示結束此方法的意思。
關於物件的賦值
如果變數是基本資料型別,此時賦值的是變數所儲存的資料值。
如果變數是引用資料型別,此時賦值的是變數所儲存的陣列的地址值。
方法的過載(overload)
過載的概念
在同一個類中,允許存在一個以上的同名方法,只要它們的引數個數或者引數型別不同即可。
- 同一個類、相同方法名
- 引數列表不同:引數個數不同,引數型別不同
跟方法的許可權修飾符、返回值型別、形參變數名、方法體都沒有關係,都不算過載。只有滿足以上兩個條件才是過載。
class OverloadTest {
String name;
int age;
public void setOverload() {
}
public void setOverload(String a) {
}
public void setOverload(int age) {
}
public void setOverload(String a, int age) {
}
}
遞迴方法
遞迴方法的使用
遞迴方法:一個方法體內呼叫它自身。
方法遞迴包含了一種隱式的迴圈:它會重複執行某段程式碼,但這種重複執行無須迴圈控制。遞迴一定要向已知方向遞迴,否則這種遞迴就變成了無窮遞迴,類似於死迴圈。
class RecursionTest {
int count = 10;
int sum = 0;
public static void main(String[] args) {
RecursionTest recursionTest = new RecursionTest();
recursionTest.recursion();
}
public void recursion() {
sum++;
if (sum < count) {
System.out.println("遞迴:----" + sum);
recursion();
}
}
}