JAVA_TEN-面向對象高級一

一.Static

一 定義:

叫靜態,可以修飾成員變量、成員方法

成員變量按有無static修飾,分為兩種:

類變量:有static 修飾,屬于類,在計算機里只有一份,會被類的全部對象共享。

實例變量:無static修飾,屬于每一個對象。

static變量使用:

類變量:

類名.類變量(推薦)

對象名.類變量(不推薦)

實例變量:

對象.實例變量

static方法使用:

類方法(靜態方法):

屬于類,可以直接用類名訪問,也可以用對象訪問

類名.類方法(推薦)

對象名.類方法(不推薦)

無static修飾的成員方法:

實例方法 (對象的方法):

屬于對象,只能用對象訪問

對象名.實例方法

(拓展:main方法也是類方法)

類方法的應用場景

可以用來設計工具類

是什么:工具類中的方法都是類方法,每個類方法都是為了完成一個功能的

好處:提高了代碼的復用性,調用方便,提高了開發效率

對比:實例方法需要創建對象進行調用,會浪費內存

建議:工具類不需要創建對象,建議將工具類的構造器私有化

注意事項

類方法中可以直接訪問類的成員,不可以直接訪問實例成員

實例方法中既可以直接訪問類成員,也可以直接訪問實例成員

實例方法中可以出現this關鍵字,類方法中不可以出現this關鍵字

二 代碼塊的概述

代碼塊是類的5大成分之一(成員變量,構造器,方法,代碼塊,內部類)

代碼塊分為兩種:

靜態代碼塊

格式:static{}

特點:類加載時自動執行,由于類只會加載一次,所以靜態代碼塊也就會執行一次

作用:完成類的初始化,例如:對類變量的初始化賦值

實例代碼塊

格式:{}

特點:每次創建對象時,執行實例代碼塊,并在構造器前執行。

作用:和構造器一樣,都是用來完成對對象的初始化,例如:對實例對象進行初始化賦值。

應用:記錄對象創建的日志

三 單例設計模式

設計模式指的是具體問題的最優解法

確保一個類中只有一個實例

單例要求:

1.把類的構造器私有化,防止外部通過?new?創建新實例;

2.定義一個類變量存儲類的一個對象;

3.提供一個類方法返回對象

單例應用場景:

任務管理器,獲取運行時的對象

使用單例好處:

可以有效避免浪費內存

餓漢式單例特點:

獲取類的對象時,對象已經創建好了

懶漢式單例特點:

拿對象時才開始創建對象

  • 餓漢式單例代碼

    public class Test {public static void main(String[] args) {A a1=A.getObject();A a2=A.getObject();System.out.println(a1);System.out.println(a2);}
    }
    public class A {//1.必須私有類的構造器private A(){}//2.定義一個類變量記住類的一個對象private static A a=new A();//3.定義一個類方法返回類的變量public static A getObject(){return a;}
    }
  • 懶漢式單例代碼

    public class Test2 {public static void main(String[] args) {B b1= B.getInstance();B b2=B.getInstance();System.out.println(b1==b2);}
    }
    
    public class B {//2.定義一個類變量,用于存儲這個類的一個對象private static B b;//1.把類的構造器私有化private B(){}//3.定義一個類方法,確保這個方法保證第一次調用菜創建一個對象,后面調用時會返回同一個對象public static B getInstance(){if(b==null){System.out.println("第一次創建對象~");b=new B();}return b;}}
    

注意事項:單例對象頻繁使用時采用餓漢式單例代碼,很少用到時采用懶漢式單例代碼

二.繼承

一 定義:

1.繼承就是extends關鍵字,讓一個類和另一個類建立的一種父子關系

2.子類可以繼承父類的非私有的成員

特點:

子類繼承父類的非私有化成員(成員變量,成員方法)

繼承后對象的創建是子類和父類共同完成的

好處:

減少重復代碼代碼的編寫,提高代碼的復用性

繼承注意事項:

1.Java是單繼承的,一個類只能繼承一個直接父類;Java中的類不支持多繼承,但是支持多層繼承。

2.Object類是Java中所有類的祖宗

二 方法重寫

原因:當子類覺得父類中的某個方法不好用時,或者無法滿足自己的要求時,子類可以重寫一個方法名稱,參數列表一樣的方法,去覆蓋父類的這個方法,這就是方法重寫。

注意:重寫后,方法的訪問,Java會遵循就近原則。

方法重寫其它注意事項:

1.重寫小技巧:使用@Override注解,檢查我們方法重寫的格式是否正確,代碼可讀性也會更好。

2.子類重寫父類方法時,訪問權限必須大于或者等于父類該方法的權限。

3.重寫的方法返回值類型,必須被重寫方法的返回值類型一樣,或者范圍更小。

4.私有方法,靜態方法不能被重寫,如果重寫會報錯。

三 子類訪問成員的方法

在子類中訪問其它成員(成員變量,成員方法),是依照就近原則的。

1.先子類局部范圍找

2.然后子類成員范圍找

3.然后父類成員范圍找,如果父類范圍沒有找到則報錯

如何在子類中優先使用父類成員:

可以通過super關鍵字,指定父類的成員:super.父類成員變量/父類成員方法

四 子類構造器

特點:

子類中的全部構造器,都必須先調用父類構造器,再執行自己。

  • 子類構造器特點代碼

     class A {
    //    public A(){
    //        System.out.println("父類A構造器執行了");
    //    }public A(String name,int age){}
    }
    class Z extends A{public Z(){//super();默認存在super("123",34); //解決父類沒有默認構造器System.out.println("子類Z無參構造器執行了");}public Z(String name){//super();默認存在super("123",34); //解決父類沒有默認構造器System.out.println("子類Z有參構造器執行了");}
    }public class Test {public static void main(String[] args) {Z z=new Z();Z z1=new Z("名字");}
    }
    

應用場景

子類構造器可以通過調用父類構造器,把對象中包含父類這部分的數據先進行初始化賦值,再回來把對象里包含子類這部分的數據頁進行初始化賦值。

補充:this(….)調用兄弟構造器

任意類的構造器中,是可以通過this(…)去調用該類的其他構造器的

  • this(….)調用兄弟構造器代碼

    public class Test2 {public static void main(String[] args) {Student student=new Student("張三",12);System.out.println(student.getName());System.out.println(student.getAge());System.out.println(student.getSchoolName());}
    }
    class Student{private String name;private int age;private String schoolName;public Student() {}public Student(String name,int age){this(name,age,"黑馬程序員"); //this(…)調用兄弟構造器}public Student(String name, int age, String schoolName) {this.name = name;this.age = age;this.schoolName = schoolName;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSchoolName() {return schoolName;}public void setSchoolName(String schoolName) {this.schoolName = schoolName;}
    }

注意:super和this不能出現在同一構造器中,且放在第一行

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

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

相關文章

幻獸帕魯開服教程

以下均為個人推薦,不喜勿噴,望審核大大明辨開服條件一臺帶公網的vps服務器(需開放udp),配置至少為4c16g,推薦8c32g開服需要準備的工具:steamcmd:https://steamcdn-a.akamaihd.net/cl…

lesson21:Python面向對象編程

目錄 引言 一、了解面向對象編程(OOP):編程范式的革命 1.1 什么是面向對象編程? 1.2 OOP vs 面向過程:思維方式的差異 1.3 OOP的三大核心特性 二、類與對象:OOP的基石 2.1 類(Class&#…

基于卷積神經網絡與小波變換的醫學圖像超分辨率算法復現

基于卷積神經網絡與小波變換的醫學圖像超分辨率算法復現 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家,覺得好請收藏。點擊跳轉到網站。 1. 引言 醫學圖像超分辨率技術在臨床診斷和治療規劃…

HCIP第一二章筆記整理

第一章:復習HCIA第一階段應用層:自然語言轉換為編碼表示層:編碼轉換為二進制介質訪問控制層:二進制轉化為信號物理層:傳輸電信號第二階段:OSI參考模型應用層:提供網絡服務表示層:對數…

《使用Qt Quick從零構建AI螺絲瑕疵檢測系統》——2. C++基礎:構建程序的堅實骨架

目錄一、概述1.1 背景介紹:從UI到邏輯1.2 學習模式:Qt控制臺應用二、C語法快速入門2.1 變量、數據類型與注釋2.2 函數與代碼封裝2.3 循環與容器:批量處理三、面向對象編程:封裝數據與行為四、Qt的核心擴展:信號與槽通信…

Navicat 遠程連接SQLlite數據庫

1、SQLlite數據庫是一個本地.db文件,默認不支持遠程連接; 2、Navicat 可以通過ntunnel_sqlite.php文件連接遠程SQLlite庫; 3、安裝Navicat,安裝完成,在安裝目錄下找到ntunnel_sqlite.php文件; 4、上傳當前文…

OpenCV用于計算光流的一個類cv::optflow::DualTVL1OpticalFlow

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 cv::optflow::DualTVL1OpticalFlow 是 OpenCV 中用于計算光流的一個類,特別地,它實現了基于雙幀 TV-L1(Total V…

PyQt5在Pycharm上的環境搭建 -- Qt Designer + Pyuic + Pyrcc組合,大幅提升GUI開發效率

軟件安裝 目標軟件: Python解釋器Pycharm編輯器 Python官網: 點擊訪問Python官網 Pycharm官網:點擊訪問Pycharm官網 環境搭建 搭建完成后最終的環境詳情: python安裝路徑:D:\ProgramEnviron\Python\Python311Pyth…

30天打牢數模基礎-卷積神經網絡講解

案例代碼實現一、代碼說明本案例使用PyTorch實現一個改進版LeNet-5模型,用于CIFAR-10數據集的圖像分類任務。代碼包含以下核心步驟:數據加載與預處理(含數據增強,劃分訓練/驗證/測試集);定義CNN網絡結構&am…

Dev-C++——winAPI貪吃蛇小游戲

🚀歡迎互三👉:霧狩 💎💎 🚀關注博主,后期持續更新系列文章 🚀如果有錯誤感謝請大家批評指出,及時修改 🚀感謝大家點贊👍收藏?評論? 今天水一篇吧…

【openbmc6】entity-manager

文章目錄 2.1 事件監聽:dbus在linux上使用的底層通信方式多半是unix domain socket ,事件的到來可被抽象為:socket上有數據,可讀 2.2 事件處理:由于主線程肯定有邏輯得跑,因此新開一個線程甚至多個線程專門用來監聽和處理事件,但存在多線程就意味著可能存在競爭,存在競…

Java 實現 UDP 多發多收通信

在網絡通信領域,UDP(用戶數據報協議)以其無連接、高效率的特點,在實時通信場景中占據重要地位。本文將結合一段實現 UDP 多發多收的 Java 代碼,詳細解析其實現邏輯,幫助開發者深入理解 UDP 通信的底層邏輯與…

Java學習第六十二部分——Git

目錄 一、關鍵概述 二、核心概念 三、常用命令 四、優勢因素 五、應用方案 六、使用建議 一、關鍵概述 提問:Git 是什么? 回答:一句話,分布式版本控制系統(DVCS),用來跟蹤文件&#…

CDN和DNS 在分布式系統中的作用

一、DNS:域名系統(Domain Name System) 1. 核心功能 DNS是互聯網的“地址簿”,負責將人類易記的域名(如www.baidu.com)解析為計算機可識別的IP地址(如180.101.50.242)。沒有DNS&…

uniapp用webview導入本地網頁,ios端打開頁面空白問題

目前還沒解決,DCloud官方也說不行 IOS下webview加載本地網頁時,無法加載資源 - DCloud問答

軟考 系統架構設計師系列知識點之面向服務架構設計理論與實踐(8)

接前一篇文章:軟考 系統架構設計師系列知識點之面向服務架構設計理論與實踐(7) 所屬章節: 第15章. 面向服務架構設計理論與實踐 第3節 SOA的參考架構 15.3 SOA的參考架構 IBM的Websphere業務集成參考架構(如圖15-2所示,以下簡稱參考架構)是典型的以服務為中心的企業集…

基于 Docker 及 Kubernetes 部署 vLLM:開啟機器學習模型服務的新篇章

在當今數字化浪潮中,機器學習模型的高效部署與管理成為眾多開發者和企業關注的焦點。vLLM 作為一款性能卓越的大型語言模型推理引擎,其在 Docker 及 Kubernetes 上的部署方式如何呢?本文將深入探討如何在 Docker 及 Kubernetes 集群中部署 vL…

工業互聯網六大安全挑戰的密碼“解法”

目錄 工業互聯網密碼技術應用Q&A Q1:設備身份認證與接入控制 Q2:通信數據加密與完整性保護 Q3:遠程安全訪問 Q4:平臺與數據安全 Q5:軟件與固件安全 Q6:日志審計與抗抵賴 首傳信安-解決方案 總…

基于springboot的在線問卷調查系統的設計與實現(源碼+論文)

一、開發環境 1 Java語言 Java語言是當今為止依然在編程語言行業具有生命力的常青樹之一。Java語言最原始的誕生,不僅僅是創造者感覺C語言在編程上面很麻煩,如果只是專注于業務邏輯的處理,會導致忽略了各種指針以及垃圾回收這些操作&#x…

民法學學習筆記(個人向) Part.1

民法學學習筆記(個人向) Part.1有關民法條文背后的事理、人心、經濟社會基礎;民法的結構民法學習的特色就是先學最難的民法總論,再學較難的物權法、合同法等,最后再學習最簡單的婚姻、繼承、侵權部分。這是一個由難到易的過程,尤為…