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