十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
java開發(fā)中嵌套類的詳解
為卓尼等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及卓尼網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、卓尼網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
在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.
說的簡單一點(diǎn),就是定義在類里面的類。一般把定義內(nèi)部類的外圍類成為包裝類(enclosing class)或者外部類
嵌套類分類
根據(jù)nested class定義的地方,可以分為member nested class,local nested class , anonymous nested class
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應(yīng)用于內(nèi)部類時的含義,就必須記住,普通的內(nèi)部類對象隱式地保存了一個引用,指向創(chuàng)建它的外圍類對象。然而,當(dāng)內(nèi)部類時static的時候,就不是這樣了。嵌套類意味著:
要創(chuàng)建嵌套類的對象,并不需要其外圍對象。
不能從嵌套類的對象中訪問非靜態(tài)的外圍類對象。
嵌套類與普通的內(nèi)部類還有一個區(qū)別。普通內(nèi)部類的字段與方法,只能放在類的外部層次上,所以普通的內(nèi)部類不能有static數(shù)據(jù)和static字段(這就是為什么單例設(shè)計(jì)模式中,內(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(); } }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!