Object 類

来源:https://www.cnblogs.com/jtznenic/archive/2019/08/31/11440512.html
-Advertisement-
Play Games

[TOC] Object 類 一、clone 1. 完整形式 2. 此方法用來實現對象的複製,如果要調用這個方法,必須實現 介面和覆蓋 方法,還需要在使用克隆的時候處理 ,因為此異常是非運行時異常。 3. 預設的覆寫,只是 淺拷貝 ,也就是只拷貝 基本數據類型 ,而對於對象的引用數據類型,也只是複製 ...


目錄

Object 類

一、clone

  1. 完整形式

    protected native Object clone() throws CloneNotSupportedException
  2. 此方法用來實現對象的複製,如果要調用這個方法,必須實現 Cloneable 介面和覆蓋 clone() 方法,還需要在使用克隆的時候處理 CloneNotSupportedException,因為此異常是非運行時異常。

  3. 預設的覆寫,只是淺拷貝,也就是只拷貝基本數據類型,而對於對象的引用數據類型,也只是複製一份引用而已。如果想要實現深拷貝,就需要在覆寫的時候,將每一個引用數據類型進行克隆,但是這要求這些引用數據類型也都實現了 Clonable 介面。

    // 淺拷貝的重寫
    public class User implements Cloneable{
        private int id;
        private String name;
        private Date bir;
    
        @Override
        public Object clone() {
            User user = null;
            try {
                user = (User)super.clone();
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
            return user;
        }
        ...
    }
    // 深拷貝的重寫
    @Override
    public Object clone() {
        User user = null;
        try {
            user = (User)super.clone();
            user.setBir((Date)this.bir.clone());
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return user;
    }

想要實現完全的深拷貝是很難做到的,因為你不能保證每個引用數據類型都重寫了clone(),在實際應用中,也很少用的到。

二、finalize

  1. 完整形式

    protected void finalize() throws Throwable
  2. 此方法是用來釋放資源,在垃圾回收器回準備釋放該對象的資源時,會調用該方法。主要用在釋放資源時,執行一些清除操作。

三、getClass

  1. 完整形式

    public final Class<?> getClass()
  2. 此方法是返回該對象的運行時類對象。因為java是純面向對象語言,類型、屬性和方法都可以看作是一個對象,所以可以通過類對象可以進行反射的操作,也就是通過類型對象來獲取類的屬性、方法等。

四、hashCode

  1. 完整形式

    public int hashCode()
  2. 此方法是返回該對象hash碼值。不同的對象有不同的哈希碼值,所以在進行對象的比較中或相等判斷中要重寫此方法。以下是 Eclipse 預設重寫的方法:

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((bir == null) ? 0 : bir.hashCode());
        result = prime * result + id;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

五、equals

  1. 完整形式

    public boolean equals(Object obj)
  2. 此方法是用來判斷該對象與傳入的對象是否相同。而該對象預設的實現是比較兩個對象引用是否相等,那對於一些對象的判斷就不適用了,需要重寫此方法,以下是使用Eclipse 重寫的方法:

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (bir == null) {
            if (other.bir != null)
                return false;
        } else if (!bir.equals(other.bir))
            return false;
        if (id != other.id)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

六、toString

  1. 完整形式

    public String toString()
  2. 當該對象被列印時,會調用這個方法。它的預設輸出形式是 getClass().getName() + '@' + Integer.toHexString(hashCode())

七、wait

  1. 完整形式和它的重載方法

    public final void wait() throws InterruptedException
    public final void wait(long timeout) throws InterruptedException
    public final void wait(long timeout,int nanos)throws InterruptedException
  2. 此方法是令當前對象進入等待隊列,直到被 notifyAllnotify 喚醒或者被 interrupt 中斷。而帶參數的重載方法是超過指定時間就進入等待狀態,其中 timeout 單位是毫秒,nanos 單位是毫微秒。

八、notify/notifyAll

  1. 完整形式

    public final void notify()
    public final void notifyAll()
  2. notify 是喚醒在此對象監視器上等待的某個線程,而 notifyAll 是喚醒在此對象監視器上等待的所有線程。


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

-Advertisement-
Play Games
更多相關文章
  • 在類中定義__slot__屬性來限制實例的屬性欄位,在創建大量對象的場合可以減少記憶體占用。 創建大量對象是記憶體占用對比: 執行結果: Line # Mem usage Increment Line Contents 401 39.7 MiB 39.7 MiB @profile() 402 def m ...
  • 總想寫點什麼,沒想好,先占個坑位 ...
  • os模塊 1.os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑 2.os.chdir() 改變當前腳本工作目錄;相當於shell下cd 3.os.makedirs() 用於遞歸創建目錄,內部有兩個參數path、mode(許可權模式) 代碼執行前: 代碼執行後: 4.os. ...
  • 源碼說明:這套系統比淘小秘、淘小白、E速達、好多了他們還要電腦開機並掛著軟體才能自動發貨,而這套系統完全可以秒殺這一切。安裝之前說明,如果你沒有新浪賬號的話請註冊好新浪賬號,網站名稱LOGO自備。本程式不限制功能變數名稱,單用戶版本,支持sae、bae、虛擬主機等使用之後買家拍下付款到網站提取了貨,淘寶就自 ...
  • Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. ...
  • lambda表達式主要用於短小的回調函數。 形如: arg1[,arg2][,arg3][...]為參數列表。 expression表達式語句中不能出現多條語句。 lambda應用舉例: 計算最大值: 結果: 222 計算輸入的和: 結果: 232 ...
  • 題目傳送門 簡單分析一下題目,可以發現: 第一個數最小為123 第一個數最大為333,再大第三個數就是四位數了 所以可以這樣做: 然後我們可以將每個數的各個數位分離出來,再加到標記數組裡面: code: 另外,為了防止複製,我悄悄地在代碼中留了個小錯誤,能不能直接提交,就看你的啦! PS:如果發現了 ...
  • 一:代碼規範 參考 :https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/headers/# 1 . 頭文件 1.1. Self-contained 頭文件 頭文件應該能夠自給自足(self-cont ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...