国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記

這篇具有很好參考價(jià)值的文章主要介紹了8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

IDEA介紹

  1. 刪除當(dāng)前行, 默認(rèn)是 ctrl + Y 自己配置 ctrl + d
  2. 復(fù)制當(dāng)前行, 自己配置 ctrl + alt + 向下光標(biāo)
  3. 補(bǔ)全代碼 alt + /
  4. 添加注釋和取消注釋 ctrl + / 【第一次是添加注釋?zhuān)诙问侨∠⑨尅?/li>
  5. 導(dǎo)入該行需要的類(lèi) 先配置 auto import , 然后使用 alt+enter 即可
  6. 快速格式化代碼 ctrl + alt + L
  7. 快速運(yùn)行程序 自己定義 alt + R
  8. 生成構(gòu)造器等 alt + insert [提高開(kāi)發(fā)效率]
  9. 查看一個(gè)類(lèi)的層級(jí)關(guān)系 ctrl + H [學(xué)習(xí)繼承后,非常有用]
  10. 將光標(biāo)放在一個(gè)方法上,輸入 ctrl + B , 可以定位到方法 [學(xué)繼承后,非常有用]
  11. 自動(dòng)的分配變量名 , 通過(guò) 在后面加 .var [老師最喜歡的]

可以自己去自定義:
快捷鍵 Keymap
模板 Live Templates

包的基本語(yǔ)法:

package com.fw;

說(shuō)明:1. package 關(guān)鍵字,表示打包; 2. com.fw 表示包名

包的命名:只能包含數(shù)字、字母、下劃線、小圓點(diǎn),但是不能用數(shù)字開(kāi)頭,不能是關(guān)鍵字或保留字。


引用包的語(yǔ)法:

import;

我們引入一個(gè)包的主要目的是要使用該包下的類(lèi),所以也可以只引入一個(gè)類(lèi),例如:

import java.util.Scanner;	// 只引入一個(gè)類(lèi)
import java.util.*;		// 表示將java.util 包所有都引入

注意事項(xiàng)和使用細(xì)節(jié)

  1. package 的作用是聲明當(dāng)前類(lèi)所在的包,需要放在類(lèi)的最上面,一個(gè)類(lèi)中最多只有一句 package。
  2. import 指令 位置放在 package 的下面,在類(lèi)定義前面,可以有多句且沒(méi)有順序要求。

包的三大作用

  1. 區(qū)分相同名字的類(lèi)
  2. 當(dāng)類(lèi)很多時(shí),可以很好的管理類(lèi)
  3. 控制訪問(wèn)范圍

包的本質(zhì)分析(原理)

包的本質(zhì) 實(shí)際上就是創(chuàng)建不同的文件夾/目錄來(lái)保存類(lèi)文件。

8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記

一個(gè)包下,包含很多的類(lèi),java 中常用的包有:

  1. java.lang.* //lang 包是基本包, 默認(rèn)引入, 不需要再引入.
  2. java.util.* //util 包, 系統(tǒng)提供的工具包, 工具類(lèi), 使用 Scanner
  3. java.net.* //網(wǎng)絡(luò)包, 網(wǎng)絡(luò)開(kāi)發(fā)
  4. java.awt.* //是做 java 的界面開(kāi)發(fā), GUI

訪問(wèn)修飾符

java 提供四種訪問(wèn)控制修飾符號(hào),用于控制方法和屬性(成員變量)的訪問(wèn)權(quán)限(范圍):

  1. 公開(kāi)級(jí)別:用 public 修飾,對(duì)外公開(kāi)
  2. 受保護(hù)級(jí)別:用 protected 修飾,對(duì)子類(lèi)和同一個(gè)包中的類(lèi)公開(kāi)
  3. 默認(rèn)級(jí)別:沒(méi)有修飾符號(hào),向同一個(gè)包的類(lèi)公開(kāi).
  4. 私有級(jí)別:用 private 修飾,只有類(lèi)本身可以訪問(wèn),不對(duì)外公開(kāi).

范圍從小到大依次是:同類(lèi)、同包、子類(lèi)、不同包。
8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記
這張圖可以背下來(lái)!

  1. 修飾符可以用來(lái)修飾類(lèi)中的屬性,成員方法以及類(lèi)。
  2. 只有默認(rèn)的和 public 才能修飾類(lèi)!并且遵循上述訪問(wèn)權(quán)限的特點(diǎn)。

