文章目錄
- 4-1 面向過程與面向對象
- 4-2 Java語言的基本元素:類和對象
- 面向對象的思想概述
- 4-3 對象的創建和使用
- 內存解析
- 匿名對象
4-1 面向過程與面向對象
- 面向過程(POP) 與 面向對象(OOP)
- 二者都是一種思想,面向對象是相對于面向過程而言的。面向過程,強調的 是功能行為,以函數為最小單位,考慮怎么做。面向對象,將功能封裝進對象,強調具備了功能的對象,以類/對象為最小單位,考慮誰來做。
- 面向對象更加強調運用人類在日常的思維邏輯中采用的思想方法與原則,如抽象、分類、繼承、聚合、多態等。
- java類及類的成員:屬性,方法,構造器;代碼塊,內部類
- 面相對象的三大特征:封裝性,繼承性,多態性(抽象性) - 其他關鍵字:this ,super ,static ,final ,abstract ,interface ,package ,import
4-2 Java語言的基本元素:類和對象
面向對象的思想概述
-
類(Class)和對象(Object)是面向對象的核心概念。
1.類是對一類事物的描述,是抽象的、概念上的定義
2.對象是實際存在的該類事物的每個個體,因而也稱為實例(instance) -
面向對象程序設計的重點是類的設計,類設計,就是設計類的成員.
-
類的語法格式
public class Person{private int age ; public void showAge(int i) { age = i;}
}
- 創建Java自定義類
步驟:- 定義類(考慮修飾符、類名)
- 編寫類的屬性(考慮修飾符、屬性類型、屬性名、初始化值)
- 編寫類的方法(考慮修飾符、返回值類型、方法名、形參等)
4-3 對象的創建和使用
- 創建對象語法: 類名 對象名 = new 類名();
- 使用“對象名.對象成員”的方式訪問對象成員(包括屬性和方法)
例題
public class PersonTest {public static void main(String[] args) {//創建Person類的對象Person p1=new Person();//調用對象的結構,屬性,方法//調用屬性:"對象.屬性"p1.name="Tom";p1.isMale=true;System.out.println(p1.name);//調用方法:"對象.方法"p1.eat();p1.sleep();p1.talk("chinese");//****************Person p2=new Person();System.out.println(p2.name);//nullSystem.out.println(p2.isMale);//false//***************//將p1變量保存的對象地址值賦給了p3,導致p1盒p3指向了對空間中的同一個對象實體Person p3=p1;System.out.println(p3.name);//Tomp3.age=10;System.out.println(p1.age);//10}
}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);}
}
- 類的訪問機制:
- 在一個類中的訪問機制:類中的方法可以直接訪問類中的成員變量。 (例外:static方法訪問非static,編譯不通過。)
- 在不同類中的訪問機制:先創建要訪問類的對象,再用對象訪問類中定義的成員。
內存解析
- 堆(Heap),此內存區域的唯一目的 就是存放對象實例,幾乎所有的對象 實例都在這里分配內存。這一點在Java虛擬機規范中的描述是:所有的 對象實例以及數組都要在堆上分配。
- 通常所說的棧(Stack),是指虛擬機棧。虛擬機棧用于存儲局部變量等。局部變量表存放了編譯期可知長度的各種基本數據類型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、對象引用(reference類型,它不等同于對象本身,是對象在堆內存的首地址)。 方法執行完,自動釋
放。 - 方法區(Method Area),用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據
匿名對象
- 我們也可以不定義對象的句柄,而直接調用這個對象的方法。這樣的對象叫做匿名對象。
如:newPerson().shout(); - 使用情況
- 如果對一個對象只需要進行一次方法調用,那么就可以使用匿名對象
- 我們經常將匿名對象作為實參傳遞給一個方法調用。