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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

匿名对象+内部类

發(fā)布時(shí)間:2023/12/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 匿名对象+内部类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

匿名對象

普通的類對象在使用時(shí)會定義一個(gè)類類型的變量,用來保存new出來的類所在的地址。而匿名類取消掉了這個(gè)變量,這個(gè)地址由編譯器來處理,并且在new出來之后,它占用的內(nèi)存會有JVM自動回收掉。后續(xù)無法再使用了。
例如

public class Student{ public void classBegin(){ System.out.println("good morning teacher!"); } } new Student().classBegin();

匿名對象最常用的方式是作為函數(shù)的參數(shù),比如上述的打印語句 "good morning teacher!" 它就是一個(gè)匿名對象,由于字符串是以對象的形式存儲的,所以這里實(shí)際上就是一個(gè)沒有使用對象引用的匿名對象。

當(dāng)然也可以將匿名對象作為函數(shù)的返回值。

內(nèi)部類

內(nèi)部類的種類:成員內(nèi)部類、靜態(tài)內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類

成員內(nèi)部類

java中允許在一個(gè)類中定義另一個(gè)類。例如

public class Car{ public class Engine{ } }

上述例子在Car這個(gè)類中定義了一個(gè)Engine類,那么Car就是外部類,而Engine就是內(nèi)部類。

使用內(nèi)部類需要注意:外部類是包含內(nèi)部類的,所以內(nèi)部類可以看到外部類的所有屬性和方法,包括private方法。但是反過來則不行;

使用內(nèi)部類主要有兩種方式:

  • 在外部類中使用內(nèi)部類的成員(間接使用)。這種方法一般是在外部類的方法中創(chuàng)建內(nèi)部類的對象,并調(diào)用對象的方法
  • 直接使用:根據(jù)上面的定義,可以這樣使用 `Car.Engine eng = new Car().new Engine()

局部內(nèi)部類

內(nèi)部類不光可以直接定義在外部類中作為成員內(nèi)部類,也可以定義在方法中,作為局部內(nèi)部類

局部內(nèi)部類也叫區(qū)域內(nèi)嵌類,局部內(nèi)部類與成員內(nèi)部類類似,不過,區(qū)域內(nèi)嵌類是定義在一個(gè)方法中的內(nèi)嵌類

主要特定有:

  • 局部內(nèi)部類只能在對應(yīng)方法中訪問,在方法外無效
  • 不能使用private,protected,public修飾符。
  • 不能包含靜態(tài)成員
  • 局部內(nèi)部類如果想要訪問方法中的局部變量時(shí),局部變量必須是常量。因?yàn)榫植孔兞繒r(shí)分配在棧中,而局部內(nèi)部類是分配在堆中的,有可能出現(xiàn)這樣的情況,外部類的方法執(zhí)行完了,內(nèi)存被回收了,但是局部內(nèi)部類可能還在,所以在訪問局部變量時(shí),做了一個(gè)拷貝將局部變量拷貝到局部內(nèi)部類所在的堆中。為了保證數(shù)據(jù)的完整性,所以這里被拷貝的變量不允許再做修改。
public class carShow(){ public void showCar(){ final float price = 10000000f; final String type = "奔馳"; class Car(){ public void show(){ System.out.println("這個(gè)車是" + type + ",售價(jià):" + price); } } } }

靜態(tài)內(nèi)部類

內(nèi)部類如果使用static聲明,則此內(nèi)部類就稱為靜態(tài)內(nèi)部類。它可以通過?外部類 . 內(nèi)部類?的方式來訪問。由于靜態(tài)內(nèi)部類是與對象無關(guān)的,在使用靜態(tài)類的成員時(shí)是不需要?jiǎng)?chuàng)建對象的。所以如果想要在靜態(tài)內(nèi)部類中來訪問外部類的成員變量,必須通過外部類的對象實(shí)例來訪問。

public class Company { String companyNam; static String country; static class Clear{ String name; public Clear() { } public Clear(String name) { super(); this.name = name; } public void work(String name){ String na = new Company().companyNam="聯(lián)想"; country="中國"; System.out.println(name+"為"+na+"打掃衛(wèi)生,該公司屬于"+country); } } }

匿名內(nèi)部類

如果一個(gè)內(nèi)部類在整個(gè)操作中只使用一次的話,就可以定義為匿名內(nèi)部類。匿名內(nèi)部類也就是沒有名字的內(nèi)部類,這是java為了方便我們編寫程序而設(shè)計(jì)的一個(gè)機(jī)制,因?yàn)橛袝r(shí)候有的內(nèi)部類只需要?jiǎng)?chuàng)建一個(gè)它的對象就可以了,以后再不會用到這個(gè)類,這時(shí)候使用匿名內(nèi)部類就比較合適。

匿名內(nèi)部類,一般都伴隨著接口一起使用比如

public interface USB{ public abstract void open(); public abstract void close(); } public class Demo{ public static void main(String[] args){ USB usb = new USB(){ public void open(){} public void close(){} } usb.open(); usb.close(); //使用匿名內(nèi)部類的匿名對象的方式 USB usb = new USB(){ public void open(){} public void close(){} }.open(); } }

轉(zhuǎn)載于:https://www.cnblogs.com/sy130908/p/11433015.html

總結(jié)

以上是生活随笔為你收集整理的匿名对象+内部类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。