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

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

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

2.可以 添加任意權限修飾符
3.作用域,和其他成員一樣作用在整個外部類
代碼:
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);
}
}
//寫一個方法來創(chuàng)建局部類的一個實列
public void output(){
localN2 LocalN2 = new localN2();
LocalN2.output();
}
}

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


2、有名的局部內部類
錯誤代碼

正確代碼
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{//局部內部類
//1.可以訪問外部類的所有成員
public void _output(){
System.out.println("a1="+a1);//訪問的私有成員
System.out.println("a2="+a2);
fun();
}
}
//只需要實例化就行了,然后調用這個 output()方法。
//注意作用域
inner_class Inner_class=new inner_class();
Inner_class._output();
}//結束方法
}//外部類
調用

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

調用匿名內部類:

輸出

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


最佳實踐:當作參數直接傳遞,簡介高效。
到此這篇關于學生視角帶你了解Java內部類的文章就介紹到這了,更多相關Java 內部類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot URL帶有特殊字符([]/{}等),報400錯誤的解決
這篇文章主要介紹了SpringBoot URL帶有特殊字符([]/{}等),報400錯誤的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Mac中IntelliJ IDEA 2019.1注冊過程分享
這篇文章主要介紹了Mac中IntelliJ IDEA 2019.1注冊過程,本文給大家分享到腳本之家平臺供大家學習,需要的朋友可以參考下2020-02-02
java父子節(jié)點parentid樹形結構數據的規(guī)整
這篇文章主要介紹了java父子節(jié)點parentid樹形結構數據的規(guī)整,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringBoot整合Minio實現(xiàn)上傳文件的完整步驟記錄
MinIO是一個基于Apache License v2.0開源協(xié)議的對象存儲服務,它兼容亞馬遜S3云存儲服務接口,非常適合于存儲大容量非結構化的數據,下面這篇文章主要給大家介紹了關于SpringBoot整合Minio實現(xiàn)上傳文件的完整步驟,需要的朋友可以參考下2022-05-05
java實現(xiàn)動態(tài)上傳多個文件并解決文件重名問題
這篇文章主要為大家詳細介紹了java實現(xiàn)動態(tài)上傳多個文件,并解決文件重名問題的方法,感興趣的小伙伴們可以參考一下2016-03-03

