【java11】java11新特性之嵌套類

Java 11在嵌套類方面主要關注的是通過JEP 181來改進訪問控制,解決之前版本中存在的權限不一致問題。

下面先來看下嵌套類的使用:

靜態嵌套類(Static Nested Class)

  • 定義:靜態嵌套類(也稱為靜態內部類)是定義在另一個類中的類,并且使用static關鍵字修飾。
  • 訪問權限:靜態嵌套類只能訪問外部類的靜態成員(靜態變量、靜態方法和靜態嵌套類),不能訪問外部類的非靜態成員。
  • 實例化:靜態嵌套類不需要外部類對象即可實例化,可以直接通過類名來創建實例。
  • 用途:靜態嵌套類通常用于組織工具類、輔助類等與外部類緊密相關的類,但不依賴于外部類的非靜態狀態。

靜態嵌套類使用static關鍵字修飾,可以獨立于外部類實例使用。由于它是靜態的,因此不能直接訪問外部類的非靜態成員。

package com.morris.java11;/*** 靜態嵌套類(Static Nested Class)的使用*/
public class StaticNestedClassDemo {// 靜態嵌套類public static class StaticNestedClass {public void display() {System.out.println("Inside static nested class");}}public static void main(String[] args) {// 創建靜態嵌套類的實例StaticNestedClassDemo.StaticNestedClass nested = new StaticNestedClassDemo.StaticNestedClass();nested.display();}
}

內部類(Inner Class)

  • 定義:內部類(也稱為非靜態嵌套類)是定義在另一個類中的類,不使用static關鍵字修飾。
  • 訪問權限:內部類可以訪問外部類的所有成員(靜態和非靜態成員),包括私有成員。
  • 實例化:內部類需要外部類對象才能實例化,通常通過外部類對象來創建內部類實例,或者在內部類中通過this或外部類名.this來引用外部類對象。
  • 用途:內部類常用于實現回調、監聽器、閉包等需要訪問外部類狀態的場景,也可以用于組織緊密相關的類,提高代碼封裝性。

非靜態嵌套類(內部類)沒有使用 static 修飾,需要通過外部類的實例來創建。它可以直接訪問外部類的所有成員,包括私有成員。

package com.morris.java11;/*** 內部類(Inner Class)的使用*/
public class InnerClassDemo {private String outerField = "Outer field value";// 內部類public class InnerClass {public void display() {System.out.println("Inside inner class");System.out.println("Accessing outer class field: " + outerField);}}public static void main(String[] args) {InnerClassDemo outer = new InnerClassDemo();// 創建內部類的實例InnerClassDemo.InnerClass inner = outer.new InnerClass();inner.display();}
}

匿名內部類(Anonymous Inner Class)

匿名內部類是內部類的一種特殊形式,它沒有類名,通常在實現接口或繼承類時直接定義在方法內部。匿名內部類通常用于一次性的操作,比如創建一個線程或實現某個接口時。

匿名類是沒有名字的局部類,通常用于實現接口或繼承類的臨時實例。

