日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8、java中的内部类

發布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8、java中的内部类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

根據類定義時所在的位置不同可以將內部類分為四大類:成員內部類、方法內部類、靜態內部類、匿名內部類。

成員內部類

顧名思義成員內部類定義在外部類的成員變量位置,相當于外部類的一個成員。將成員內部類當成當前封裝類中的一個成員即可,容易理解,外部類中的任何屬性和方法在成員內部類中均可直接調用,成員內部類中的任何方法和屬性在封裝類中也均可使用,但是需要通過聲明內部類的實例,通過對象調用。并且內部類中不可使用static修飾變量和方法。代碼如下:

public class OutterTest{private int a = 5;public int b = 6;private void outFirst() {System.out.println("outFirst...");}//想要訪問內部類中的變量和方法則需使用內部類的實例InnerTest innerTest = new InnerTest();public void outSecond() {System.out.println("outSecond..."+innerTest.c);}//聲明一個和內部類中方法重名的方法public void overName() {System.out.println("overName...outter");}//聲明一個類作為OutterTest的成員,成員內部類class InnerTest{private int c = 1;public int d = 2;//編譯錯誤,成員內部類中不允許使用static來修飾屬性和方法//之所以叫做成員內部類,是因為作為外部封裝類的一個成員存在,成員內部類依賴于外部封裝類//當創建一個外部類對象時,就可以使用這個對象來創建多個內部類對象;如果在聲明要給外部類對象,還是可以繼續聲明多個內部類對象//如果在內部類中聲明一個static修飾的變量,也就是說內部類中的變量e是類變量,它并不依賴于內部類對象,并且它只能有一份//但是呢,每個外部類對象都可創建多個內部類(內部類依賴于外部類才存在),此時就會出現多個變量e,這就違反了java的語法static String e = "aa";//內部類使用外部類的變量和方法時直接訪問即可,不需聲明外部類實例private void innerFirst() {outFirst();System.out.println("innerFirst..."+a);}//調用重名方法//當時用內部類中的方法時,直接調用即可//當使用外部類中的方法時,可以使用 OutterTest.this.overName(); 來調用外部類方法public void innerSecond() {OutterTest.this.overName();System.out.println("innerSecond..."+b);}//聲明一個和外部類中方法重名的方法public void overName() {System.out.println("overName...innner");}} }----------------------------------------------------------------------------public class Test {public static void main(String[] args) {//先創建外部類的實例,才能創建內部類實例OutterTest.InnerTest innerTest = new OutterTest().new InnerTest();innerTest.innerSecond();innerTest.overName();} }

方法內部類

?在方法中定義一個類,用于輔助解決一些比較復雜的問題。可隨便使用外部類中的成員變量和方法。并且內部類中不可使用static修飾變量和方法。

/*** 方法內部類(局部內部類)* 在方法中定義一個類,用于輔助解決問題* @author chaizepeng**/ public class MethodOutterTest {private int b = 6;/*** 在此方法中定義一個類* @author chaizepeng**/public void outFirst(int code) {//聲明一個內部類,用來做一些復雜的操作,例如:求一下code的平方+成員變量b的值class InnerTest{private int flag; // private static int a;//同樣的不能用static修飾public void innerFirst() {flag = code * code + b;System.out.println(code+"的平方是:"+flag);}//同名方法public void overName() {System.out.println("overName...inner");}}//調用內部類中的方法InnerTest innerTest = new InnerTest();innerTest.innerFirst();overName();//這樣調用的是外部類的方法}//聲明一個和內部類中方法重名的方法public void overName() {System.out.println("overName...outter");}public static void main(String[] args) {MethodOutterTest methodOutterTest = new MethodOutterTest();methodOutterTest.outFirst(2);}}

靜態內部類

使用static關鍵字修飾的成員內部類就是靜態內部類,其他的內部類中不能使用static修飾,而靜態內部類可以,它只可以訪問外部類中static修飾過的屬性和方法,外部類可直接使用它的內部類方法,它不依賴于外部類的實例,可以向調用靜態方法似的直接調用靜態內部類中的靜態方法。

/*** 靜態內部類:使用static關鍵字修飾的成員內部類就是靜態內部類* @author chaizepeng**/ public class StaticOutterTest {private int a = 5;public int b = 6;private static int c = 5;public void outFirst() {InnerTest.innerFirst();System.out.println("outFirst...");}private static void outStaticFirst() {System.out.println("outStaticFirst...");}public void outSecond() {System.out.println("outSecond...");}//聲明靜態內部類static class InnerTest{private static int flag = 3;private static void innerFirst() { // outFirst();//調用非static方法是回報錯outStaticFirst();//可以直接調用static方法System.out.println(flag +"...innerFirst..."+c);//只可以訪問static類型的變量}}public static void main(String[] args) {StaticOutterTest.InnerTest.innerFirst();} }

匿名內部類

顧名思義,匿名內部類就是沒有名字的內部類,一般適用于swing處的控件監聽、線程的開啟、線程池的使用等。代碼如下

/*** 匿名內部類* @author chaizepeng**/ public class AnonOutterTest {//開啟一個線程public static void main(String[] args) {new Thread(new Runnable() {//只知道這個類實現了Runnable接口,但是叫什么不知道,這就是匿名的@Overridepublic void run() {System.out.println("-----------");}}).start();} }

總結

內部類不知可以使得業務實現更優雅,更重要的是它使得類更容易擴展,是對java單繼承機制的補充,每一個內部類都可以去繼承和實現接口而不必在乎外部類是否已經繼承了類,這使得擴展性進一步的提升。代碼如下:

public class ExtendOutterTest extends Exception{private static final long serialVersionUID = 1L;//這個方法用于自定義異常public ExtendOutterTest() {System.out.println("字符錯誤,不能為0");}//用于開啟線程//拋出異常public void run() throws ExtendOutterTest{Thread thread = new OneThreadInnerTest();thread.start();//這里也可以使用匿名內部類實現 // new Thread(new Runnable() { // // @Override // public void run() { // System.out.println("就是這么任性,我還能開啟一個線程..."); // // } // }).start();int flag = 0;if (flag == 0) {throw new ExtendOutterTest();}}//內部類用于開啟線程class OneThreadInnerTest extends Thread{@Overridepublic void run() {System.out.println("就是這么任性,我還能開啟一個線程...");}}public static void main(String[] args) {ExtendOutterTest outterTest = new ExtendOutterTest();try {outterTest.run();} catch (ExtendOutterTest e) {System.out.println("我不但可以開啟線程,還能捕捉異常");e.printStackTrace();}} }

?

總結

以上是生活随笔為你收集整理的8、java中的内部类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。