第06章:隨堂復習與企業真題(面向對象-基礎)
一、隨堂復習
1. (了解)面向過程 vs 面向對象
- 不管是面向過程、面向對象,都是程序設計的思路。
- 面向過程:以函數為基本單位,適合解決簡單問題。比如:開車
- 面向對象:以類為基本單位,適合解決復雜問題。比如:造車
2. 類、對象
- 類:抽象的,概念上的定義
- 對象:具體的,類的一個一個的實例。
- 面向對象完成具體功能的操作的三步流程(非常重要)
步驟1:創建類,并設計類的內部成員(屬性、方法)
步驟2:創建類的對象。比如:Phone p1 = new Phone();
步驟3:通過對象,調用其內部聲明的屬性或方法,完成相關的功能
- 對象的內存解析
- 創建類的一個對象;創建類的多個對象;方法的調用的內存解析
- Java中內存結構的劃分
- Java中內存結構劃分為:
虛擬機棧、堆、方法區
;程序計數器、本地方法棧 - 虛擬機棧:以棧幀為基本單位,有入棧和出棧操作;每個棧幀入棧操作對應一個方法的執行;方法內的局部變量會存儲在棧幀中。
- 堆空間:new 出來的結構(數組、對象):① 數組,數組的元素在堆中 ② 對象的成員變量在堆中。
- 方法區:加載的類的模板結構。
- Java中內存結構劃分為:
3. 類的成員之一:屬性(或成員變量)
-
屬性 vs 局部變量
-
屬性 <=> 成員變量 <=>field <=> 字段、域
4. 類的成員之二:方法
- 方法的聲明:權限修飾符 返回值類型 方法名(形參列表){ // 方法體}
- 重點:返回值類型、形參列表
- return關鍵字的使用
5. 再談方法
5.1 方法的重載(overload)
- 方法的重載的要求:“兩同一不同”(同樣的類中,同樣的名字,不同的形參)
- 調用方法時,如何確定調用的是某個指定的方法呢?① 方法名 ② 形參列表
5.2 可變個數形參的方法
- 格式:(int … args)
5.3 方法的參數傳遞機制:值傳遞(重點、難點)
> 如果形參是基本數據類型的變量,則將實參保存的數據值賦給形參。
> 如果形參是引用數據類型的變量,則將實參保存的地址值賦給形參。
5.4 遞歸方法
- 遞歸方法構成了隱式的循環
- 對比:相較于循環結構,遞歸方法效率稍低,內存占用偏高。
6. 對象數組
- String[] ;Person[] ; Customer[]
數組元素類型是類類型
7. package、import關鍵字的使用
- package:指明聲明的類所屬的包。
- import:當前類中,如果使用其它包下的類(除java.lang包),原則上就需要導入。
8. oop的特征之一:封裝性(問的還挺多)
Java規定了4種權限修飾,分別是:private、缺省、protected、public。
我們可以使用4種權限修飾來修飾類及類的內部成員。當這些成員被調用時,體現可見性的大小。
舉例:
> 場景1:私有化(private)類的屬性,提供公共(public)的get和set方法,對此屬性進行獲取或修改
> 場景2:將類中不需要對外暴露的方法,設置為private
> 場景3:單例模式中構造器private的了,避免在類的外部創建實例。(放到static關鍵字后講)
上理論:程序設計的原則之一
理論上:-`高內聚`:類的內部數據操作細節自己完成,不允許外部干涉;(Java程序通常以類的形態呈現,相關的功能封裝到方法中。)-`低耦合`:僅暴露少量的方法給外部使用,盡量方便外部調用。(給相關的類、方法設置權限,把該隱藏的隱藏起來,該暴露的暴露出去)
9. 類的成員之三:構造器
- 如何定義:權限修飾符 類名(形參列表){}
- 構造器的作用:① 搭配上new,用來創建對象 ② 初始化對象的成員變量
public Account(int i, double b, double a){id = i;balance = b;annualInterestRate = a;}//使用:new對象,初始化
Account a = new Account(1000, 2000, 0.0123);
10. 三個小知識
10.1 類的實例變量的賦值過程(重要)
1. 在類的屬性中,可以有哪些位置給屬性賦值?
① 默認初始化;
② 顯式初始化;
③ 構造器中初始化;
**********************************
④ 通過"對象.方法"的方式賦值;
⑤ 通過"對象.屬性"的方式賦值;2. 這些位置執行的先后順序是怎樣?
① - ② - ③ - ④/⑤
10.2 JavaBean
所謂JavaBean,是指符合如下標準的Java類:- 類是公共的
- 有一個無參的公共的構造器
- 有屬性,且有對應的get、set方法
10.3 UML類圖
熟悉。
二、企業真題
2.1 類與對象
1. 面向對象,面向過程的理解?(平*金服、英**達)
略。
2. Java 的引用類型有哪幾種(阿*校招)
類、數組、接口;枚舉、注解、記錄
3. 類和對象的區別(凡*科技、上*銀行)
略。
4. 面向對象,你解釋一下,項目中哪些地方用到面向對象?(燕*金融)
“萬事萬物皆對象”。
2.2 Java內存結構
1. Java虛擬機中內存劃分為哪些區域,詳細介紹一下(神**岳、數*互融)
略。
2. 對象存在Java內存的哪塊區域里面?(阿*)
堆空間。
不能放在棧空間。
2.3 權限修飾符(封裝性)
1. private 、缺省、protected、public的表格化作用區域(愛*信、拓*思、中*瑞飛)
略
2. main方法的public能不能換成private?為什么?(凡*科技、順*)
能。但是改以后就不能作為程序的入口了,就只是一個普通的方法。
2.4 構造器
1. 構造方法和普通方法的區別(凡*科技、軟*動力、中*軟)
編寫代碼的角度:沒有共同點。聲明格式、作用都不同。
字節碼文件的角度:構造器會以<init>()方法
的形態呈現,用以初始化對象。
2. 構造器Constructor是否可被overload?(鴻*網絡)
可以。
3. 無參構造器和有參構造器的的作用和應用(北京楚*龍)
略。
就是初始化的問題。
2.5 屬性及屬性賦值順序
1. 成員變量與局部變量的區別(艾*軟件)
6個點。
2. 變量賦值和構造方法加載的優先級問題(凡*科技、博*軟件)
變量顯式賦值先于構造器中的賦值。
如何證明?我看的字節碼文件。