最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中的內(nèi)部類內(nèi)部接口用法說明

 更新時間:2020年09月14日 11:51:17   作者:flydean程序那些事  
這篇文章主要介紹了java中的內(nèi)部類內(nèi)部接口用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

簡介

一般來說,我們創(chuàng)建類和接口的時候都是一個類一個文件,一個接口一個文件,但有時候為了方便或者某些特殊的原因,java并不介意在一個文件中寫多個類和多個接口,這就有了我們今天要講的內(nèi)部類和內(nèi)部接口。

內(nèi)部類

先講內(nèi)部類,內(nèi)部類就是在類中定義的類。類中的類可以看做是類的一個屬性,一個屬性可以是static也可以是非static的。而內(nèi)部類也可以定義在類的方法中,再加上匿名類,總共有5種內(nèi)部類。

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

我們在class內(nèi)部定義一個static的class,如下所示:

@Slf4j
public class StaticInnerClass {

 static class Inner {
  void print() {
   log.info("Inner class is: " + this);
  }
 }

 public static void main(String[] args) {
  StaticInnerClass.Inner inner = new StaticInnerClass.Inner();
  inner.print();
 }
}

因為static變量可以直接根據(jù)類名來存取,所以我們使用new StaticInnerClass.Inner()來實例化內(nèi)部類。

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

class中定義的類也可以是非靜態(tài)的,如下所示:

@Slf4j
public class InnerClass {

  class Inner {
  void print() {
   log.info("Inner class is: " + this);
  }
 }

 public static void main(String[] args) {
  InnerClass.Inner inner = new InnerClass().new Inner();
  inner.print();
 }
}

要訪問到類的變量,需要實例化外部內(nèi),然后再實例化內(nèi)部類:new InnerClass().new Inner()。

注意這里我們需要使用到兩個new。

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

我們可以在靜態(tài)方法中定義一個類,這個類其實就相當(dāng)于方法中的變量,這個變量當(dāng)然不能是static的。我們看下面的例子:

@Slf4j
public class StaticMethodInnerClass {

 private static String x = "static x";

 public static void print() {
  class MyInner {
   public void printOuter() {
    log.info("x is " + x);
   }
  }
  MyInner i = new MyInner();
  i.printOuter();
 }

 public static void main(String[] args) {
  StaticMethodInnerClass.print();
 }
}

方法中的類,我們是無法在外部實例化的。

非靜態(tài)方法的內(nèi)部類

同樣的非靜態(tài)方法也可以定義內(nèi)部類:

@Slf4j
public class MethodInnerClass {

 private String x = "non static x";

 public void print() {
  class MyInner {
   public void printOuter() {
    log.info("x is " + x);
   }
  }
  MyInner i = new MyInner();
  i.printOuter();
 }

 public static void main(String[] args) {
  new MethodInnerClass().print();
 }
}

注意,這里需要先實例化外部類才可以繼續(xù)調(diào)用。

匿名類

最后一個,匿名類,直接在需要的時候?qū)嵗念?。匿名類我們遇到了很多次了,比如在?gòu)建SortedSet的時候,可以傳入自定義的Comparator,我們可以用匿名類來實現(xiàn),也可以直接使用lambda表達式。

public class AnonymousClass {

 public static void main(String[] args) {
  SortedSet sortedSet1 = new ConcurrentSkipListSet(new Comparator(){
   @Override
   public int compare(Object o1, Object o2) {
    return 0;
   }
  });

  SortedSet sortedSet2 = new ConcurrentSkipListSet((o1, o2) -> 0);
 }
}

內(nèi)部接口

Inner Interface是指在接口中定義的接口。最常見的就是Map中的Entry了:

public interface Map<K, V> {
 interface Entry<K, V> {
  K getKey();
 }

這里的內(nèi)部接口一定是static的,因為接口是不能實例化的,所以為了訪問到接口中的接口,必須定義為static。如果不指定,則默認就是static。

我們看一個該內(nèi)部接口的實現(xiàn):

public class MapImpl implements Map.Entry{
 @Override
 public Object getKey() {
  return 0;
 }

 @Override
 public Object getValue() {
  return null;
 }

