學習日記-day14-5.23

完成目標:

學習java下半段課程

知識點:

1.多態轉型

知識點

核心內容

重點

多態轉型

向上轉型(父類引用指向子類對象)

與向下轉型(強制類型轉換)的機制與區別

向上轉型自動完成,向下轉型需顯式強轉

向上轉型

類似double b = 1的小類型自動提升為大類型

多態調用時無法使用子類特有方法

向下轉型

通過強制轉換(如 Dog dog = (Dog) animal)恢復子類類型以調用特有功能

類型不匹配會拋出ClassCastException

轉型應用場景

需調用子類特有功能時(如dog.lookDoor())必須向下轉型

轉型前建議用instanceof檢查類型安全性

2.多態實例

定義筆記本類,具備開機,關機和使用USB設備的功能。具體是什么USB設備,筆記本并不關心,只要符合USB規格的設備都可以。鼠標和鍵盤要想能在電腦上使用,那么鼠標和鍵盤也必須遵守USB規范,不然鼠標和鍵盤的生產出來無法使用;

進行描述筆記本類,實現筆記本使用USB鼠標、USB鍵盤

- USB接口,包含開啟功能、關閉功能

- 筆記本類,包含運行功能、關機功能、使用USB設備功能

- 鼠標類,要符合USB接口

- 鍵盤類,要符合USB接口

public interface USB {public abstract void open();public abstract void close();
}public class Mouse implements USB{@Overridepublic void open() {System.out.println("鼠標開啟");}@Overridepublic void close() {System.out.println("鼠標關閉");}//特有方法public void click(){System.out.println("點我");}
}public class KeyBoard implements USB{@Overridepublic void open() {System.out.println("鍵盤開啟");}@Overridepublic void close() {System.out.println("鍵盤關閉");}//特有功能public void input(){System.out.println("敲我");}
}public class NoteBook {//開機public void start(){System.out.println("開機");}//使用USB/*USB usb = mouse  多態USB usb = keyBoard 多態*/public void useUSB(USB usb){if (usb instanceof Mouse){Mouse mouse = (Mouse) usb;mouse.open();mouse.click();mouse.close();}else{KeyBoard keyBoard = (KeyBoard) usb;keyBoard.open();keyBoard.input();keyBoard.close();}//usb.open();//usb.close();}//關機public void stop(){System.out.println("關機");}
}public class Test01 {public static void main(String[] args) {NoteBook noteBook = new NoteBook();Mouse mouse = new Mouse();noteBook.start();noteBook.useUSB(mouse);noteBook.stop();System.out.println("===========");KeyBoard keyBoard = new KeyBoard();noteBook.start();noteBook.useUSB(keyBoard);noteBook.stop();}
}

知識點

核心內容

重點

USB接口設計

定義抽象接口包含open()和close()方法,要求設備類(鼠標/鍵盤)必須實現

接口與實現類的多態調用關系

筆記本類功能

包含開機、關機、使用USB設備方法(useUSB),通過多態調用不同設備的接口方法

useUSB方法參數類型為接口,需理解多態的實際應用

設備類實現

鼠標類(Mouse)和鍵盤類(Keyboard)實現USB接口,并重寫open/close方法

特有方法(如click()、input())需通過向下轉型調用

多態與類型判斷

在useUSB中通過instanceof判斷設備類型,安全調用特有功能

避免直接強轉導致的類型轉換異常

案例流程

1. 開機 → 2. 插入設備(觸發接口方法)

→ 3. 調用特有功能 → 4. 關機

執行順序與多態調用的聯動邏輯

3.權限修飾符

知識點

核心內容

重點

權限修飾符

Java中四種訪問權限:public(公共)、protected(受保護)、default(默認)、private(私有)

default不能顯式聲明,僅在接口中隱式使用

同類訪問

四種權限修飾的成員在同類中均可訪問

無特殊限制

同包不同類

public/protected/default可訪問,private不可訪問

protected與default易混淆(同包時行為相同)

不同包子父類

public/protected可訪問,default/private不可訪問

protected跨包需繼承關系

不同包非子父類

僅public可訪問,其余均不可

實際開發中優先用public和private

開發實踐

屬性用private(封裝)、方法用public、構造方法用public

private構造方法會阻止實例化

4.final

知識點

核心內容

重點

final修飾類

使類不能被繼承(最終類)

public final class 類名 語法格式

final修飾方法

使方法不能被重寫