面向?qū)ο缶幊倘筇卣?/h2>

面向?qū)ο缶幊逃腥筇卣鳎悍庋b、繼承和多態(tài)。

封裝

封裝(encapsulation)就是把抽象出的數(shù)據(jù)[屬性]和對(duì)數(shù)據(jù)的操作[方法]封裝在一起,數(shù)據(jù)被保護(hù)在內(nèi)部,程序的其它部分只有通過(guò)被授權(quán)的操作[方法],才能對(duì)數(shù)據(jù)進(jìn)行操作。

封裝的理解和好處

  1. 隱藏實(shí)現(xiàn)細(xì)節(jié):方法(連接數(shù)據(jù)庫(kù))<–調(diào)用(傳入?yún)?shù)…)
  2. 可以對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,保證安全合理

封裝的實(shí)現(xiàn)步驟(三步)

  1. 將屬性進(jìn)行私有化 private [不能直接修改屬性]。
  2. 提供一個(gè)公共的(public)set方法,用于對(duì)屬性判斷并賦值。
  3. 提供一個(gè)公共的(public)get方法,用于獲取屬性的值。

Idea快速創(chuàng)建set和get方法 :Alt+INSERT

可以將 set 方法寫(xiě)在構(gòu)造器中代替 this.x = x 的操作。

繼承

繼承可以解決代碼復(fù)用,讓我們的編程更加靠近人類(lèi)思維.
當(dāng)多個(gè)類(lèi)存在相同的屬性(變量)和方法時(shí),可以從這些類(lèi)中抽象出父類(lèi),在父類(lèi)中定義這些相同的屬性和方法,所有的子類(lèi)不需要重新定義這些屬性和方法,只需要通過(guò) extends 來(lái)聲明繼承父類(lèi)即可。
8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記

繼承的基本語(yǔ)法

class 子類(lèi) extends 父類(lèi) {
}
  1. 子類(lèi)就會(huì)自動(dòng)擁有父類(lèi)定義的屬性和方法。
  2. 父類(lèi)又叫超類(lèi),基類(lèi)。
  3. 子類(lèi)又叫派生類(lèi)。

繼承給編程帶來(lái)的便利

  1. 代碼的復(fù)用性提高了
  2. 代碼的擴(kuò)展性和維護(hù)性提高了

繼承的深入討論/細(xì)節(jié)問(wèn)題

  1. 子類(lèi)繼承了所有的屬性和方法,非私有的屬性和方法可以在子類(lèi)直接訪問(wèn), 但是私有屬性和方法不能在子類(lèi)直接訪問(wèn),要通過(guò)父類(lèi)提供公共的方法去訪問(wèn)
  2. 子類(lèi)必須調(diào)用父類(lèi)的構(gòu)造器, 完成父類(lèi)的初始化
  3. 當(dāng)創(chuàng)建子類(lèi)對(duì)象時(shí),不管使用子類(lèi)的哪個(gè)構(gòu)造器,默認(rèn)情況下總會(huì)去調(diào)用父類(lèi)的無(wú)參構(gòu)造器,如果父類(lèi)沒(méi)有提供無(wú)參構(gòu)造器,則必須在子類(lèi)的構(gòu)造器中用 super 去指定使用父類(lèi)的哪個(gè)構(gòu)造器完成對(duì)父類(lèi)的初始化工作,否則,編譯不會(huì)通過(guò)(怎么理解。) [舉例說(shuō)明]
  4. 如果希望指定去調(diào)用父類(lèi)的某個(gè)構(gòu)造器,則顯式的調(diào)用一下 : super(參數(shù)列表)
  5. super 在使用時(shí),必須放在構(gòu)造器第一行(super 只能在構(gòu)造器中使用)
  6. super() 和 this() 都只能放在構(gòu)造器第一行,因此這兩個(gè)方法不能共存在一個(gè)構(gòu)造器
  7. java 所有類(lèi)都是 Object 類(lèi)的子類(lèi), Object 是所有類(lèi)的基類(lèi). 8) 父類(lèi)構(gòu)造器的調(diào)用不限于直接父類(lèi)!將一直往上追溯直到 Object 類(lèi)(頂級(jí)父類(lèi))
  8. 子類(lèi)最多只能繼承一個(gè)父類(lèi)(指直接繼承),即 java 中是單繼承機(jī)制。
    思考:如何讓 A 類(lèi)繼承 B 類(lèi)和 C 類(lèi)? 【A 繼承 B, B 繼承 C】
  9. 不能濫用繼承,子類(lèi)和父類(lèi)之間必須滿足 is-a 的邏輯關(guān)系

