Java面向對象進階第一天

来源:https://www.cnblogs.com/yaomagician/archive/2023/02/24/17153013.html
-Advertisement-
Play Games

面向對象高級第一天 static關鍵字 是靜態的意思,可以修飾成員變數,也可以修飾成員方法 成員變數的分類 靜態成員變數 有static修飾,屬於類,與類一起載入,記憶體中只有一份,可以被共用訪問。 什麼時候用呢?如果信息要被共用,只需要一份就用靜態成員變數,比如:系統線上人數。 訪問規則: 建議用類 ...


面向對象高級第一天

static關鍵字

是靜態的意思,可以修飾成員變數,也可以修飾成員方法

成員變數的分類

  1. 靜態成員變數

    • 有static修飾,屬於類,與類一起載入,記憶體中只有一份,可以被共用訪問。

    • 什麼時候用呢?如果信息要被共用,只需要一份就用靜態成員變數,比如:系統線上人數。

    • 訪問規則:

      建議用類名訪問:類名.靜態成員變數

      同一個類中,訪問靜態成員可以省略類名不寫。

      理論上也可以這樣訪問:對象名.靜態成員變數(不推薦)

  1. 實例成員變數

    • 無static修飾,屬於對象,每個對象中都存在一份實例成員變數。比如:name age

    • 什麼時候用呢?比如:name age,每個對象中都有這些信息,而且信息還不同時,定義成實例成員變數。

    • 訪問規則:

                    只能用:對象名.實例成員變數。

成員方法的分類

  1. 靜態成員方法

    • 有static修飾,屬於類,與類一起載入,可以被共用訪問。

    • 什麼時候用呢?如果是做一個通用功能,可以用靜態成員方法。

    • 訪問規則:

      建議用類名訪問:類名.靜態方法
      註意:同一個類中,訪問靜態成員可以省略類名不寫。
      理論上也可以這樣訪問:對象名.靜態成員方法(不推薦)
    • 靜態成員方法的應用:工具類

      是什麼? 工具類中都是靜態方法,為了完成一個共用功能
      好處:一次編寫,處處可調,提高代碼的復用性,提高開發的效率。
      註意:建議把工具類的構造器私有化,因為工具類無需對外創建對象,它的方法都是靜態方法,直接用類名訪問即可。
  2. 實例成員方法

    • 無static修飾,屬於對象,必須用對象觸發訪問。

    • 什麼時候用呢?如果這個方法屬於對象,而且要直接訪問對象的實例成員,則聲明成實例方法。

    • 訪問規則:

      只能用:對象名.實例成員方法。

static的應用知識

代碼塊

  • 是什麼? 類的5大成分(成員變數、成員方法、構造器、代碼塊、內部類)之一

  • 分類

    1. 靜態代碼塊:(重點瞭解一下)

      格式:static {}
      特點:屬於類,與類一起優先載入,自動觸發執行一次。
      作用:可以用於在程式啟動時,進行靜態資源的初始化操作
    2. 實例代碼塊(幾乎不用):

      格式:{}
      特點:屬於對象的,每次調用構造器構建對象前都會執行一次,再執行構造器。
      作用:可以用於初始化實例資源

單例設計模式

  • 單例是一種設計模式,是為瞭解決某個問題

  • 單例能解決的問題:保證一個類對外只能產生一個對象。

  • 重點在於如何實現單例:

    1. 餓漢單例

    • 特點:拿對象時,對象已經存在

    • 實現步驟:

      /**
      * 餓漢單例設計模式
      */
      public class SingleInstance {
         // 1.定義一個類,將構造器私有
         private SingleInstance() {}

         // 2.對外提供一個靜態對象
         // 餓漢單例是在獲取對象前,就已經準備好了一個對象
         // 這個對象只能通過類名訪問,所以定義成static的
         public static SingleInstance instance = new SingleInstance();
      }
    1. 懶漢單例

    • 特點:要拿對象的時候,才開始創建一個對象。

    • 實現步驟:

      /**
      * 懶漢單例設計模式
      */
      public class SingleInstance2 {
         // 2.定義一個靜態的成員變數負責存儲一個對象,只載入一次,只有一份。
         // 專業的做法是:這裡私有化,這樣可以避免給別人挖坑
         private static SingleInstance2 instance2;

         // 1.將構造器私有化
         private SingleInstance2() {}

         // 3.對外提供一個靜態的獲取對象的方法
         public static SingleInstance2 getInstance2() {
             if (instance2 == null) {
                 // 第一次來拿對象 :此時需要創建對象。
                 instance2 = new SingleInstance2();
            }
             return instance2;
        }
      }

面向對象的三大特征之二:繼承

繼承概述、使用繼承的好處

  • 什麼是繼承? Java允許一個類通過extends與另一個類建立父子關係,這就是繼承。

  • 繼承的格式:

    • 子類 extends 父類

  • 繼承的特點:

    • 子類繼承父類後,就可以得到父類的屬性和行為。

  • 繼承的核心優點:

    • 提高代碼的復用性,多個子類的相同代碼可以放在父類中,增強了類的擴展性。