與abstract關鍵字沖突(不能同時使用)

final修飾局部變量

變量成為常量(不可二次賦值)

聲明時可以不初始化(但首次賦值后不可更改)

final修飾對象

對象引用地址不可變(但屬性值可修改)

setter方法仍可修改對象屬性

final修飾成員變量

必須顯式初始化且不可二次賦值

會導致有參構造和setter方法失效

final關鍵字的本質

表示"最終的"、"不可改變的"特性

不同修飾對象的不可變性表現差異(類/方法/變量)

5.代碼塊

知識點

核心內容

重點

構造代碼塊

格式:{ }內直接寫代碼;

執行特點:優先于構造方法執行,每次創建對象時都會執行

與構造方法的執行順序關系

靜態代碼塊

格式:static { };

執行特點:優先于構造代碼塊和構造方法,且僅執行一次

與構造代碼塊的執行順序及次數差異

靜態代碼塊應用場景

JDBC連接數據庫的四大參數初始化:

1. 注冊驅動; 2. 數據庫地址;

3. 用戶名; 4. 密碼; (需最早初始化且僅一次)

為何不重復初始化?靜態代碼塊的不可替代性

代碼塊對比

靜態代碼塊 vs 構造代碼塊: - 執行時機:靜態>構造>構造方法; - 執行次數:靜態(1次) vs 構造(N次)

實際開發中優先使用靜態代碼塊

6.內部類

知識點

核心內容

重點

內部類定義

類內部定義的類,用于描述外部類中需要完整結構(屬性和行為)的成員

區分內部類與嵌套類概念

使用場景

當外部類某成員需獨立屬性和行為,且僅服務于外部類時(如人類與心臟)

理解“只為外部事物提供服務”的核心邏輯

JAVA語法規則

類A包含類B時,A為外部類,B為內部類(class A { class B {...} })

靜態/非靜態成員內部類的語法差異

內部類分類

成員內部類(靜態/非靜態)、局部內部類、匿名內部類(重點)

匿名內部類的實際應用場景(如事件監聽)

案例

人的心臟作為內部類,需獨立描述跳動頻率、供血功能等屬性和行為

類比其他生物結構(如汽車與發動機)

7.成員內部類

知識點

核心內容

重點

靜態成員內部類

定義時添加static關鍵字(如static class B),可包含屬性/方法/構造器,支持final或abstract修飾(不可同時使用)

靜態內部類不能調用外部類非靜態成員;權限修飾符使用規則與外部類相同

非靜態成員內部類

定義時不加static,其余結構與靜態內部類類似

調用方式需通過外部類實例

(new Outer().new Inner())

調用方式對比

靜態內部類:Outer.Inner obj = new Outer.Inner();

非靜態內部類:Outer.Inner obj = new Outer().new Inner()

語法差異:非靜態需先實例化外部類

修飾符限制

final修飾后不可繼承;abstract修飾后不可實例化

注意final與abstract互斥性

實際應用示例

Person.Heart靜態內部類模擬心臟跳動方法(jump())

通過Person.Heart heart = new Person.Heart()調用

8.局部內部類

知識點

核心內容

重點

局部內部類

定義在方法、代碼塊或構造器中的內部類,作用域與局部變量一致

外部類無法直接實例化局部內部類,需通過封裝方法間接調用

匿名內部類

局部內部類的特殊形式,無顯式類名,直接通過接口/父類實例化

語法糖特性,需理解new 接口(){...}的底層實現邏輯

調用限制

局部內部類僅能在定義它的方法/塊內實例化,外部需通過封裝方法(如eat())間接調用

成員內部類 vs 局部內部類的實例化權限差異

語法示例

class Heart { void jump() {...} } 在eat()方法內定義,

通過new Heart().jump()調用

方法內定義的類不能使用static修飾

9.局部內部類實際操作

知識點

核心內容

重點

局部內部類的實際操作

實際操作復雜,需通過接口、抽象類作為方法參數傳遞和返回值返回來理解

局部內部類的實際操作方式

接口作為方法參數傳遞

定義接口類型,實現類實現接口并重寫方法,方法參數傳遞接口類型,實際傳遞的是實現類對象

接口不能直接實例化,需傳遞實現類對象

接口作為方法返回值

方法返回值類型為接口類型,實際返回的是接口的實現類對象

返回值類型與實際返回對象類型的區別

抽象類作為方法參數傳遞