繼承的本質(zhì)分析

子類(lèi)創(chuàng)建的內(nèi)存布局:
8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記

super關(guān)鍵字

super 代表父類(lèi)的引用,用于訪問(wèn)父類(lèi)的屬性、方法構(gòu)造器。

1. 訪問(wèn)父類(lèi)的屬性,但不能訪問(wèn)父類(lèi)的 private 屬性
super.屬性名;
2. 訪問(wèn)父類(lèi)的方法,不能訪問(wèn)父類(lèi)的 private 方法
super.方法名(參數(shù)列表);
3. 訪問(wèn)父類(lèi)的構(gòu)造器
super(參數(shù)列表);		// 只能放在構(gòu)造器的第一句,只能出現(xiàn)一句!
super 給編程帶來(lái)的便利/細(xì)節(jié)
  1. 調(diào)用父類(lèi)的構(gòu)造器的好處(分工明確,父類(lèi)屬性由父類(lèi)初始化,子類(lèi)的屬性由子類(lèi)初始化)。
  2. 當(dāng)子類(lèi)中有和父類(lèi)中的成員(屬性和方法)重名時(shí),為了訪問(wèn)父類(lèi)的成員,必須通過(guò)super。如果沒(méi)有重名,使用super、this、直接訪問(wèn)是一樣的效果!
  3. super的訪問(wèn)不限于直接父類(lèi),如果爺爺類(lèi)和本類(lèi)中有同名的成員,也可以使用super去訪問(wèn)爺爺類(lèi)的成員;如果多個(gè)基類(lèi)(上級(jí)類(lèi))中都有同名的成員,使用 super 訪問(wèn)遵循就近原則。A->B->C,當(dāng)然也需要遵守訪問(wèn)權(quán)限的相關(guān)規(guī)則。

super 和 this 的比較
8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記

方法重寫(xiě)/覆蓋(override)

方法覆蓋(重寫(xiě))就是子類(lèi)有一個(gè)方法,和父類(lèi)的某個(gè)方法的名稱(chēng)、返回類(lèi)型、參數(shù)一樣,那么我們就說(shuō)子類(lèi)的這個(gè)方法覆蓋了父類(lèi)的方法。

注意事項(xiàng)和使用細(xì)節(jié)
  1. 子類(lèi)的方法的形參列表,方法名稱(chēng),要和父類(lèi)方法的形參列表,方法名稱(chēng)完全一樣。
  2. 子類(lèi)方法的返回類(lèi)型和父類(lèi)方法返回類(lèi)型一樣,或者是父類(lèi)返回類(lèi)型的子類(lèi)。
    比如父類(lèi)返回類(lèi)型是Object,子類(lèi)方法返回類(lèi)型是String
  3. 子類(lèi)方法不能縮小父類(lèi)方法的訪問(wèn)權(quán)限 : public > protected > 默認(rèn) > private

方法的 重寫(xiě)和重載 之間的比較:
8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記

多態(tài)

從一個(gè)問(wèn)題引入:

8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記
多【多種】態(tài)【狀態(tài)】基本介紹:
方法或?qū)ο缶哂卸喾N形態(tài)。是面向?qū)ο蟮牡谌筇卣?,多態(tài)是建立在封裝和繼承基礎(chǔ)之上的。

方法的多態(tài)

重寫(xiě)和重載就體現(xiàn)多態(tài)。

A a = new A();
// 傳入不同的參數(shù),就會(huì)調(diào)用不同sum方法,就體現(xiàn)多態(tài)
System.out.println(a.sum(10, 20));
System.out.println(a.sum(10, 20, 30));
// 方法重寫(xiě)體現(xiàn)多態(tài)
B b = new B();
a.say();
b.say();

對(duì)象的多態(tài)

  1. 一個(gè)對(duì)象的編譯類(lèi)型和運(yùn)行類(lèi)型可以不一致。
  2. 編譯類(lèi)型在定義對(duì)象時(shí),就確定了,不能改變。
  3. 運(yùn)行類(lèi)型是可以變化的。
  4. 編譯類(lèi)型看定義時(shí) = 號(hào)的左邊,運(yùn)行類(lèi)型看 = 號(hào)的右邊。
