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

詳細(xì)分析Java內(nèi)部類——局部?jī)?nèi)部類

 更新時(shí)間:2020年08月21日 09:06:40   作者:弗蘭克的貓  
這篇文章主要介紹了Java局部?jī)?nèi)部類的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java 內(nèi)部類的知識(shí),感興趣的朋友可以了解下

  今天介紹第二種內(nèi)部類——局部?jī)?nèi)部類。

  局部?jī)?nèi)部類是什么?顧名思義,那就是定義在局部?jī)?nèi)部的類(逃)。開玩笑的,局部?jī)?nèi)部類就是定義在代碼塊、方法體內(nèi)、作用域(使用花括號(hào)“{}”括起來(lái)的一段代碼)內(nèi)的類。局部?jī)?nèi)部類有以下特性:

  1. 局部?jī)?nèi)部類只能在代碼代碼塊、方法體內(nèi)和作用域中使用。
  2. 局部?jī)?nèi)部類同樣可以無(wú)限制調(diào)用外部類的方法和屬性。
  3. 可以使用abstract修飾,聲明為抽象類。

  舉個(gè)栗子:

public class Outer2 {
 public void print(){
  class Inner2{
   public void test(){
    System.out.println("Inner.print()");
   }
  }
  Inner2 inner2 = new Inner2();
  inner2.test();
 }
}
public class Test {
 public static void main(String[] args) {
  Outer2 outer2 = new Outer2();
  outer2.print();
 }
}

  這里的Inner2類僅僅在Outer2的print方法中被使用,有效范圍也僅在print函數(shù)之內(nèi)。

  通過(guò)這段玩具代碼,可能無(wú)法理解為什么java中要出現(xiàn)這樣限制這么多而且挺復(fù)雜的東西。讓我們來(lái)看看之前的栗子:Java中的回調(diào)

  這里把代碼復(fù)制過(guò)來(lái):

public class TimePrinter implements ActionListener {
 @Override
 public void actionPerformed(ActionEvent e) {
  Date now = new Date();
  System.out.println("Time is " + now + " now.");
 }
}
public class Test {
 public static void main(String[] args) {
  ActionListener listener = new TimePrinter();
  Timer t = new Timer(1000,listener);
  t.start();
  JOptionPane.showMessageDialog(null,"Quit program?");//彈出對(duì)話框,防止主線程結(jié)束導(dǎo)致時(shí)鐘結(jié)束
  System.exit(0);
 }
}

  在這里,我們想要?jiǎng)?chuàng)建一個(gè)Timer時(shí),需要往里面?zhèn)魅胍粋€(gè)實(shí)現(xiàn)了ActionListener接口的對(duì)象,而這個(gè)對(duì)象僅僅在該方法中使用了一次,這時(shí)候內(nèi)部類的優(yōu)勢(shì)就體現(xiàn)出來(lái)了,把類封裝在方法中,不向外界提供任何冗余信息:

public class Test {
 public static void main(String[] args) {
  class InnerTimePrinter implements ActionListener {
   @Override
   public void actionPerformed(ActionEvent e) {
    Date now = new Date();
    System.out.println("Time is " + now + " now.");
   }
  }
  ActionListener listener = new InnerTimePrinter();
  Timer t = new Timer(1000,listener);
  t.start();
  JOptionPane.showMessageDialog(null,"Quit?");
  System.exit(0);
 }
}

  你也許會(huì)覺得,這樣好像只是把類簡(jiǎn)單的挪到了另一個(gè)類里面,并沒(méi)有什么luan用。

  表面上,確實(shí)如此,但事實(shí)上,還是有很多l(xiāng)uan用的。

  在《Think in java》中有這樣一句話:使用內(nèi)部類最吸引人的原因是:每個(gè)內(nèi)部類都能獨(dú)立地繼承一個(gè)(接口的)實(shí)現(xiàn),所以無(wú)論外圍類是否已經(jīng)繼承了某個(gè)(接口的)實(shí)現(xiàn),對(duì)于內(nèi)部類都沒(méi)有影響。

  我們都知道,java中是不能實(shí)現(xiàn)多繼承的,接口也正是為了對(duì)多繼承的補(bǔ)充完善給出的方案。而我們程序設(shè)計(jì)中有時(shí)候會(huì)存在一些使用接口很難解決的問(wèn)題,這個(gè)時(shí)候我們可以利用內(nèi)部類提供的、可以繼承多個(gè)具體的或者抽象的類的能力來(lái)解決這些程序設(shè)計(jì)問(wèn)題??梢哉f(shuō),接口只是解決了部分問(wèn)題,而內(nèi)部類使得多重繼承的解決方案變得更加完整。

  據(jù)個(gè)人經(jīng)驗(yàn),局部?jī)?nèi)部類確實(shí)用的不多,但不常用不代表沒(méi)有用,知道有這樣一個(gè)神奇的內(nèi)部類存在,了解過(guò)它的特性之后,可以為你日后的需求提供更多的方案。

  至此,本篇講解完畢,歡迎大家繼續(xù)關(guān)注!

