java面向物件學習的三條主線


1.Java類及類的成員:屬性、方法、構造器、程式碼塊、內部類
2.面向物件的三大特徵:封裝性、繼承性、多型性、(抽象性)
3.其它關鍵字:this、super、static、final、abstract、interface、package、import等
 
 
面向過程(pop)與面向物件(oop)

二者都是一種思想,面向物件是相對於面向過程而言的。
面向過程(Object Oriented Programming),強調的是功能行為,以函式為最小單位,強調每個功能的實現步驟。
面向物件(

Procedure Oriented Programming

),將功能封裝進物件,強調具備了功能的物件,以類/物件為最小單位,強呼叫物件去呼叫方法。

 
 
面向物件三大特性:
  1. 封裝(Encapsulation)
  2. 繼承(Inheritance)
  3. 多型(Polymorphism)
 
面向物件中兩個重點---類和物件

類(Class)和物件(Object)是面向物件的核心概念。
類是對一類事物的描述,是抽象的、概念上的定義
物件是實際存在的該類事物的每個個體,因而也稱為例項(instance)

 

 常見的類的成員有:

  1. 屬性:對應類中的成員變數 。 屬性 = 成員變數 = Field  =(域、欄位)
  2. 行為:對應類中的成員方法 。 (成員)方法 = 函式 = Method
  3. 建立類的物件 = 類的例項化 = 例項化類

理解“萬事萬物皆物件”:

  1. 在java語言範疇中,我們都將功能、結構等封裝到類中,通過類的實體化,來呼叫具體的功能結構。
  2. 涉及到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);
}
}

類的訪問機制


  1. 在一個類中的訪問機制:類中的方法可以直接訪問類中的成員變數。(例外:static方法訪問非static,編譯不通過。)
  2. 在不同類中的訪問機制:先建立要訪問類的物件,再用物件訪問類中定義的成員。

 

匿名物件:


我們建立的物件,沒有顯式的賦給一個變數名,即為匿名物件

特徵:匿名物件只能使用一次。

類中屬性(field)的使用


屬性語法格式:
修飾符 資料型別 屬性名 = 初始化值 ;
舉例:
public class Person{
private int age; //宣告private變數 age
public String name = “Lila”; //宣告public變數 name
}
  1. 說明1: 修飾符:常用的許可權修飾符有:private、預設、protected、public;其他修飾符:static、final (暫不考慮)
  2. 說明2:資料型別: 任何基本資料型別(如int、Boolean) 或 任何引用資料型別。
  3. 說明3:屬性名:屬於識別符號,符合命名規則和規範即可。

變數的分類:成員變數與區域性變數。


  1. 在方法體外,類體內宣告的變數稱為成員變數。
  2. 在方法體內部宣告的變數稱為區域性變數。

屬性(成員變數)與區域性變數的區別

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);
}
}

類中方法的宣告與使用:


方法的定義:
  1. 描述類應該具有的功能
  2. 將功能封裝為方法的目的是,可以實現程式碼重用,簡化程式碼
  3. Java裡的方法不能獨立存在,所有的方法必須定義在類裡。
方法的宣告格式:
 許可權修飾符  返回值型別  方法名(引數型別 形參1,引數型別 形參2,……){
方法體
return 返回值;
}

其中許可權修飾符:public,預設,private, protected等。

返回值型別:有返回值  VS 沒有返回值

  1. 如果有返回值,則必須在方法宣告時,指定返回值的型別。同時,方法中,需要使用return關鍵字來返回指定型別的變數或常量。
  2. 如果方法內沒有返回值:則方法宣告時,使用void來表示,通常,沒有返回值的方法就不用returrn,但是,如果使用的話,只能用“return”表示結束方法的意思。
  • 方法名:屬於識別符號。命名時遵循識別符號命名規則與規範。、
  • 形參列表:可以包含零個,一個或多個引數。多個引數時,中間用“,”隔開。
  • 方法體:方法功能的體現。
  • 返回值:方法在執行完畢後返還給呼叫它的程式的資料。
  • return關鍵字的使用:使用範圍:在方法體內。作用:a.結束方法。  b.對於有返回值型別的方法,使用“return  資料”方法返回所要的資料。return後面不能跟執行語句。
 
方法的使用中,可以呼叫當前類的屬性或方法,特殊的:方法A中又呼叫了方法A,叫做遞迴方法
方法中只能呼叫方法或屬性,不可以在方法內部定義方法。
 
方法的分類:按照是否有形參及返回值