Java構造器與工廠模式(靜態工程方法)詳解

  • 1. 構造器

    • 1.1 構造器的核心意義

      • 1.1.1? 對象初始化

        • 構造器在創建對象 (new) 時自動調用, 用于初始化對象的狀態 (如設置字段初始值, 分配資源等)
          • 無構造器時:?字段為默認值(0/null/false
          • 有構造器:確保對象創建后即處于有效狀態

      • 1.1.2? 強制初始化

        • 通過有參構造器強制要求調用方必須提供必要參數, 避免對象狀態不完整?(如必須傳入用戶ID)。
      • 1.1.3? 代碼復用(重載機制)

        • 通過this()調用其他構造器,減少重復代碼(構造器重載時)。
      • 1.1.4? 封裝控制(支持不可變的對象設計)

        • 私有構造器可限制對象創建 (單例模式, 工具類禁止實例化)
    • 1.2 構造器的基礎語法

      • 代碼示例
      • public class Car {private String brand;private int price;//無參構造public Car() {this.brand = "UNknow";this.price = 0;}//有參構造1public Car(String brand, int price) {this.brand = brand;this.price = price;}//有參構造2public Car(String brand) {this.brand = brand;}
        }
        
    • 1.3 構造器的關鍵特性

      • a. 命名: 必須與類名完全相同
      • b. 無返回值: 不可聲名返回類型(連void都不行)
      • c. 自動調用: new 關鍵字自動調用
      • d. 默認構造器: 未顯式定義構造器時編譯器會自動生成一個無參構造器; 定義后則不會再生成
      • e. 支持重載: 可定義多個參數不同的構造器
    • 1.4 進階用法

      • 1.4.1 構造器鏈

        • 使用 (this) 關鍵字調用本類其他構造器(必須放在第一行)
        • 代碼示例:
        •  //有參構造1public Car(String brand, int price) {this.brand = brand;this.price = price;}//有參構造2public Car(String brand) {this(brand, 100000);//調用上面的雙參構造器}
      • 1.4.2 父類構造器調用

        • 子類構造器必須調用父類構造器(顯式或隱式)?使用??super(...) (必須第一行)
        • 1.4.2.1?可以不寫 super() 的情況:
          • 父類存在無參構造器時 (顯式定義或編譯器自動生成), 子類構造器會隱式調用super() ,?此時無需顯式寫出, 編譯器會自動在第一行插入super()? ? ? ?
          • class Parent {// 編譯器自動生成默認無參構造器:Parent() {}
            }class Child extends Parent {// 編譯器自動添加:super();public Child() {System.out.println("Child構造器");}
            }
        • 1.4.2.2?必須寫 super() 的情況?
          • a. 父類沒有無參構造器
            • 若父類定義了有參構造器且未定義無參構造器時, 編譯器不會生成默認無參構造器
            • 子類必須顯式調用父類的某個帶參構造器,否則編譯報錯。

          • b. 父類構造器有重載時需要明確指定
            • 若父類有多個構造器, 子類需要通過 super()? 來選擇調用哪一個
            • class ElectricCar extends Car{private int battery;public ElectricCar(String brand , int price , int battery){super(brand ,price);//先初始化父類(調用父類構造器)this.battery=battery;}
              }class GasCar extends Car{private int gas;public GasCar (String brand , int price , int gas){super(brand);this.gas=gas;}
              }
        • 1.4.2.3 特殊規則
          • 1.?this()?和?super()?不能共存
            • a.?若子類構造器第一行用this(...)調用本類其他構造器,則不能再寫super()
            • b.?被調用的本類構造器最終仍需調用super(...)
            • class GasCar extends Car {private int gas;public GasCar() {this(100);//// 調用GasCar類的其他構造器}public GasCar(int gas) {super("車車");}
              }
          • 2.?繼承鏈的頂端是?Object
            • 所有類的終極父類是Object,其有無參構造器Object(),因此最頂層的super()調用總是安全的
      • 1.4.3?私有構造器應用場景

        • 1.4.3.1 單例模式: 全局唯一實例
          • public class Parents {private static final Parents Child = new Parents();//創建全局唯一實例private Parents(){// 私有構造器}public static Parents getInstance(){return Child;//返回唯一的實例}
            }
            
        • 1.4.3.2 工具類: 禁止實例化 (Math類等)
          • public class StringUtils {private StringUtils() {} // 防止 new StringUtils()public static boolean isEmpty(String s) { ... }
            }
      • 1.4.4 初始化順序

        • 對象創建時的執行順序:
        • 父類靜態塊 -> 子類靜態塊 -> 父類字段初始化 -> 父類構造器 -> 子類字段初始化 -> 子類構造器
    • 1.5 常見問題

      • Q:?為什么構造器不能有返回值?
        • ???????A:?構造器隱含返回新對象,聲明返回值會導致編譯器將其視為普通方法。
      • Q:?構造器能被static/final修飾嗎?
        • ???????A: 不能!?構造器屬于對象初始化機制,與類級別(static)和繼承(final)無關。
      • Q:?子類如何調用父類帶參構造器?
        • ???????A: 通過super() 顯式調用, 否則編譯器會自動調用父類的無參構造器
  • 2. 靜態工廠方法

  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s
  • s

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

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

相關文章

解決jdk初始化運行,防火墻通信選錯專業網絡問題

問題描述新項目添加不同版本的jdk,運行時提示防火墻通信策略,選成專用網絡。其他人訪問后端接口時,提示連接失敗。 解決方案:1、在搜索欄中輸入 防火墻關鍵字,選擇到防火墻和網絡保護2、選擇允許應用通過防火墻3、先點…

【Linux】常用命令(三)

【Linux】常用命令(三)1. export1.1 原理1.2 常用語法1.3 示例1.4 書中對命令的解釋1.5 生效范圍2. 測試服務地址與其端口能否訪問2.1 nc(Netcat)命令2.2 telnet2.3 nmap2.4 curl命令 (適用于HTTP/HTTPS 服務)1. export export 是 Linux Shell&#xff…

Pytest項目_day15(yaml)

YAMLYAML是一個對所有編程語言都很友好的數據序列化標準,它是一種直觀的能夠被電腦識別的數據序列化格式,是一種可讀性高且容易被人類閱讀的腳本語言YAML語言的本質是一種通用的數據串行化格式適用場景 可以直接序列化為數組、字典解析成本低專門寫配置文…

審批流程系統設計與實現:狀態驅動、靈活擴展的企業級解決方案

審批流程系統設計與實現:狀態驅動、靈活擴展的企業級解決方案 本文基于實際企業級審批系統源碼,深入解析如何設計高擴展性、強一致性的審批流程引擎,涵蓋狀態機設計、多租戶隔離、文件服務集成等核心實現。 1. 系統設計概覽 審批系統的核心架…

汽車免拆診斷案例 | 2010款奧迪A4L車行駛中發動機偶爾自動熄火

故障現象 一輛2010款奧迪A4L車,搭載CDZ發動機 ,累計行駛里程約為18.2萬km。該車行駛中發動機偶爾自動熄火,有時熄火后能夠立即重新起動著機,有時需要等待一會兒才能重新起動著機,故障頻率較低。因該故障在其他維修廠陸…

Liam ERD:自動生成美觀的交互式實體關系圖

Liam ERD 是一個可以快速生成美觀且具有交互性的數據庫實體關系圖(ERD)的工具,可以幫助用戶實現復雜數據庫結構的可視化。 Liam ERD 是一個免費開源的項目,代碼托管在 GitHub: https://github.com/liam-hq/liam 功能…

網絡協議序列化工具Protobuf

目錄前言一、下載注意二、解壓安裝三、Protobuf的使用1、創建.proto文件2、利用protoc編譯.proto文件前言 Protocol Buffers是Google的?種語??關、平臺?關、可擴展的序列化結構數據的?法,它可?于(數據)通信協議、數據存儲等。 Protoco…

從表單校驗到API網關:全鏈路輸入安全防護指南

從表單校驗到 API 網關:全鏈路輸入安全防護指南 在軟件系統的安全防御體系中,輸入安全是第一道防線,而這道防線的堅固程度直接決定了系統抵御外部攻擊的能力。從用戶在瀏覽器中填寫表單的那一刻起,到數據經過 API 網關流轉至后端服務,每一個環節都可能成為輸入攻擊的突破…

Flask vs Django:微框架與一站式對決

Flask 簡介 1、簡介 Flask誕生于2010年,是Armin ronacher用Python語言基于Werkzeug工具箱編寫的輕量級Web開發框架,又稱之為微框架。 "微"的含義:Flask旨在保持核心簡潔,本身相當于內核,其他功能需通過擴展…

真實業務場景:mysql慢查詢優化(從17秒的查詢優化到700毫秒)

慢查詢業務場景:原先在我們系統中要統計一些人員的單位 部門信息的數據情況,比如總的男女人數,每個單位下的男女人數等等,然后原來的sql是這樣寫的 根據一個單位的id 然后對一張表做出多個子查詢進行查詢,這時候統計記錄 由于加載…

遠程影音訪問:通過 cpolar 內網穿透服務使用 LibreTV

文章目錄前言【視頻教程】1.關于LibreTV2.docker部署LibreTV3.簡單使用LibreTV4.安裝cpolar內網穿透5.配置ward公網地址6.配置固定公網地址總結LibreTV 與 cpolar 的協同應用,為用戶打造了一條通往高清觀影自由的便捷之路。通過這一方案,用戶不僅擺脫了商…

Apache ECharts 6 核心技術解密 – Vue3企業級可視化實戰指南

簡介 ECharts 是百度開源的一個使用 JavaScript 實現的開源可視化庫,它能夠生動、可交互地展示數據。在 Vue3 項目中集成 ECharts 可以讓你的項目更加直觀和動態地呈現數據信息。 核心優勢 特性SVG渲染器Canvas渲染器縮放保真度★★★★★★★☆☆☆動態交互性能…

考公VS考研,拼哪個性價比高?

即將到來下半年,將迎來考公和考研是兩個非常重要的考試,也是許多年輕人為之奮斗的目標。無論是獲得一份穩定的“鐵飯碗”,還是提升學歷學位獲得更高的競爭力,都是值得努力的方向。那么,考公vs考研,到底哪個…

python2操作neo4j

環境依賴 jdk、neo4j圖數據庫 操作一條數據完整demo import os,json,sys,io from py2neo import Graph,Nodetry:sys.stdout io.TextIOWrapper(sys.stdout.buffer, encodingutf-8)sys.stderr io.TextIOWrapper(sys.stderr.buffer, encodingutf-8) except Exception:passcla…

AI 編程實踐:用 Trae 快速開發 HTML 貪吃蛇游戲

1. 背景與目標 貪吃蛇是最適合入門的 2D 網頁小游戲之一:規則簡單、反饋清晰、可擴展空間大(穿墻模式、道具、多食物、排行榜……)。 demo地址:https://game.haiyong.site/snake-game.html 本項目的目標是: 純前端、…

FreeRTOS-C語言指針筆記

文章目錄一級指針指針基本概念指針使用示例代碼說明二、二級指針二級指針重點解析一級指針 C語言中的指針是一個非常重要的概念,它存儲了變量的內存地址。指針的使用可以使程序更加高效,尤其在處理數組、字符串和動態內存分配時。 指針基本概念 指針變…

界面布局智能建議生成:從功能需求到專業UI的AI加速之路

內容簡介: 傳統界面設計讓產品經理陷入"不懂設計、等設計師"的困境,效率低下還容易被挑刺。本文深度解析DeepSeek驅動的界面布局智能生成技術,通過DESIGN框架提示詞模板,讓產品經理在30分鐘內生成3種專業級界面方案,實現…

【BLE系列-第三篇】數據鏈路層(LL):廣播/連接/掃描流程詳解

目錄 引言 一、廣播及連接建立 1.1 廣播類型 1.2 掃描/連接請求與響應 1.2.1 廣播流程說明 1.2.1.1 廣播流程示例圖 1.2.1.2 廣播信息設置 1.2.1.3 信道廣播 1.2.1.4 信道切換 1.2.1.5 廣播間隔 1.2.1.6 接收窗口與理論最小傳輸時間 1.2.2 掃描/連接流程說明 1.2.…

JMeter 測試 WebSocket 接口的詳細教程

1. 安裝 WebSocket 插件 方法一:通過 Plugins Manager 下載并安裝 JMeter Plugins Manager在 JMeter 中:Options → Plugins Manager搜索 WebSocket 并安裝 方法二:手動安裝 下載 jmeter-websocket-samplers 插件將 jar 文件放到 JMeter/…

飛算JavaAI智慧教育場景實踐:從個性化學習到教學管理的全鏈路技術革新

目錄一、智慧教育核心場景的技術突破1.1 個性化學習路徑推薦系統1.1.1 學習者能力建模與評估1.2 智能教學管理系統1.2.1 自動化作業批改與學情分析1.3 教育資源智能管理系統1.3.1 教育資源智能標簽與推薦二、智慧教育系統效能升級實踐2.1 教育數據中臺構建2.1.1 教育數據整合與…