抽象類不能實例化,方法參數傳遞抽象類類型,實際傳遞的是其子類對象

抽象類與子類對象的傳遞關系

抽象類作為方法返回值

方法返回值類型為抽象類類型,實際返回的是其子類對象

抽象類作為返回值類型的理解

普通類作為方法參數和返回值

普通類作為方法參數傳遞的是對象,作為方法返回值返回的也是對象

普通類對象的傳遞與返回

接口作為方法參數傳遞,實際傳遞的是實現類對象

接口作為方法返回值,實際返回的是接口的實現類對象:

public interface USB {public abstract void open();
}public class Mouse implements USB{@Overridepublic void open() {System.out.println("鼠標打開");}
}public class Test01 {public static void main(String[] args) {Mouse mouse = new Mouse();method(mouse);System.out.println("================");USB usb = method01();//USB usb = new Mouse();usb.open();}/*接口作為方法參數,傳遞實參時,傳遞的是實現類對象*/public static void method(USB usb){//USB usb = mouse -> 多態usb.open();}/*接口作為返回值類型返回,實際返回的是實現類對象*/public static USB method01(){//Mouse mouse = new Mouse();//return mouse;return new Mouse();}
}

抽象類作為方法參數傳遞,實際傳遞的是其子類對象;

抽象類作為方法返回值,實際返回的是其子類對象:

public abstract class Animal {public abstract void eat();
}public class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗啃骨頭");}
}public class Test02 {public static void main(String[] args) {Dog dog = new Dog();method01(dog);System.out.println("=================");Animal animal = method02();//Animal animal = new Dog()animal.eat();}public static void method01(Animal animal){//Animal animal = doganimal.eat();}public static Animal method02(){return new Dog();}
}

普通類作為方法參數傳遞的是對象,作為方法返回值返回的也是對象

public class Person {public void eat(){System.out.println("人要干飯");}
}public class Test03 {public static void main(String[] args) {Person person = new Person();method01(person);System.out.println("==================");Person person1 = method02();//Person person1 = new Person()person1.eat();}public static void method01(Person person){person.eat();}public static Person method02(){return new Person();}
}

10.匿名內部類

知識點

核心內容

重點

匿名內部類定義

沒有顯示聲明類名的內部類,編譯時會隱式生成對應class文件

與局部內部類的命名區別

使用場景

單次調用接口方法時替代傳統四步實現方式(創建實現類→重寫方法→實例化→調用)

與傳統實現方式的步驟對比

語法格式

new 接口/抽象類 ( ) {

重寫方法 }.重寫的方法();? ? 代表實現類/子類對象

匿名對象與有名對象的調用區別

編譯機制

每個new操作會在編譯時生成獨立class文件(示例中生成2個匿名類文件)

類文件命名規則與生成邏輯

典型應用

USB接口案例:通過匿名內部類同時完成實現和實例化

open()/close()方法的多重調用限制

優劣對比

優勢:簡化單次調用代碼;劣勢:復雜邏輯可讀性差

與Lambda表達式的適用場景差異

11.匿名內部類在開發中的使用

知識點

核心內容

重點

匿名內部類作為參數傳遞

通過method01(USB usb)方法演示,直接傳入new USB(){...}匿名內部類對象,替代傳統實現類實例化

匿名內部類語法格式(new 接口/抽象類(){...})與常規實現類的區別

匿名內部類作為返回值

在method01()中直接返回new USB(){...}對象,調用時通過USB usb = method01(); usb.open();執行

返回值類型需匹配接口,匿名內部類對象需完整實現抽象方法

執行流程解析

1. 調用方法 → 2. 傳遞/返回匿名內部類對象(本質為實現類實例) → 3. 調用重寫方法(如open())

對象生命周期:匿名內部類對象僅在調用時創建,無顯式類定義

匿名內部類作為參數傳遞

匿名內部類作為返回值

12.API文檔

知識點

核心內容

重點

API定義

Application Programming Interface(應用編程接口),包含預定義的類、接口及其成員方法

需區分API與API文檔的概念差異

API文檔作用

程序員離線查詢工具,支持按類/包檢索方法說明

(如Scanner類的方法參數與返回值)

必須掌握類名/包名才能有效查詢,否則需依賴網絡搜索

API文檔結構

包含: 1. 類繼承體系(如Scanner→Object);

? ? ? ? ? ? 2. 實現接口(如Iterator);

? 3. 方法詳情(返回值類型/參數/功能說明)

重點查看方法簽名(如void close())和功能描述字段

文檔使用技巧

1. 通過索引搜索類名(不區分大小寫);

2. 任務欄快捷訪問配置(右鍵→工具欄→新建工具欄)

高頻易錯:直接搜索方法名無效,需通過類名定位

離線查詢優勢

無網絡環境下仍可快速檢索已知類的方法細節(如Scanner.nextInt()的異常處理)

對比百度搜索,精準性更高但前提條件嚴格

13.異常

知識點

核心內容

重點

異常概念

代碼運行中出現的不正常現象,分為錯誤(Error)和異常(Exception)

異常≠語法錯誤,異常是運行時問題而非語法問題

異常體系結構

Throwable(可拋的)為頂級父類,包含Error和Exception兩個子類

Error代表重大錯誤(如內存溢出),Exception代表可處理問題

異常分類

編譯時期異常(檢查型異常) vs 運行時期異常(非檢查型異常)

編譯異常:代碼編譯時報錯;運行異常:運行時才報錯

編譯時期異常

Exception類及其子類(除RuntimeException分支)

典型特征:調用方法時底層拋出,如SimpleDateFormat的parse()

運行時期異常

RuntimeException及其子類(如數組越界異常)

典型特征:編譯不報錯但運行時報錯

異常處理機制

異常未被處理時會自動向上拋出,最終由JVM默認處理

處理流程:打印異常堆棧 → 終止程序執行

典型錯誤示例

遞歸調用導致棧溢出(StackOverflowError)

Error不可恢復,必須重構代碼

典型異常示例

數組越界(ArrayIndexOutOfBoundsException) vs 日期解析異常(ParseException)

運行異常不強制處理,編譯異常必須處理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84510.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84510.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84510.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【編程語言】【Java】一篇文章學習java,復習完善知識體系

第一章 Java基礎 1.1 變量與數據類型 1.1.1 基本數據類型 1.1.1.1 整數類型(byte、short、int、long) 在 Java 中,整數類型用于表示沒有小數部分的數字,不同的整數類型有不同的取值范圍和占用的存儲空間: byte&am…

匯量科技前端面試題及參考答案

數組去重的方法有哪些? 在 JavaScript 中,數組去重是一個常見的操作,有多種方法可以實現這一目標。每種方法都有其適用場景和性能特點,下面將詳細介紹幾種主要的去重方法。 使用 Set 數據結構 Set 是 ES6 引入的一種新數據結構&a…

Git實戰演練,模擬日常使用,快速掌握命令

01 引言 上一期借助Idea,完成了Git倉庫的建立、配置、代碼提交等操作,初步入門了Git的使用。然而日常開發中經常面臨各種各樣的問題,入門級的命令遠遠不夠使用。 這一期,我們將展開介紹Git的日常處理命令,解決日常問…

wordpress主題開發中常用的12個模板文件

在WordPress主題開發中,有多種常用的模板文件,它們負責控制網站不同部分的顯示內容和布局,以下是一些常見的模板文件: 1.index.php 這是WordPress主題的核心模板文件。當沒有其他更具體的模板文件匹配當前頁面時,Wor…

數據庫blog5_數據庫軟件架構介紹(以Mysql為例)

🌿軟件的架構 🍂分類 軟件架構總結為兩種主要類型:一體式架構和分布式架構 ● 一體化架構 一體式架構是一種將所有功能集成到一個單一的、不可分割的應用程序中的架構模式。這種架構通常是一個大型的、復雜的單一應用程序,包含所…

離線服務器算法部署環境配置

本文將詳細記錄我如何為一臺全新的離線服務器配置必要的運行環境,包括基礎編譯工具、NVIDIA顯卡驅動以及NVIDIA-Docker,以便順利部署深度學習算法。 前提條件: 目標離線服務器已安裝操作系統(本文以Ubuntu 18.04為例&#xff09…

chromedp -—— 基于 go 的自動化操作瀏覽器庫

chromedp chromedp 是一個用于 Chrome 瀏覽器的自動化測試工具,基于 Go 語言開發,專門用于控制和操作 Chrome 瀏覽器實例。 chromedp 安裝 go get -u github.com/chromedp/chromedp基于chromedp 實現的的簡易學習通刷課系統 目前實現的功能&#xff…

高級特性實戰:死信隊列、延遲隊列與優先級隊列(三)

四、優先級隊列:優先處理重要任務 4.1 優先級隊列概念解析 優先級隊列(Priority Queue)是一種特殊的隊列數據結構,它與普通隊列的主要區別在于,普通隊列遵循先進先出(FIFO)的原則,…

python打卡day34

GPU訓練及類的call方法 知識點回歸: CPU性能的查看:看架構代際、核心數、線程數GPU性能的查看:看顯存、看級別、看架構代際GPU訓練的方法:數據和模型移動到GPU device上類的call方法:為什么定義前向傳播時可以直接寫作…

Newtonsoft Json序列化數據不序列化默認數據

問題描述 數據在序列號為json時,一些默認值也序列化了,像旋轉rot都是0、縮放scal都是1,這樣的默認值完全可以去掉,減少和服務器通信數據量 核心代碼 數據結構字段增加[DefaultValue(1.0)]屬性,縮放的默認值為1 public class Vec3DataOne{[DefaultValue(1.0)] public flo…

可增添功能的鼠標右鍵優化工具

軟件介紹 本文介紹一款能優化Windows電腦的軟件,它可以讓鼠標右鍵菜單添加多種功能。 軟件基本信息 這款名為Easy Context Menu的鼠標右鍵菜單工具非常小巧,軟件大小僅1.14MB,打開即可直接使用,無需進行安裝。 添加功能列舉 它…

Gemini 2.5 Pro 一次測試

您好,您遇到的重定向循環問題,即在 /user/messaging、/user/login?return_to/user/messaging 和 /user/login 之間反復跳轉,通常是由于客戶端的身份驗證狀態檢查和頁面重定向邏輯存在沖突或競爭條件。 在分析了您提供的代碼(特別…

vue3前端后端地址可配置方案

在開發vue3項目過程中,需要切換不同的服務器部署,代碼中配置的服務需要可靈活配置,不隨著run npm build把網址打包到代碼資源中,不然每次切換都需要重新run npm build。需要一個配置文件可以修改服務地址,而打包的代碼…

大模型微調與高效訓練

隨著預訓練大模型(如BERT、GPT、ViT、LLaMA、CLIP等)的崛起,人工智能進入了一個新的范式:預訓練-微調(Pre-train, Fine-tune)。這些大模型在海量數據上學習到了通用的、強大的表示能力和世界知識。然而,要將這些通用模型應用于特定的下游任務或領域,通常還需要進行微調…

編程技能:字符串函數10,strchr

專欄導航 本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄,故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。 (一)WIn32 專欄導航 上一篇:編程技能:字符串函數09,strncmp 回到目錄…

動態規劃-53.最大子數組和-力扣(LeetCode)

一、題目解析 在給定順序的數組中找出一段具有最大和的連續子數組,且大小最小為1. 二、算法原理 1.狀態表示 我們可以意一一枚舉出所有的子數組,但我們想要的是最大子數組,所以f[i]表示:以i位置為結尾,所有子數組的最…

C++ queue對象創建、queue賦值操作、queue入隊、出隊、獲得隊首、獲得隊尾操作、queue大小操作、代碼練習

對象創建&#xff0c;代碼見下 #include<iostream> #include<queue>using namespace std;int main() {// 1 默認構造函數queue<int> q1;// 2 拷貝構造函數queue<int> q2(q1);return 0;} queue賦值操作&#xff0c;代碼見下 #include<iostream>…

全鏈路解析:影刀RPA+Coze API自動化工作流實戰指南

在數字化轉型加速的今天&#xff0c;如何通過RPA與API的深度融合實現業務自動化提效&#xff0c;已成為企業降本增效的核心命題。本文以「影刀RPA」與「Coze API」的深度協作為例&#xff0c;系統性拆解從授權配置、數據交互到批量執行的完整技術鏈路&#xff0c;助你快速掌握跨…

php本地 curl 請求證書問題解決

錯誤: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for 解決方案 在php目錄下創建證書文件夾, 執行下面生成命令, 然后在php.ini 文件中配置證書路徑; 重啟環境 curl --eta…

【圖數據庫】--Neo4j 安裝

目錄 1.Neo4j --概述 2.JDK安裝 3.Neo4j--下載 3.1.下載資源包 3.2.創建環境變量 3.3.運行 Neo4j 是目前最流行的圖形數據庫(Graph Database)&#xff0c;它以節點(Node)、關系(Relationship)和屬性(Property)的形式存儲數據&#xff0c;專門為處理高度連接的數據而設計。…