Java基礎之instanceof和transient關鍵字用法

来源:https://www.cnblogs.com/Y-oung/archive/2018/05/30/9113323.html
-Advertisement-
Play Games

instanceof 用於檢測指定對象是否是某個類(本類、父類、子類、介面)的實例。Java中的instanceof也稱為類型比較運算符,因為它將類型與實例進行比較。 返回true或false。 如果對任何具有null值的變數應用instanceof運算符,則返回false。用法:Boolean r ...


instanceof

用於檢測指定對象是否是某個類(本類、父類、子類、介面)的實例。Java中的instanceof也稱為類型比較運算符,因為它將類型與實例進行比較。 返回true或false。 如果對任何具有null值的變數應用instanceof運算符,則返回false。用法:Boolean result = object instanceof class;

本類對象一定是本類的實例,如果本類有父類或介面,則此對象也是父類或介面的實例;如果本類有子類,則此對象不是子類的實例。如果父類對象引用子類的實例,則此對象是父類到子類之間的繼承鏈上所有類的實例。

例如:如果三個類存在以下繼承關係:C繼承B,B繼承A,即A<-B<-C,

對象 C c=new C();,則c instanceof C為true;c instanceof B為true;c instanceof A為true;

對象A a=new C();,則a instanceof C為true;a instanceof B為true;a instanceof A為true;

對象A a=new A();,則a instanceof C為false;a instanceof B為false;a instanceof A為true;

下麵是instanceof的常用用法:

boolean b1 = "Sting" instanceof Object;

b1為true 因為String是Object的子類

boolean b2 = new String() instanceof String;

b2為true

boolean b3 = new Object() instanceof String;

b3為false Object是父類

boolean b4 = 'A' instanceof Character;

編譯不通過 ‘A’在此處視為基本數據類型char,instanceof操作符只能用作對象的判斷

boolean b5 = null instanceof String;

b5為false 這是instanceof 特 有 的 規 則 : 若左操作數為null, 結果就直接返回false, 不再運算右操作數是什麼類。

boolean b6 = (String)null instanceof String;

b6為false 即使類型轉換還是個 null

boolean b7 = new Date() instanceof String;

編譯不通過 instanceof 操作符的左右操作數必須有繼承或實現關係,否則編譯出錯。

transient

此關鍵字用於指定一個變數不能被序列化。一個對象只要實現了Serializable介面,這個對象就可以被序列化。我們不必關心具體序列化的過程,只要這個類實現了Serilizable介面,這個類的所有屬性和方法都會自動序列化。然而在實際開發過程中,我們常常會遇到某個類的有些屬性需要序列化,而其他屬性不需要被序列化,這些不需要被序列化的變數就可以加上transient關鍵字。換句話說,這個欄位的生命周期僅存於調用者的記憶體中而不會寫到磁碟里持久化。

transient關鍵字為我們提供了便利,你只需要實現Serializable介面,將不需要序列化的屬性前添加關鍵字transient,序列化對象的時候,這個屬性就不會序列化到指定的目的地中。

一旦變數被transient修飾,變數將不再是對象持久化的一部分,該變數內容在序列化後無法獲得訪問。

transient關鍵字只能修飾變數,而不能修飾方法和類。註意,本地變數是不能被transient關鍵字修飾的。變數如果是用戶自定義類變數,則該類需要實現Serializable介面。

被transient關鍵字修飾的變數不再能被序列化,一個靜態變數不管是否被transient修飾,均不能被序列化。

被transient關鍵字修飾的變數某些情況也可以被序列化。在Java中,對象的序列化可以通過實現兩種介面來實現,若實現的是Serializable介面,則所有的序列化將會自動進行,若實現的是Externalizable介面,則沒有任何東西可以自動序列化,需要在writeExternal方法中進行手工指定所要序列化的變數,這與是否被transient修飾無關。

        轉載請註明出處 https://www.cnblogs.com/Y-oung/p/9113323.html

        工作、學習、交流或有任何疑問,請聯繫郵箱:[email protected]


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

-Advertisement-
Play Games
更多相關文章
  • 博客園是面向開發者的知識分享社區,不允許發佈任何推廣、廣告、政治方面的內容。 博客園首頁(即網站首頁)只能發佈原創的、高質量的、能讓讀者從中學到東西的內容。 如果博文質量不符合首頁要求,會被工作人員移出首頁,望理解。如有疑問,請聯繫[email protected]。 ...
  • 大家好,併發編程 進入第十章。好了,今天的內容其實還挺多的,我準備了三天,到今天才整理完畢。希望大家看完,有所收穫的,能給小明一個贊。這就是對小明最大的鼓勵了。為了更好地銜接這一節,我們先來回顧一下上一節的內容。 上一節「」,我們首先介紹了,如何創建一個協程對象.主要有兩種方法 通過async關鍵字 ...
  • 在瞭解完了 Python函數基礎篇 之後,本篇的存在其實是為了整合知識,由於該篇的知識是否雜亂,故大家可以通過點開點連接直接進入其詳細介紹,該篇主要大致的介紹一下幾個知識點: 一、Python的迭代器和生成器 二、Python的內置函數 三、Python的open函數之文件處理 四、Python的遞 ...
  • 1 flask script擴展庫 概念 : 是一個flask終端運行的解析器 ,因為項目完成以後,代碼改動會有風險,所以藉助終端完成不同啟動項的配置 安裝 使用 執行程式需要在啟動項輸入命令 2 Blueprint藍圖 概念 : Blueprint通過把實現不同功能的module分開,實現分類功能 ...
  • GOPATH設置 僅僅安裝好msi是不夠的,還需要配置一些東西:`GOPATH` Go從1.1版本到1.7必須設置這個變數,而且不能和Go的安裝目錄一樣。 這個目錄用來存放Go源碼,Go的可運行文件,以及相應的編譯之後的包文件。 所以這個目錄下麵有三個子目錄:src、bin、pkg 從go 1.8開... ...
  • 將網站根目錄配置到項目的web目錄 打開網站訪問的是web/index.php這時打開預設頁面 訪問一下其他頁面,發現瀏覽器地址的url攜帶了一個參數 http://www.test.com/index.php?r=site%2Fabout r=site/about,這是一個路由參數 site應該是 ...
  • 前言 近年,Spring Cloud儼然已經成為微服務開發的主流技術棧,在國內開發者社區非常火爆。我近年一直在一線互聯網公司(攜程,拍拍貸等)開展微服務架構實踐,根據我個人的一線實踐經驗和我平時對Spring Cloud的調研,我認為Spring Cloud技術棧中的有些組件離生產級開發尚有一定距離 ...
  • 最近完全被python的各種版本,安裝包,工具什麼的弄瘋了,感覺與python相關的東西太多了,一時間讓人分辨不出來到底什麼是乾什麼的。於是,我瘋狂的查閱各種資料,才逐漸慢慢理解了與python相關的各種工具和包。下麵,將我的困惑記錄下來,希望可以和有同樣煩惱的朋友分享! 1. conda、pip和 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...