 @Override
 public Object setValue(Object value) {
  return null;
 }
}

總結(jié)

本文講解了5個內(nèi)部類的實現(xiàn)和一個內(nèi)部接口的應(yīng)用。大家只要把內(nèi)部的類或者接口看成一個變量,就可以很好的理解上面的內(nèi)容了。

本文的例子https://github.com/ddean2009/learn-java-base-9-to-20

補充知識:內(nèi)部類(成員內(nèi)部類、靜態(tài)內(nèi)部類、方法內(nèi)部類)

一:成員內(nèi)部類:

最常見的內(nèi)部類就是成員內(nèi)部類,也稱作普通內(nèi)部類;

1、Inner類定義在Outer類的內(nèi)部,相當(dāng)于Outer類的成員變量的位置,Inner類可以使用任意訪問修飾符,如:public、private、protected等。

2、Inner類中定義的test()方法可以訪問Outer類中的數(shù)據(jù),不受訪問控制符的影響。

3、 定義了成員內(nèi)部類后,必須使用外部類對象來創(chuàng)建內(nèi)部類對象,而不能直接去 new 一個內(nèi)部類對象,即:內(nèi)部類 對象名 = 外部類對象.new 內(nèi)部類( );如創(chuàng)建Inner的內(nèi)部類對象:要先創(chuàng)建外部類對象:Outer o = new outer(); 創(chuàng)建內(nèi)部類:Inner i = o.new Inner();訪問Inner中的test()方法:i.test();

例如:

4、如果外部類和內(nèi)部類具有相同的成員變量或方法,內(nèi)部類可以直接訪問內(nèi)部類的成員變量或方法,但如果內(nèi)部類訪問外部類的成員變量或者方法時,需要使用this關(guān)鍵字;如下:

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

靜態(tài)內(nèi)部類就是用static修飾的內(nèi)部類,這種內(nèi)部類的特點是:

1、靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員,但,可以通過new 外部類().成員的方式訪問;

2、如果外部類的靜態(tài)成員與內(nèi)部類的靜態(tài)成員相同, 可以通過"類名.靜態(tài)成員"來訪問外部類的靜態(tài)成員;如果不同,可以直接調(diào)用外部類的靜態(tài)成員名。

3、創(chuàng)建靜態(tài)內(nèi)部類的對象時,不需要外部類的對象,可以直接創(chuàng)建;

三:方法內(nèi)部類:

1、方法內(nèi)部類就是定義在外部類的方法中,方法內(nèi)部類只在該方法內(nèi)可以用;

2、由于方法內(nèi)部類不能在外部類的方法以外的地方使用,因此方法內(nèi)部類不能使用訪問控制符和 static 修飾符。

以上這篇java中的內(nèi)部類內(nèi)部接口用法說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java鏈接redis_動力節(jié)點Java學(xué)院整理

    Java鏈接redis_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了Java鏈接redis,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java System.getProperty()-獲取系統(tǒng)參數(shù)案例詳解

    Java System.getProperty()-獲取系統(tǒng)參數(shù)案例詳解

    這篇文章主要介紹了Java System.getProperty()-獲取系統(tǒng)參數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解idea從git上拉取maven項目詳細步驟

    詳解idea從git上拉取maven項目詳細步驟

    這篇文章主要介紹了詳解idea從git上拉取maven項目詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • javaweb 項目初始配置的方法步驟

    javaweb 項目初始配置的方法步驟

    本文主要介紹了javaweb 項目初始配置的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • WeakHashMap的垃圾回收原理詳解

    WeakHashMap的垃圾回收原理詳解

    這篇文章主要介紹了WeakHashMap的垃圾回收原理詳解,WeakHashMap 與 HashMap 的用法基本類似,與 HashMap 的區(qū)別在于,HashMap的key保留了對實際對象的強引用個,這意味著只要該HashMap對象不被銷毀,該HashMap的所有key所引用的對象就不會被垃圾回收,需要的朋友可以參考下
    2023-09-09
  • 圖解Java?ReentrantLock公平鎖和非公平鎖的實現(xiàn)

    圖解Java?ReentrantLock公平鎖和非公平鎖的實現(xiàn)

    ReentrantLock是Java并發(fā)中十分常用的一個類,具備類似synchronized鎖的作用。但是相比synchronized,?它具備更強的能力,同時支持公平鎖和非公平鎖。本文就來聊聊ReentrantLock公平鎖和非公平鎖的實現(xiàn),需要的可以參考一下
    2022-10-10
  • Java語言描述存儲結(jié)構(gòu)與鄰接矩陣代碼示例

    Java語言描述存儲結(jié)構(gòu)與鄰接矩陣代碼示例

    這篇文章主要介紹了Java語言描述存儲結(jié)構(gòu)與鄰接矩陣代碼示例,涉及Java存儲結(jié)構(gòu),鄰接矩陣,鄰接表的介紹與比較,然后分享了鄰接矩陣的Java實現(xiàn)等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考。
    2017-11-11
  • Java concurrency之非公平鎖_動力節(jié)點Java學(xué)院整理

    Java concurrency之非公平鎖_動力節(jié)點Java學(xué)院整理

    本篇文章主要介紹了Java concurrency之非公平鎖,詳細的介紹了獲取和釋放非公平鎖,有興趣的同學(xué)可以了解一下
    2017-06-06
  • Spring boot 集成 Druid 數(shù)據(jù)源過程詳解

    Spring boot 集成 Druid 數(shù)據(jù)源過程詳解

    這篇文章主要介紹了Spring boot 集成 Druid 數(shù)據(jù)源過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Java實現(xiàn)登錄與注冊頁面

    Java實現(xiàn)登錄與注冊頁面

    這篇文章主要為大家詳細介紹了Java實現(xiàn)登錄與注冊頁面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論

吉木乃县| 辽源市| 湖口县| 海门市| 衡阳市| 库车县| 鹤峰县| 织金县| 宜昌市| 新乡市| 韶山市| 阿瓦提县| 颍上县| 莱州市| 辽阳市| 昌都县| 抚州市| 上栗县| 克什克腾旗| 六盘水市| 包头市| 安宁市| 南和县| 全南县| 工布江达县| 泗水县| 石家庄市| 景洪市| 旬阳县| 广丰县| 客服| 沈阳市| 石首市| 昭通市| 错那县| 宣汉县| 长治县| 赤壁市| 莒南县| 内黄县| 随州市|