欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單談談java中匿名內(nèi)部類構(gòu)造函數(shù)

 更新時間:2015年11月08日 09:37:54   投稿:hebedich  
這篇文章主要簡單給我們介紹了java中匿名內(nèi)部類構(gòu)造函數(shù),并附上了簡單的示例,有需要的小伙伴可以參考下。

先看看下面的代碼能不能編譯通過:

public static void main(String[] args) {
List l1 = new ArrayList();
List l2 = new ArrayList(){};
List l3 = new ArrayList(){{}};
System.out.println(l1.getClass() == l2.getClass() );
System.out.println(l2.getClass() == l3.getClass() );
System.out.println(l1.getClass() == l3.getClass() );
}

答案是能通過編譯,輸出3個false。l1很容易理解,就是聲明了一個

ArrayList對象,那么l2、l3是什么呢?

l2是一個匿名類內(nèi)部類對象,繼承ArrayList;

l3語句有些古怪,帶了兩個大括號,其實我們這樣寫就會明白了,這也是一個匿名內(nèi)部類的定義,它的代碼類似如下:

class Sub extends ArrayList {
{
//初始化代碼塊
}
}
List l3 = new Sub();

看到了吧,就是多了一個初始化代碼塊而已,起到構(gòu)造函數(shù)的功能。當然一個類中的構(gòu)造代碼塊可以有多個,下面的代碼是可以編譯的:

List l4 = new ArrayList(){{}{}{}};

匿名內(nèi)部類雖然可以用一個初始化代碼塊來充當構(gòu)造函數(shù),但其構(gòu)造函數(shù)還是進行了特殊的處理,它在初始化時直接調(diào)用父類的同參構(gòu)造函數(shù),然后在調(diào)用自己的代碼塊,例如:

List l5 = new ArrayList(5){
{
System.out.println("我是匿名內(nèi)部類");
}
};

等價于:

class Sub extends ArrayList{
{
System.out.println("我是匿名內(nèi)部類");
}
Sub(int num){
super(num);
}
}
List l5 = new Sub(5);

我們來看段示例代碼

package testtest; 
 
public class Main { 
 
  public static void main(String[] args) { 
    InnerTest inner = new InnerTest(); 
    Test t = inner.get(3); 
    System.out.println(t.getI()); 
  } 
} 
 
class Test { 
 
  private int i; 
 
  public Test(int i) { 
    this.i = i; 
  } 
 
  public int getI() { 
    return i; 
  } 
} 
 
class InnerTest { 
 
  public Test get(int x) { 
    return new Test(x) { 
 
      @Override 
      public int getI() { 
        return super.getI() * 10; 
      } 
    }; 
  } 
} 

編譯之后得到4個class文件:Test.class,InnerTest.class,InnerTest$1.class以及Main.class。容易看出來,Main.class是測試類的class文件,Test.class是超類Test的class文件,InnerTest.class是InnerTest 的class文件,最值得關注的就是匿名內(nèi)部類的class文件InnerTest$1.class。

相關文章

  • SpringBoot掃描不到Controller的解決方案

    SpringBoot掃描不到Controller的解決方案

    這篇文章主要介紹了SpringBoot掃描不到Controller的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • MyBatis查詢數(shù)據(jù),賦值給List集合時,數(shù)據(jù)缺少的問題及解決

    MyBatis查詢數(shù)據(jù),賦值給List集合時,數(shù)據(jù)缺少的問題及解決

    這篇文章主要介紹了MyBatis查詢數(shù)據(jù),賦值給List集合時,數(shù)據(jù)缺少的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Eclipse開發(fā)JavaWeb項目配置Tomcat的方法步驟

    Eclipse開發(fā)JavaWeb項目配置Tomcat的方法步驟

    本文主要介紹了Eclipse開發(fā)JavaWeb項目配置Tomcat的方法步驟,首先介紹eclipse開發(fā)JavaWeb項目需要配置的相關環(huán)境,使用tomcat軟件在本地搭建服務器,然后再在eclipse環(huán)境下配置tomcat,感興趣的可以了解一下
    2021-08-08
  • springboot-curd基于mybatis項目搭建

    springboot-curd基于mybatis項目搭建

    這篇文章主要介紹了springboot-curd基于mybatis項目搭建,圍繞相關資料展開詳細內(nèi)容,希望對正在學習的你有所幫助,需要的小伙伴也可以參考一下
    2022-01-01
  • SpringBoot實現(xiàn)動態(tài)定時任務

    SpringBoot實現(xiàn)動態(tài)定時任務

    這篇文章主要為大家詳細介紹了SpringBoot實現(xiàn)動態(tài)定時任務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java運行時數(shù)據(jù)區(qū)域(內(nèi)存劃分)的深入講解

    Java運行時數(shù)據(jù)區(qū)域(內(nèi)存劃分)的深入講解

    聽說Java運行時環(huán)境的內(nèi)存劃分是挺進BAT的必經(jīng)之路,這篇文章主要給大家介紹了關于Java運行時數(shù)據(jù)區(qū)域(內(nèi)存劃分)的相關資料,需要的朋友可以參考下
    2021-06-06
  • 詳解springboot+atomikos+druid?數(shù)據(jù)庫連接失效分析

    詳解springboot+atomikos+druid?數(shù)據(jù)庫連接失效分析

    本文主要介紹了springboot+atomikos+druid?數(shù)據(jù)庫連接失效分析,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Spring中緩存注解@Cache的使用詳解

    Spring中緩存注解@Cache的使用詳解

    這篇文章主要介紹了Spring中緩存注解@Cache的使用詳解,使用注解對數(shù)據(jù)進行緩存功能的框架,只需要簡單地加一個注解,就能實現(xiàn)緩存功能,大大簡化我們在業(yè)務中操作緩存的代碼,需要的朋友可以參考下
    2023-07-07
  • 一文帶你全面了解Java?Properties類

    一文帶你全面了解Java?Properties類

    Properties是JDK1.0中引入的java類,目前也在項目中大量使用,主要用來讀取外部的配置,那除了這個,你對它其他的一些api也了解嗎??你了解它是怎么實現(xiàn)的嗎??如果不清楚的話,就通過本篇文章帶你一探究竟
    2022-09-09
  • 淺談SpringBoot 中關于自定義異常處理的套路

    淺談SpringBoot 中關于自定義異常處理的套路

    這篇文章主要介紹了淺談SpringBoot 中關于自定義異常處理的套路,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04

最新評論