package com.morris.java11;/*** 匿名內部類(Anonymous Inner Class)的使用*/
public class AnonymousInnerClass {private String outerField = "Outer field value";public void methodWithAnonymousClass() {// 匿名類實現接口Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("Inside anonymous class");System.out.println("Accessing outer class field: " + outerField);}};runnable.run();}public static void main(String[] args) {AnonymousInnerClass outer = new AnonymousInnerClass();outer.methodWithAnonymousClass();}
}

局部內部類(Local Inner Class)

局部內部類定義在外部類的方法內部,它的作用域僅限于該方法。局部內部類只能訪問該方法中的final局部變量(從Java 8開始,這個限制放寬了,但局部變量必須是事實上不可變的)。

局部類是在方法、構造器或作用域內部定義的類。它只能在定義它的作用域中使用。

package com.morris.java11;/*** 局部內部類Local Inner Class的使用*/
public class LocalInnerClassDemo {private String outerField = "Outer field value";public void methodWithLocalClass() {// 局部內部類class LocalClass {public void display() {System.out.println("Inside local class");System.out.println("Accessing outer class field: " + outerField);}}LocalClass local = new LocalClass();local.display();}public static void main(String[] args) {LocalInnerClassDemo outer = new LocalInnerClassDemo();outer.methodWithLocalClass();}
}

嵌套類API的使用

Class.isNestmateOf()用于確定一個類是否是另一個類的嵌套成員或與其在同一嵌套類中。

Class.getNestHost()用于獲取嵌套類的宿主類(nest host)。

package com.morris.java11;import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;/*** 嵌套類API的使用*/
public class NestClassApiDemo {public static void main(String[] args) {boolean isNestMate = NestClassApiDemo.class.isNestmateOf(NestClassApiDemo.Inner.class);boolean nestHost = NestClassApiDemo.Inner.class.getNestHost() == NestClassApiDemo.class;System.out.println(isNestMate); // trueSystem.out.println(nestHost); // trueSet<String> nestedMembers = Arrays.stream(NestClassApiDemo.Inner.class.getNestMembers()).map(Class::getName).collect(Collectors.toSet());System.out.println(nestedMembers); // [com.morris.java11.NestClassApiDemo, com.morris.java11.NestClassApiDemo$Inner]}public static class Inner{}
}

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

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

相關文章

X-Caps

用于對視覺屬性進行編碼的膠囊 補充信息 數據集太大&#xff0c;不建議復現

【西瓜書】4.決策樹

1 遞歸返回情況 &#xff08;1&#xff09;結點包含樣本全為同一類別 &#xff08;2&#xff09;屬性集為空&#xff0c;沒有屬性可供劃分了 或 有屬性&#xff0c;但是在屬性上劃分的結果都一樣 &#xff08;3&#xff09;結點為空結點 **結束時判定該結點的類別遵循如下規則&…

『哈哥贈書 - 54期』-『架構思維:從程序員到CTO』

文章目錄 ?? 架構思維&#xff1a;從程序員到CTO?? 本書簡介?? 作者簡介?? 編輯推薦?? 不想成為架構師的程序員不是好CTO 在程序員的職業規劃中&#xff0c;成為軟件架構師是一個非常有吸引力的選擇。但是對于如何才能成為一名架構師&#xff0c;不少同學認為只要代碼…

python大作業:實現的簡易股票簡易系統(含源碼、說明和運行截圖)

實現一個簡單的股票交易模擬系統。該系統將包括以下幾個部分: 數據處理:從CSV文件中讀取股票數據。 股票交易算法:實現一個簡單的交易策略。 命令行界面(CLI):允許用戶查看股票數據和進行交易。 數據持久化:將用戶的交易記錄和當前資金存儲在數據庫中。 為了簡化這個示例…

uniadmin引入iconfont報錯

當在uniadmin中引入iconfont后&#xff0c;出現錯誤&#xff1a; [plugin:vite:css] [postcss] Cannot find module ‘E:/UniAdmin/uniAdmin/static/fonts/iconfont.woff2?t1673083050786’ from ‘E:\UniAdmin\uniAdmin\static\fonts\iconfont.css’ 這是需要更改為絕對路徑…

王炸級產品:字節跳動的Seed-TTS

在人工智能的快速發展中&#xff0c;文本到語音&#xff08;TTS&#xff09;技術已成為連接數字世界與人類溝通的重要橋梁。而字節跳動推出的Seed-TTS模型&#xff0c;無疑是這一領域的一個突破性進展&#xff0c;它以其卓越的性能和高度的自然度&#xff0c;被譽為TTS模型中的…

4句話學習-k8s節點是如何注冊到k8s集群并且kubelet拿到k8s證書的

一、kubelet拿著CSR&#xff08;簽名請求&#xff09;使用的是Bootstrap token 二、ControllerManager有一個組件叫CSRAppprovingController&#xff0c;專門來Watch有沒有人來使用我這個api. 三、看到有人拿著Bootstrap token的CSR來簽名請求了&#xff0c;CSRAppprovingContr…

排序---快速排序的4次優化

前言 個人小記 一、代碼 #include<stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_ARR 10000000 #define SCOPE 16 #define swap(a,b)\ {\__typeof(a) __ca;\ab,b__c;\ } #define TEST(func,arr,l,r)\ {\printf(&…

父組件調用子組件方法(組合式 API版)

在 Vue 3 中&#xff0c;defineExpose 是一個用于在組合式 API (Composition API) 中暴露組件內部方法或屬性的函數。它允許父組件通過 ref 引用子組件實例&#xff0c;并調用子組件暴露的方法或訪問其屬性。 以下是子組件和父組件如何使用 defineExpose 和 ref 的詳細解釋和示…

如何快速分析并將一個簡單的前后端分離項目跑起來

一、前言 主要是前一段時間有小伙伴問我說自己剛入坑學后端不久&#xff0c;在開源網站上找了個簡單的前后端分離項目&#xff0c;但是自己不會跑起來&#xff0c;讓我給他說說&#xff0c;介于這玩意三兩句話不是很好說清楚&#xff0c;而且不清楚那個小伙伴的知識到何種地步…

規則引擎LiteFlow發布v2.12.1版本,決策路由特性

個人博客&#xff1a;無奈何楊&#xff08;wnhyang&#xff09; 個人語雀&#xff1a;wnhyang 共享語雀&#xff1a;在線知識共享 Github&#xff1a;wnhyang - Overview 簡介 標題其實是不準確的&#xff0c;了解過的會知道在LiteFlow的2.12.0已經有了決策路由的特性&…

【TB作品】MSP430 G2553 單片機口袋板,讀取單片機P1.4電壓顯示,ADC,電壓表

功能 讀取P1.4電壓&#xff0c;顯示到口袋板顯示屏&#xff0c;電壓越高亮燈越多。 部分程序 while (1){ADC10CTL0 | ENC ADC10SC; // Sampling and conversion startLPM0;adcvalue ADC10MEM; //原始數據 0到1023adtest (float) adcvalue / 1024.…

【算法訓練 day48 零錢兌換、完全平方數】

目錄 一、零錢兌換-LeetCode 322思路實現代碼問題總結 二、完全平方數-LeetCode 279思路實現代碼問題總結 一、零錢兌換-LeetCode 322 Leecode鏈接: leetcode 322 文章鏈接: 代碼隨想錄 視頻鏈接: B站 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及…

每一個企業,都值得擁有自己專屬的AI大模型!

前言 在數字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;已不再是遙不可及的科幻概念&#xff0c;而是成為了企業創新、轉型、升級的必備工具。尤其是AI大模型&#xff0c;憑借其強大的數據處理能力和深度學習能力&#xff0c;正在為企業帶來前所未有…

【2024最新華為OD-C/D卷試題匯總】[支持在線評測] 字符串序列判定(100分) - 三語言AC題解(Python/Java/Cpp)

?? 大家好這里是清隆學長 ,一枚熱愛算法的程序員 ? 本系列打算持續跟新華為OD-C/D卷的三語言AC題解 ?? ACM銀牌??| 多次AK大廠筆試 | 編程一對一輔導 ?? 感謝大家的訂閱? 和 喜歡?? ??在線評測鏈接 字符串序列判定(100分) ?? 評測功能需要訂閱專欄后私信聯系…

Leetcode:四數之和

題目鏈接&#xff1a;18. 四數之和 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;排序 雙指針&#xff09; 主旨&#xff1a;類似于三數之和的解法&#xff0c;但需要多加一些限制&#xff0c;同時為了防止多個數組元素的相加之和出現整型溢出問題還要將整型…

基于python可伸縮JSON格式列表實現

對于消息體為一個json格式列表&#xff0c;列表長度變化的代碼設計&#xff0c;如下實現可供參考。 1、python語言實現(直接取值) #codingutf-8n 2 # 行項目數 productCode [11111,222222,333333] unit [H06,H07,H08] qty [6,7,8] items []for i in range(0, n):item …

數據分析每周挑戰——心衰患者特征數據集

這是一篇關于醫學數據的數據分析&#xff0c;但是這個數據集數據不是很多。 背景描述 本數據集包含了多個與心力衰竭相關的特征&#xff0c;用于分析和預測患者心力衰竭發作的風險。數據集涵蓋了從40歲到95歲不等年齡的患者群體&#xff0c;提供了廣泛的生理和生活方式指標&a…

spring事務實現原理

Spring事務的實現原理主要是基于AOP&#xff08;面向切面編程&#xff09; 事務的開啟與提交/回滾 開啟事務&#xff1a;當Spring容器中的AOP代理檢測到一個匹配的切點方法被調用時&#xff0c;它會首先開啟一個新的事務或者加入到現有的事務中&#xff08;這取決于事務傳播行…

【讀腦儀game】

讀腦儀&#xff08;Brain-Computer Interface&#xff0c;BCI&#xff09;游戲是一種利用腦電信號來控制游戲的新型交互方式。這類游戲通常需要專業的硬件設備來讀取用戶的腦電信號&#xff0c;并將這些信號轉化為游戲中的控制信號。編寫這樣的游戲代碼涉及到多個方面&#xff…