java開發(fā)中嵌套類的詳解及實例
java開發(fā)中嵌套類的詳解
在java語言規(guī)范里面,嵌套類(Nested Classes)定義是:
A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class that is not a nested class.
說的簡單一點,就是定義在類里面的類。一般把定義內(nèi)部類的外圍類成為包裝類(enclosing class)或者外部類
嵌套類分類
根據(jù)nested class定義的地方,可以分為member nested class,local nested class , anonymous nested class
- member nested class(成員嵌套類) :成員嵌套類 作為 enclosing class 的成員定義的,成員嵌套類有enclosing class屬性
- local nested class (局部嵌套類): 局部嵌套類定義在 enclosing class 的方法里面,局部嵌套類有enclosing class 屬性和enclosing method 屬性
- anonymous nested class(匿名嵌套類):匿名嵌套類沒有顯示的定義一個類,直接通過new 的方法創(chuàng)建類的實例。一般回調(diào)模式情況下使用的比較多
member nested class 可以使用public,private,protected訪問控制符,也可以用static,final關(guān)鍵字
local nested class 可以使用final關(guān)鍵字
anonymous nested class 不使用任何關(guān)鍵字和訪問控制符
來自Java編程思想:
如果不需要內(nèi)部類對象與外圍類對象之間有聯(lián)系,那么可以將內(nèi)部類聲明為static。這通常稱為嵌套類。要想理解static應用于內(nèi)部類時的含義,就必須記住,普通的內(nèi)部類對象隱式地保存了一個引用,指向創(chuàng)建它的外圍類對象。然而,當內(nèi)部類時static的時候,就不是這樣了。嵌套類意味著:
要創(chuàng)建嵌套類的對象,并不需要其外圍對象。
不能從嵌套類的對象中訪問非靜態(tài)的外圍類對象。
嵌套類與普通的內(nèi)部類還有一個區(qū)別。普通內(nèi)部類的字段與方法,只能放在類的外部層次上,所以普通的內(nèi)部類不能有static數(shù)據(jù)和static字段(這就是為什么單例設計模式中,內(nèi)部類為什么必須是靜態(tài)的原因了),也不能包含嵌套類,但是嵌套類可以包含所有這些東西!
下面是懶漢式單例模式的代碼:
package com.easyliu.staticinnerclass;
/**
* 懶漢式單例
* @author EasyLiu
*
*/
public class Singleton {
private Singleton() {
System.out.println("Singleton-init");
}
/**
*
* @author EasyLiu 嵌套類(靜態(tài)類)
*
*/
private static class SingletonHolder {
private final static Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
public static void main(String[] args) {
//測試Singleton會初始化幾次
Singleton.getInstance();
Singleton.getInstance();
Singleton.getInstance();
Singleton.getInstance();
Singleton.getInstance();
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
SpringCloud讀取Nacos配置中心報錯及遇到的坑:Could?not?resolve?placehold
這篇文章主要介紹了SpringCloud讀取Nacos配置中心報錯:Could?not?resolve?placeholder?‘xxx’?in?value?‘${xxx},本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
SpringBoot監(jiān)控模塊Actuator的用法詳解
Spring?Boot?Actuator?是?Spring?Boot?自帶的一個功能模塊,提供了一組已經(jīng)開箱即用的生產(chǎn)環(huán)境下常用的特性和服務,比如應用程序的健康檢查、信息暴露、度量收集、日志記錄等,本文將給大家詳細SpringBoot監(jiān)控模塊Actuator的用法2023-06-06