繼承的設計規範、記憶體運行原理

  • 設計規範:子類共用屬性和行為放在父類,子類獨有屬性和行為放在子類自己那裡。

  • 記憶體原理:

    子類對象實際上是由子父類這兩張設計圖共同創建出來的。

繼承的特點

  1. Java是單繼承模式:一個類只能繼承一個直接父類。

  2. Java不支持多繼承、但是支持多層繼承。

  3. Java中所有的類都是Object類的子類。

繼承後:方法重寫

  • 概念:子類重寫了一個聲明與父類一樣的方法,覆蓋父類的方法。子類認為父類的該方法不好用,以後用自己重寫的方法。

  • 重寫方法建議加上一個重寫校驗註解:@Override

    • 作用:要求必須是正確重寫的才不報錯

    • 作用2:可讀性好

  • 重寫的要求:

    1. 重寫方法的名稱和形參列表必須與父類被重寫方法的名稱和形參列表一致(重點)

    2. 私有方法不能重寫

    3. 靜態方法不能重寫

    4. 重寫方法的許可權 >= 被重寫方法的訪問許可權。

  • 在重寫的方法中如果想要訪問父類的方法怎麼辦呢?

    • super.方法名();

繼承後:成員變數、成員方法的訪問特點

  1. 就近原則

  2. this.子類自己的成員變數

  3. 在子類方法中訪問父類成員怎麼辦? super.父類成員變數/父類成員方法

繼承後:子類構造器的特點

  • 特點:子類的全部構造器預設都會先訪問父類的無參數構造器,再執行自己的構造器

  • 為什麼呢? 先有爸爸才有兒子。 先調用父類的構造器初始化父類的數據,再調用自己的構造器初始化自己的數據。

  • 代碼層面:預設子類構造器的第一行都有一個super(), 訪問父類的無參數構造器,寫不寫都有

繼承後:子類構造器訪問父類有參構造器

  • 調用父類有參數構造器,初始化繼承自父類的數據。

  • super(....) 根據參數調用父類構造器

this、super使用總結

  • this訪問子類當前對象的成員。

  • super:在子類方法中指定訪問父類的成員。

  • this(...) : 訪問本類兄弟構造器

  • super(...):在本類構造器中指定訪問父類的構造器

  • 註意事項:super(...) 必須放在第一行,this(...) 也必須在第一行。因此2者不能共存一個構造器中。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 閱識風雲是華為雲信息大咖,擅長將複雜信息多元化呈現,其出品的一張圖(雲圖說)、深入淺出的博文(雲小課)或短視頻(雲視廳)總有一款能讓您快速上手華為雲。更多精彩內容請單擊此處。 摘要:Hue是一組WEB應用,用於和MRS大數據組件進行交互,能夠幫助用戶瀏覽HDFS,進行Hive查詢,啟動MapRedu ...
  • 前言: 關於ro.serialno這個屬性,相信大家都不陌生了,應用層的Build.getSerial(),Build.SERIAL等均是直接或間接的獲取了這個屬性值。接下來從boot到系統應用,小小的分析一下它的整個流程: 由於是APP經常使用,那我們從應用層分析到底層kernel/boot 一, ...
  • Xcode作為日常開發iOS程式的IDE,支持C、C++、Objective-C、Swift、Ruby等語言進行編寫。日常開發入口就是Xcode workspace或者Xcode project。 workspace是一個Xcode文檔,它將項目和其他文件、project分組。一個workspac... ...
  • 好家伙,本篇為《JS高級程式設計》第十章“函數”學習筆記 1.函數的三種定義方式:函數表達式、函數聲明及箭頭函數 函數聲明: function sum(a) { return a + 1; } 函數表達式: let sum= function(a){ return a + 1; } 箭頭函數: le ...
  • 概述 前端三要素 HTML(結構) :超文本標記語言(Hyper Text Markup Language) ,決定網頁的結構和內容 CSS(表現) :層疊樣式表(Cascading Style sheets) ,設定網頁的表現樣式 JavaScript (行為) :是一種弱類型腳本語言,其源代碼不 ...
  • React Native 的基礎是React, 是在 web 端非常流行的開源 UI 框架。要想掌握 React Native,先瞭解 React 框架本身是非常有幫助的。 一、什麼是React Native 1.1 React Native帶來的驚喜 React Native 是一個使用JavaS ...
  • 前言 在 JavaScript 中,apply、bind 和 call 是三個重要的函數,它們都是 Function.prototype 的方法。這些函數可以讓我們動態地改變函數的 this 值,或者傳遞參數來執行函數。本篇博客將詳細介紹 apply、bind 和 call 的使用方法以及它們之間的 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一.佈置全局組件 在我們開發的過程中,會碰到一個現象,就是在頁面裡面引入組件,總算要寫import,components才能引用,這裡給大家分享我們的一個解決方案 1.首先要建立一個components文件夾,用來放我們的所有組件 2.然 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...