Animal animal = new Dog();  // animal編譯類(lèi)型是Animal,運(yùn)行類(lèi)型是Dog
animal = new Cat();         // animal的運(yùn)行類(lèi)型變成了Cat,編譯類(lèi)型仍然是Animal

多態(tài)的前提是:兩個(gè)對(duì)象(類(lèi))存在繼承關(guān)系。

多態(tài)的向上轉(zhuǎn)型
  1. 本質(zhì):父類(lèi)的引用指向了子類(lèi)的對(duì)象
  2. 語(yǔ)法:
父類(lèi)類(lèi)型 引用名= new 子類(lèi)類(lèi)型();
  1. 特點(diǎn):編譯類(lèi)型看左邊,運(yùn)行類(lèi)型看右邊。
    可以調(diào)用父類(lèi)中的所有成員(需遵守訪問(wèn)權(quán)限),
    不能調(diào)用子類(lèi)中特有成員;
    最終運(yùn)行效果看子類(lèi)的具體實(shí)現(xiàn)!

父類(lèi)的引用指向了子類(lèi)的對(duì)象有什么好處?
A:

  • 可以實(shí)現(xiàn)動(dòng)態(tài)綁定,即在運(yùn)行時(shí)根據(jù)對(duì)象的實(shí)際類(lèi)型調(diào)用相應(yīng)的方法,而不是根據(jù)引用的類(lèi)型。這樣可以讓程序更靈活,也可以避免類(lèi)型轉(zhuǎn)換的麻煩。
  • 可以實(shí)現(xiàn)抽象化,即只關(guān)注對(duì)象能做什么,而不關(guān)心對(duì)象具體是什么。這樣可以讓程序更簡(jiǎn)潔,也可以降低程序的耦合度,提高程序的可復(fù)用性和可擴(kuò)展性。
  • 可以實(shí)現(xiàn)統(tǒng)一接口,即使用父類(lèi)類(lèi)型的引用作為方法的參數(shù)或返回值,可以接受任何子類(lèi)類(lèi)型的對(duì)象。這樣可以讓程序更通用,也可以利用多態(tài)實(shí)現(xiàn)一些設(shè)計(jì)模式,如工廠模式、策略模式等。
多態(tài)的向下轉(zhuǎn)型
  1. 語(yǔ)法:
子類(lèi)類(lèi)型 引用名 = (子類(lèi)類(lèi)型)父類(lèi)引用;
  1. 只能強(qiáng)轉(zhuǎn)父類(lèi)的引用,不能強(qiáng)轉(zhuǎn)父類(lèi)的對(duì)象。
  2. 要求父類(lèi)的引用必須指向的是當(dāng)前目標(biāo)類(lèi)型的對(duì)象。
Animal animal = new Dog();      // 必須已經(jīng)指向Dog類(lèi)型
Dog dog = (Dog)animal;

當(dāng)向下轉(zhuǎn)型后,可以調(diào)用子類(lèi)類(lèi)型中所有的成員。


屬性沒(méi)有重寫(xiě)之說(shuō)!屬性的值看編譯類(lèi)型。

instanceOf 比較操作符,用于判斷對(duì)象的運(yùn)行類(lèi)型是否為 XX 類(lèi)型或 XX 類(lèi)型的子類(lèi)型。

Java的動(dòng)態(tài)綁定機(jī)制

8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記

  1. 當(dāng)調(diào)用對(duì)象方法的時(shí)候,該方法會(huì)和該對(duì)象的內(nèi)存地址/運(yùn)行類(lèi)型綁定。
  2. 當(dāng)調(diào)用對(duì)象屬性時(shí),沒(méi)有動(dòng)態(tài)綁定機(jī)制,哪里聲明,哪里使用。
多態(tài)的應(yīng)用

多態(tài)數(shù)組
數(shù)組的定義類(lèi)型為父類(lèi)類(lèi)型, 里面保存的實(shí)際元素類(lèi)型為子類(lèi)類(lèi)型。

多態(tài)參數(shù)
方法定義的形參類(lèi)型為父類(lèi)類(lèi)型,實(shí)參類(lèi)型允許為子類(lèi)類(lèi)型。

