java面向物件學習的三條主線
1.Java類及類的成員:屬性、方法、構造器、程式碼塊、內部類
2.面向物件的三大特徵:封裝性、繼承性、多型性、(抽象性)
3.其它關鍵字:this、super、static、final、abstract、interface、package、import等
面向過程(pop)與面向物件(oop)
二者都是一種思想,面向物件是相對於面向過程而言的。
面向過程(Object Oriented Programming),強調的是功能行為,以函式為最小單位,強調每個功能的實現步驟。
面向物件(
Procedure Oriented Programming
),將功能封裝進物件,強調具備了功能的物件,以類/物件為最小單位,強呼叫物件去呼叫方法。
面向物件三大特性:
- 封裝(Encapsulation)
- 繼承(Inheritance)
- 多型(Polymorphism)
面向物件中兩個重點---類和物件
類(Class)和物件(Object)是面向物件的核心概念。
類是對一類事物的描述,是抽象的、概念上的定義
物件是實際存在的該類事物的每個個體,因而也稱為例項(instance)
常見的類的成員有:
- 屬性:對應類中的成員變數 。 屬性 = 成員變數 = Field =(域、欄位)
- 行為:對應類中的成員方法 。 (成員)方法 = 函式 = Method
- 建立類的物件 = 類的例項化 = 例項化類
理解“萬事萬物皆物件”:
- 在java語言範疇中,我們都將功能、結構等封裝到類中,通過類的實體化,來呼叫具體的功能結構。
- 涉及到java語言與前端HTML、後端的資料庫互動時,前後端的結構在Java層面互動時,都體現為類。物件
類的語法格式:
修飾符 class 類名 {
屬性宣告;
方法宣告; }
說明:修飾符public:類可以被任意訪問
類的正文要用{ }括起來 舉例:
public class Person{
private int age ; //宣告私有變數 age
public void showAge(int i) { //宣告方法showAge( )
age = i;
}
}
物件的建立和使用:
建立物件語法: 類名 物件名 = new 類名();
使用“物件名.物件成員”的方式訪問物件成員(包括屬性和方法)
/*
1、建立類,設計類的成員
2、建立類的物件
3、通過“物件.屬性”、“物件.方法”呼叫物件的結構 4、如果建立了一個類的多個物件,則每個物件都獨立擁有一套類的屬性(非static的)
意味著:如果我們修改一個物件的屬性a,則不影響另外一個屬性a的值
*/
public class OopDemo1 {
public static void main(String[] args) {
//建立Person類的物件
Person p1 = new Person(); //呼叫物件的結構:屬性、方法
//呼叫屬性:“物件.屬性”
p1.name = "女駙馬";
p1.age = 18;
p1.isMale = false; //呼叫方法:“物件.方法”
p1.eat();
p1.sleep();
p1.talk("chinese"); //建立第二個物件
Person p2 = new Person();
System.out.println(p2.name);//null,與p1不同 //建立第三個物件
Person p3 = p1;
//將p1變數儲存的物件地址值賦給了p3,導致p1與p3指向了堆空間的同一個物件實體
System.out.println(p3.name);//女駙馬
}
} class Person{
//屬性
String name;
int age;
boolean isMale; //方法
public void eat(){
System.out.println("人可以吃飯");
} public void sleep(){
System.out.println("人可以睡覺");
} public void talk(String language){
System.out.println("人可以說話,用的是:" + language);
}
}
類的訪問機制
- 在一個類中的訪問機制:類中的方法可以直接訪問類中的成員變數。(例外:static方法訪問非static,編譯不通過。)
- 在不同類中的訪問機制:先建立要訪問類的物件,再用物件訪問類中定義的成員。
匿名物件:
我們建立的物件,沒有顯式的賦給一個變數名,即為匿名物件
特徵:匿名物件只能使用一次。
類中屬性(field)的使用
屬性語法格式:
修飾符 資料型別 屬性名 = 初始化值 ;
舉例:
public class Person{
private int age; //宣告private變數 age
public String name = “Lila”; //宣告public變數 name
}
- 說明1: 修飾符:常用的許可權修飾符有:private、預設、protected、public;其他修飾符:static、final (暫不考慮)
- 說明2:資料型別: 任何基本資料型別(如int、Boolean) 或 任何引用資料型別。
- 說明3:屬性名:屬於識別符號,符合命名規則和規範即可。
變數的分類:成員變數與區域性變數。
- 在方法體外,類體內宣告的變數稱為成員變數。
- 在方法體內部宣告的變數稱為區域性變數。
屬性(成員變數)與區域性變數的區別
public class OopDemo2 {
public static void main(String[] args) {
User u1 = new User();
System.out.println(u1.name);
System.out.println(u1.age);
System.out.println(u1.isMale); u1.talk("韓語");
u1.eat();
}
} class User{
//屬性
String name;
int age;
boolean isMale; public void talk(String language){//language:形參,也是區域性變數
System.out.println(language);
}
public void eat(){
String food = "大米";//區域性變數
System.out.println("南方人喜歡吃:" + food);
}
}
類中方法的宣告與使用:
方法的定義:
- 描述類應該具有的功能
- 將功能封裝為方法的目的是,可以實現程式碼重用,簡化程式碼
- Java裡的方法不能獨立存在,所有的方法必須定義在類裡。
方法的宣告格式:
許可權修飾符 返回值型別 方法名(引數型別 形參1,引數型別 形參2,……){
方法體
return 返回值;
}
其中許可權修飾符:public,預設,private, protected等。
返回值型別:有返回值 VS 沒有返回值
- 如果有返回值,則必須在方法宣告時,指定返回值的型別。同時,方法中,需要使用return關鍵字來返回指定型別的變數或常量。
- 如果方法內沒有返回值:則方法宣告時,使用void來表示,通常,沒有返回值的方法就不用returrn,但是,如果使用的話,只能用“return”表示結束方法的意思。
- 方法名:屬於識別符號。命名時遵循識別符號命名規則與規範。、
- 形參列表:可以包含零個,一個或多個引數。多個引數時,中間用“,”隔開。
- 方法體:方法功能的體現。
- 返回值:方法在執行完畢後返還給呼叫它的程式的資料。
- return關鍵字的使用:使用範圍:在方法體內。作用:a.結束方法。 b.對於有返回值型別的方法,使用“return 資料”方法返回所要的資料。return後面不能跟執行語句。
方法的使用中,可以呼叫當前類的屬性或方法,特殊的:方法A中又呼叫了方法A,叫做遞迴方法
方法中只能呼叫方法或屬性,不可以在方法內部定義方法。
方法的分類:按照是否有形參及返回值