以上就是詳細(xì)分析Java內(nèi)部類——局部?jī)?nèi)部類的詳細(xì)內(nèi)容,更多關(guān)于Java 局部?jī)?nèi)部類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java split 分隔空值無(wú)法得到的解決方式

    Java split 分隔空值無(wú)法得到的解決方式

    這篇文章主要介紹了Java split 分隔空值無(wú)法得到的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Java中的getClass()以及getName()方法使用

    Java中的getClass()以及getName()方法使用

    這篇文章主要介紹了Java中的getClass()以及getName()方法使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringMVC @GetMapping注解路徑?jīng)_突問(wèn)題解決

    SpringMVC @GetMapping注解路徑?jīng)_突問(wèn)題解決

    MD5對(duì)密碼進(jìn)行加密存儲(chǔ)是常見的一種加密方式,本文主要介紹了Java雙重MD5加密實(shí)現(xiàn)安全登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java中Dom4j的配置與使用示例詳解

    Java中Dom4j的配置與使用示例詳解

    Dom4j是一個(gè)強(qiáng)大的Java庫(kù),用于處理XML數(shù)據(jù),結(jié)合了DOM、SAX、JDOM的優(yōu)點(diǎn),它可以解析、生成、修改和序列化XML文檔,適用于數(shù)據(jù)交換、配置文件管理、日志記錄、數(shù)據(jù)持久化和Web服務(wù)等場(chǎng)景,Dom4j提供了簡(jiǎn)單易用的API,便于開發(fā)者進(jìn)行高效的XML操作
    2024-10-10
  • Java CAS原子操作詳解

    Java CAS原子操作詳解

    在synchronized的優(yōu)化過(guò)程中我們看到大量使用了CAS操作,CAS全稱Compare And Set(或Compare And Swap),簡(jiǎn)單來(lái)說(shuō)CAS操作就是一個(gè)虛擬機(jī)實(shí)現(xiàn)的原子操作
    2023-02-02
  • java UUID&雪花算法生成和使用場(chǎng)景詳解

    java UUID&雪花算法生成和使用場(chǎng)景詳解

    UUID和雪花算法都是用于生成唯一標(biāo)識(shí)符的有效工具,它們各有優(yōu)勢(shì):UUID簡(jiǎn)單易用,但長(zhǎng)度較長(zhǎng),適用于分布式系統(tǒng);雪花算法生成的ID較短且有序,適用于需要保證順序的場(chǎng)景,在選擇算法時(shí),需要考慮系統(tǒng)架構(gòu)、性能需求和順序需求等因素
    2025-01-01
  • Springboot MongoDB實(shí)現(xiàn)自增序列的項(xiàng)目實(shí)踐

    Springboot MongoDB實(shí)現(xiàn)自增序列的項(xiàng)目實(shí)踐

    在某些特定的業(yè)務(wù)場(chǎng)景下,會(huì)需要使用自增的序列來(lái)維護(hù)數(shù)據(jù),本文主要介紹了Springboot MongoDB實(shí)現(xiàn)自增序列的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java使用easyExcel實(shí)現(xiàn)導(dǎo)入功能

    Java使用easyExcel實(shí)現(xiàn)導(dǎo)入功能

    這篇文章介紹了Java使用easyExcel實(shí)現(xiàn)導(dǎo)入功能的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Java中創(chuàng)建線程的四種方法解析

    Java中創(chuàng)建線程的四種方法解析

    這篇文章主要介紹了Java中創(chuàng)建線程的四種方法解析,線程是Java編程語(yǔ)言中的一個(gè)重要概念,它允許程序在同一時(shí)間執(zhí)行多個(gè)任務(wù),線程是程序中的執(zhí)行路徑,可以同時(shí)執(zhí)行多個(gè)線程,每個(gè)線程都有自己的執(zhí)行流程,需要的朋友可以參考下
    2023-10-10
  • java 學(xué)習(xí)筆記(入門篇)_java的安裝與配置

    java 學(xué)習(xí)筆記(入門篇)_java的安裝與配置

    學(xué)習(xí)Java已經(jīng)很長(zhǎng)時(shí)間了,由于基礎(chǔ)不好遇到問(wèn)題就無(wú)從下手,所以,打算寫Java的隨手筆記來(lái)鞏固基礎(chǔ),加強(qiáng)學(xué)習(xí),接下來(lái)講解java的安裝,配置等,感興趣的朋友可以參考下
    2013-01-01

最新評(píng)論

盱眙县| 沅江市| 伽师县| 寿阳县| 青铜峡市| 峡江县| 礼泉县| 吴忠市| 关岭| 梓潼县| 伊宁县| 富源县| 长阳| 都兰县| 牡丹江市| 和平县| 漯河市| 安达市| 永丰县| 柳江县| 铜鼓县| 琼中| 安西县| 陵水| 封开县| 崇阳县| 元谋县| 禹州市| 秀山| 海南省| 漳浦县| 拜城县| 阜宁县| 玉溪市| 平乡县| 黎川县| 奇台县| 四平市| 衡阳市| 克拉玛依市| 改则县|