總結(jié):什么是多態(tài),多態(tài)的具體體現(xiàn)有哪些?

  1. 方法多態(tài)
    1. 重載體現(xiàn)多態(tài)
    2. 重寫(xiě)體現(xiàn)多態(tài)
  2. 對(duì)象多態(tài)
    1. 對(duì)象的編譯類(lèi)型和運(yùn)行類(lèi)型可以不一致,編譯類(lèi)型在定義時(shí),就確定,不能變化。
    2. 對(duì)象的運(yùn)行類(lèi)型是可以變化的,可以通過(guò)getClass()來(lái)查看運(yùn)行類(lèi)型。
    3. 編譯類(lèi)型看定義時(shí) = 號(hào)的左邊,運(yùn)行類(lèi)型看 = 號(hào)的右邊。

Object類(lèi)詳解

equals方法

【Java】深入理解==和equals的對(duì)比

  1. ==:既可以判斷基本類(lèi)型,又可以判斷引用類(lèi)型。
  2. ==:如果判斷基本類(lèi)型,判斷的是值是否相等。實(shí)例:
  3. ==:如果判斷引用類(lèi)型,判斷的是地址是否相等,即判定是不是同一對(duì)象。
  4. equals:是Object類(lèi)中的方法,只能判斷引用類(lèi)型。(即int i不能使用.equals方法,但I(xiàn)nteger i可以)
  5. equals:默認(rèn)判斷的是地址是否相等,子類(lèi)中往往重寫(xiě)該方法,用于判斷內(nèi)容是否相等,比如Integer、String等等。
int i = 10;
double d = 10.0;
System.out.println(i == d);		// true

可以自己重寫(xiě) Object 的 equals 方法。

public boolean equals(Object obj) {
}

hashCode 方法

8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記

  1. 提高具有哈希結(jié)構(gòu)的容器的效率!
  2. 兩個(gè)引用, 如果指向的是同一個(gè)對(duì)象, 則哈希值肯定是一樣的!
  3. 兩個(gè)引用, 如果指向的是不同對(duì)象, 則哈希值是不一樣的
  4. 哈希值主要根據(jù)地址號(hào)來(lái)的 , 不能完全將哈希值等價(jià)于地址。
public class TestComment {
    public static void main(String[] args) {
        AA aa = new AA();
        System.out.println(aa.hashCode());		// 輸出189568618
    }
}

class AA {

}

toString 方法

  1. 默認(rèn)返回: 全類(lèi)名(包名+類(lèi)名)+@+哈希值的十六進(jìn)制, 【查看 Object 的 toString 方法】
    子類(lèi)往往重寫(xiě) toString 方法, 用于返回對(duì)象的屬性信息。
  2. 重寫(xiě) toString 方法, 打印對(duì)象或拼接對(duì)象時(shí), 都會(huì)自動(dòng)調(diào)用該對(duì)象的 toString 形式.
  3. 當(dāng)直接輸出一個(gè)對(duì)象時(shí), toString 方法會(huì)被默認(rèn)的調(diào)用,
    比如 System.out.println(monster); 就會(huì)默認(rèn)調(diào)用
    monster.toString()
public class TestComment {
    public static void main(String[] args) {
        AA aa = new AA();
        System.out.println(aa.toString());		// AA@b4c966a
    }
}

class AA {
    
}

finaliza 方法

從Java9開(kāi)始,finalize方法已被標(biāo)注為@Deprecated,也就是過(guò)期了,再往后這個(gè)方法就廢了,以后面試再也不會(huì)被問(wèn)到finalize方法是干嘛的了!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-479544.html

  1. 當(dāng)對(duì)象被回收時(shí), 系統(tǒng)自動(dòng)調(diào)用該對(duì)象的 finalize 方法。 子類(lèi)可以重寫(xiě)該方法, 做一些釋放資源的操作。
  2. 什么時(shí)候被回收: 當(dāng)某個(gè)對(duì)象沒(méi)有任何引用時(shí), 則 jvm 就認(rèn)為這個(gè)對(duì)象是一個(gè)垃圾對(duì)象, 就會(huì)使用垃圾回收機(jī)制來(lái)銷(xiāo)毀該對(duì)象, 在銷(xiāo)毀該對(duì)象前, 會(huì)先調(diào)用 finalize 方法。
  3. 垃圾回收機(jī)制的調(diào)用, 是由系統(tǒng)來(lái)決定(即有自己的 GC 算法), 也可以通過(guò) System.gc() 主動(dòng)觸發(fā)垃圾回收機(jī)制。

到了這里,關(guān)于8.面向?qū)ο缶幊蹋ㄖ屑?jí)部分)|Java學(xué)習(xí)筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包