java 嵌套调用_Java嵌套类的使用
嵌套類(lèi)是指被定義在另一個(gè)類(lèi)內(nèi)部的類(lèi),它為外部類(lèi)提供服務(wù)。嵌套類(lèi)分四種:靜態(tài)成員類(lèi)、非靜態(tài)成員類(lèi)、匿名類(lèi)和局部類(lèi)。
一、靜態(tài)成員類(lèi)與非靜態(tài)成員類(lèi)的區(qū)別?在什么情況下可以用靜態(tài)成員類(lèi)?
我們知道在類(lèi)的設(shè)計(jì)中,為了避免繼承破壞封裝性,組合優(yōu)于繼承。通過(guò)使用成員類(lèi)來(lái)實(shí)現(xiàn)組合設(shè)計(jì),需要足夠了解它們的特性以及在何時(shí)使用。
從表面上看,靜態(tài)成員類(lèi)只是比非靜態(tài)的成員類(lèi)在聲明上多出了修飾符static。盡管它們功能相似,但與實(shí)際上,非靜態(tài)成員類(lèi)的每個(gè)實(shí)例都隱含關(guān)聯(lián)著一個(gè)外部類(lèi)的實(shí)例。也就是說(shuō),非靜態(tài)成員類(lèi)不可能獨(dú)立于它的外部類(lèi)實(shí)例之外而獨(dú)立存在。
公有靜態(tài)成員類(lèi)可作為輔助類(lèi),如Compass類(lèi)中的枚舉Dir:
View Code
1 package com.mnid.innerclass;
2
3 public class Compass {
4 private Dir direction = Dir.SOUTH;
5
6 public static enum Dir {
7 EAST, SOUTH, WEST, NORTH;
8 }
9
10 public Dir directing() {
11 //Bulk of class omitted12 return direction;
13 }
14 }
使用私有的靜態(tài)成員類(lèi)常見(jiàn)方法是用來(lái)代表外圍類(lèi)所代表的對(duì)象的組件,如一個(gè)Map實(shí)例,它的內(nèi)部都有一個(gè)Entry對(duì)象對(duì)應(yīng)Map中的所有鍵-值對(duì),但Entry本身不需要訪問(wèn)Map,因此可以使用私有靜態(tài)成員類(lèi)設(shè)計(jì)。
非靜態(tài)成員類(lèi)實(shí)例都額外的對(duì)外部類(lèi)實(shí)例的引用會(huì)引起不必要的開(kāi)銷(xiāo)。如果成員類(lèi)不需要訪問(wèn)外部類(lèi)實(shí)例,就應(yīng)該將其聲明為static的。
二、匿名類(lèi)的限制和使用以及局部類(lèi)
匿名類(lèi)在聲明的同時(shí)就進(jìn)行實(shí)例化。它不是外部類(lèi)的成員,并且只有在非靜態(tài)環(huán)境中才有外圍實(shí)例引用。
匿名類(lèi)的常見(jiàn)用法是動(dòng)態(tài)創(chuàng)建函數(shù)對(duì)象:
View Code
1 public String fetchShortest(String[] strArray) {
2
3 Arrays.sort(strArray, new Comparator() {
4
5 @Override
6 public int compare(String s1, String s2) {
7 return s1.length() - s2.length();
8 }
9 });
10 return strArray[0];
11 }
其他常見(jiàn)用法包括創(chuàng)建過(guò)程對(duì)象,如Runable、Thread;在靜態(tài)工廠方法內(nèi)部也經(jīng)常用到。
局部類(lèi)可以在任何聲明局部變量的地方聲明,其特性與其他三種嵌套類(lèi)一樣。
聲明匿名類(lèi)和局部類(lèi)時(shí)需非常簡(jiǎn)短,以免影響可讀性。
總結(jié)
以上是生活随笔為你收集整理的java 嵌套调用_Java嵌套类的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python程序检查字符串是否是回文
- 下一篇: Java LocalDate类| isS