學(xué)生視角帶你了解Java內(nèi)部類
一、內(nèi)部類介紹
1.定義:一個(gè)類內(nèi)部又嵌套了一個(gè)類,被嵌套的類就是內(nèi)部類(inner class),嵌套其他類的稱為外部類(outer class)。內(nèi)部類是類的五大成員之一(屬性、 方法、構(gòu)造器、代碼塊、內(nèi)部類)。
分類:

二、成員內(nèi)部類:
1、非靜態(tài)內(nèi)部類
說明:定義在成員位置中(方法或代碼塊外面),無static修飾。
1.可以直接訪問外部類的所有的成員
2.可以 添加任意權(quán)限修飾符
3.作用域,和其他成員一樣作用在整個(gè)外部類
package local_class;
public class localclass {//外部類
//屬性位置
private int n1=10;
class localN1{//局部類
public void output(){
//==1==.可以直接訪問外部類的所有的成員,包括私有
System.out.println("獲取私有成員"+n1);
}
}
//寫一個(gè)方法來創(chuàng)建局部類的一個(gè)實(shí)列
public void output(){
localN1 LocalN1 = new localN1();
LocalN1.output();
}
}
實(shí)現(xiàn):

2、靜態(tài)內(nèi)部類
**說明:**定義在成員位置中(方法或代碼塊外面),有或無static修飾。
1.可以直接訪問外部類的靜態(tài)的成員,不能訪問非靜態(tài)成員。

2.可以 添加任意權(quán)限修飾符
3.作用域,和其他成員一樣作用在整個(gè)外部類
代碼:
package local_class;
public class _static_localclass {//外部類
private int n1=10;
static int n2=20;
static public class localN2{//靜態(tài)局部類
public void output(){
//==1==.可以直接訪問外部類的所有的成員,包括私有
System.out.println("獲取_static_localclass私有成員"+n2);
//System.out.println(n1);
}
}
//寫一個(gè)方法來創(chuàng)建局部類的一個(gè)實(shí)列
public void output(){
localN2 LocalN2 = new localN2();
LocalN2.output();
}
}

成員內(nèi)部類:用法比較簡(jiǎn)單。
二、局部?jī)?nèi)部類:
說明:局部類是定義在外部類的方法內(nèi)或者代碼塊內(nèi)。
1.可以直接訪問外部類的所有的成員。
2.不能添加訪問修飾符,局部?jī)?nèi)部類的地位就是一個(gè)局部變量(所以可以用fianl修飾)。
3.作用域:作用在所定義的方法中或者代碼塊中。
4.訪問方式:局部?jī)?nèi)部類訪問外部外部類成員可以直接訪問。外部類訪問局部?jī)?nèi)部類,在外部類作用域內(nèi)先創(chuàng)建對(duì)象再訪問。
5.外部其他類不能訪問內(nèi)部類。
6.外部類成員與內(nèi)部類成員重名時(shí),默認(rèn)就近原則,如果想用外部類的話可以使用:外部類名.this.成員 。
例如:


2、有名的局部?jī)?nèi)部類
錯(cuò)誤代碼

正確代碼
package _inner_class;
public class Named_local_inner_class {//外部類
private int a1=1;
int a2=2;
private void fun(){
System.out.println("輸出了私有方法");
}
//第一種情況,在方法中
//第二種情況,在代碼塊中(我就不打代碼了和在方法中一樣的)
//此處以方法中為例。
public void output(){//方法
class inner_class{//局部?jī)?nèi)部類
//1.可以訪問外部類的所有成員
public void _output(){
System.out.println("a1="+a1);//訪問的私有成員
System.out.println("a2="+a2);
fun();
}
}
//只需要實(shí)例化就行了,然后調(diào)用這個(gè) output()方法。
//注意作用域
inner_class Inner_class=new inner_class();
Inner_class._output();
}//結(jié)束方法
}//外部類
調(diào)用

1、匿名局部?jī)?nèi)部類(重要)
1.本質(zhì)還是一個(gè)內(nèi)部類 就是一個(gè)類,該類沒有名字(其實(shí)有名字,只是我們看不見,系統(tǒng)分配)。
2.同時(shí)還是一個(gè)對(duì)象。 基本語法
new 類名或接口名(參數(shù)列表){
類體
};

調(diào)用匿名內(nèi)部類:

輸出

和有名的局部?jī)?nèi)部類的區(qū)分
1.A22對(duì)象只使用一次,以后不再使用時(shí)用匿名局部?jī)?nèi)部類。
2.A22的編譯類型和運(yùn)行類型是什么?(運(yùn)行類型其實(shí)就是匿名局部?jī)?nèi)部類,就是XXXXX.外部類名$1)
如圖:


最佳實(shí)踐:當(dāng)作參數(shù)直接傳遞,簡(jiǎn)介高效。
到此這篇關(guān)于學(xué)生視角帶你了解Java內(nèi)部類的文章就介紹到這了,更多相關(guān)Java 內(nèi)部類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java datetime數(shù)據(jù)類型去掉時(shí)分秒的案例詳解
在Java中,如果我們想要表示一個(gè)日期而不包括時(shí)間(時(shí)分秒),我們通常會(huì)使用java.time包中的LocalDate類,這篇文章主要介紹了java datetime數(shù)據(jù)類型去掉時(shí)分秒,需要的朋友可以參考下2024-06-06
詳解static 和 final 和 static final區(qū)別
這篇文章主要介紹了static 和 final 和 static final區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
創(chuàng)建一個(gè)Java的不可變對(duì)象
這篇文章主要介紹了創(chuàng)建一個(gè)Java的不可變對(duì)象,一個(gè)類的對(duì)象在通過構(gòu)造方法創(chuàng)建后如果狀態(tài)不會(huì)再被改變,那么它就是一個(gè)不可變(immutable)類。它的所有成員變量的賦值僅在構(gòu)造方法中完成,不會(huì)提供任何 setter 方法供外部類去修改,需要的朋友可以參考下2021-11-11
Maven在Windows中的配置以及IDE中的項(xiàng)目創(chuàng)建(圖文教程)
這篇文章主要介紹了Maven在Windows中的配置以及IDE中的項(xiàng)目創(chuàng)建(圖文教程),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
Spring Boot集成Druid數(shù)據(jù)庫(kù)連接池
這篇文章主要介紹了Spring Boot集成Druid數(shù)據(jù)庫(kù)連接池,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
SpringBoot中通過AOP整合日志文件的實(shí)現(xiàn)
本文主要介紹了SpringBoot中通過AOP整合日志文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
Java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)的示例代碼
泛型是JAVA重要的特性,使用泛型編程,可以使代碼復(fù)用率提高。本文將利用泛型實(shí)現(xiàn)簡(jiǎn)單的棧結(jié)構(gòu),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-08-08

