精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Java 內(nèi)部類種類及使用解析

如果你需要本文中提到的技術(shù),你在理解上有問(wèn)題,請(qǐng)和QQ1750214342聯(lián)系,我們提供免費(fèi)技術(shù)咨詢服務(wù)。  
Java 內(nèi)部類種類及使用解析

內(nèi)部類Inner Class

  將相關(guān)的類組織在一起,從而降低了命名空間的混亂。

  一個(gè)內(nèi)部類可以定義在另一個(gè)類里,可以定義在函數(shù)里,甚至可以作為一個(gè)表達(dá)式的一部分。

  Java中的內(nèi)部類共分為四種

  靜態(tài)內(nèi)部類static inner class (also called nested class)

  成員內(nèi)部類member inner class

  局部?jī)?nèi)部類local inner class

  匿名內(nèi)部類anonymous inner class

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

  最簡(jiǎn)單的內(nèi)部類形式。

  類定義時(shí)加上static關(guān)鍵字。

  不能和外部類有相同的名字。

  被編譯成一個(gè)完全獨(dú)立的.class文件,名稱為OuterClass$InnerClass.class的形式。

  只可以訪問(wèn)外部類的靜態(tài)成員和靜態(tài)方法,包括了私有的靜態(tài)成員和方法。

  生成靜態(tài)內(nèi)部類對(duì)象的方式為:

  OuterClass.InnerClass inner = new OuterClass.InnerClass();

  靜態(tài)內(nèi)部類使用代碼:

package com.learnjava.innerclass;class StaticInner{    private static int a = 4;    // 靜態(tài)內(nèi)部類    public static class Inner    {        public void test()        {            // 靜態(tài)內(nèi)部類可以訪問(wèn)外部類的靜態(tài)成員            // 并且它只能訪問(wèn)靜態(tài)的            System.out.println(a);        }    }}public class StaticInnerClassTest{    public static void main(String[] args)    {        StaticInner.Inner inner = new StaticInner.Inner();        inner.test();    }}

 

成員內(nèi)部類Member Inner Class

  成員內(nèi)部類也是定義在另一個(gè)類中,但是定義時(shí)不用static修飾。

  成員內(nèi)部類和靜態(tài)內(nèi)部類可以類比為非靜態(tài)的成員變量和靜態(tài)的成員變量。

  成員內(nèi)部類就像一個(gè)實(shí)例變量。

  它可以訪問(wèn)它的外部類的所有成員變量和方法,不管是靜態(tài)的還是非靜態(tài)的都可以

  在外部類里面創(chuàng)建成員內(nèi)部類的實(shí)例:

  this.new Innerclass();

  在外部類之外創(chuàng)建內(nèi)部類的實(shí)例:

  (new Outerclass()).new Innerclass();

  在內(nèi)部類里訪問(wèn)外部類的成員:

  Outerclass.this.member

  詳情見代碼例子:

package com.learnjava.innerclass;class MemberInner{    private int d = 1;    private int a = 2;    // 定義一個(gè)成員內(nèi)部類    public class Inner2    {        private int a = 8;        public void doSomething()        {            // 直接訪問(wèn)外部類對(duì)象            System.out.println(d);            System.out.println(a);// 直接訪問(wèn)a,則訪問(wèn)的是內(nèi)部類里的a            // 如何訪問(wèn)到外部類里的a呢?            System.out.println(MemberInner.this.a);        }    }}public class MemberInnerClassTest{    public static void main(String[] args)    {        // 創(chuàng)建成員內(nèi)部類的對(duì)象        // 需要先創(chuàng)建外部類的實(shí)例        MemberInner.Inner2 inner = new MemberInner().new Inner2();        inner.doSomething();    }}

 

局部?jī)?nèi)部類Local Inner Class

  局部?jī)?nèi)部類定義在方法中,比方法的范圍還小。是內(nèi)部類中最少用到的一種類型。

  像局部變量一樣,不能被public, protected, private和static修飾。

  只能訪問(wèn)方法中定義的final類型的局部變量。

  局部?jī)?nèi)部類在方法中定義,所以只能在方法中使用,即只能在方法當(dāng)中生成局部?jī)?nèi)部類的實(shí)例并且調(diào)用其方法。

package com.learnjava.innerclass;class LocalInner{    int a = 1;    public void doSomething()    {        int b = 2;        final int c = 3;        // 定義一個(gè)局部?jī)?nèi)部類        class Inner3        {            public void test()            {                System.out.println("Hello World");                System.out.println(a);                // 不可以訪問(wèn)非final的局部變量                // error: Cannot refer to a non-final variable b inside an inner                // class defined in a different method                // System.out.println(b);                // 可以訪問(wèn)final變量                System.out.println(c);            }        }        // 創(chuàng)建局部?jī)?nèi)部類的實(shí)例并調(diào)用方法        new Inner3().test();    }}public class LocalInnerClassTest{    public static void main(String[] args)    {        // 創(chuàng)建外部類對(duì)象        LocalInner inner = new LocalInner();        // 調(diào)用外部類的方法        inner.doSomething();    }}

 

匿名內(nèi)部類Anonymous Inner Class

  匿名內(nèi)部類就是沒(méi)有名字的局部?jī)?nèi)部類,不使用關(guān)鍵字class, extends, implements, 沒(méi)有構(gòu)造方法。

  匿名內(nèi)部類隱式地繼承了一個(gè)父類或者實(shí)現(xiàn)了一個(gè)接口

  匿名內(nèi)部類使用得比較多,通常是作為一個(gè)方法參數(shù)。

package com.learnjava.innerclass;import java.util.Date;public class AnonymouseInnerClass{    @SuppressWarnings("deprecation")    public String getDate(Date date)    {        return date.toLocaleString();    }    public static void main(String[] args)    {        AnonymouseInnerClass test = new AnonymouseInnerClass();        // 打印日期:        String str = test.getDate(new Date());        System.out.println(str);        System.out.println("----------------");        // 使用匿名內(nèi)部類        String str2 = test.getDate(new Date()        {        });// 使用了花括號(hào),但是不填入內(nèi)容,執(zhí)行結(jié)果和上面的完全一致            // 生成了一個(gè)繼承了Date類的子類的對(duì)象        System.out.println(str2);        System.out.println("----------------");        // 使用匿名內(nèi)部類,并且重寫父類中的方法        String str3 = test.getDate(new Date()        {            // 重寫父類中的方法            @Override            @Deprecated            public String toLocaleString()            {                return "Hello: " + super.toLocaleString();            }        });        System.out.println(str3);    }}

 

  生成的.class文件中,匿名類會(huì)生成OuterClass$1.class文件,數(shù)字根據(jù)是第幾個(gè)匿名類而類推。

  Swing中使用內(nèi)部類的例子如下:

package com.learnjava.innerclass;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.JFrame;public class SwingTest{    public static void main(String[] args)    {        JFrame frame = new JFrame("JFrame");        JButton button = new JButton("JButton");        button.addActionListener(new ActionListener()        {            // new出來(lái)一個(gè)實(shí)現(xiàn)了ActionListener接口的類的實(shí)例            @Override            public void actionPerformed(ActionEvent arg0)            {                System.out.println("Hello World");            }        });        //加入按鈕        frame.getContentPane().add(button);        //設(shè)置關(guān)閉行為        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setSize(200, 200);                frame.addWindowListener(new WindowAdapter()        {            //也可以使用繼承了適配器類的匿名內(nèi)部類            @Override            public void windowClosing(WindowEvent e)            {                            System.out.println("Closing");                System.exit(0);            }        });        frame.setVisible(true);    }}
新趨勢(shì)IT教育 www.xinqushi.net  免費(fèi)在線技術(shù)交流QQ群 258897306 

頂級(jí)老師課程+16小時(shí)全天在線輔導(dǎo)+IT企業(yè)師傅領(lǐng)進(jìn)門+就業(yè)推薦+就業(yè)后一年內(nèi)技術(shù)問(wèn)題全包+就業(yè)后學(xué)費(fèi)返還  

學(xué)費(fèi)低,時(shí)間自由,適合在校大學(xué)生和在崗充電人士,咨詢QQ:1535741932

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
內(nèi)部類 靜態(tài)內(nèi)部類 成員內(nèi)部類 局部?jī)?nèi)部類 匿名內(nèi)部類
Java中內(nèi)部類和靜態(tài)內(nèi)部類的區(qū)別
java 靜態(tài)內(nèi)部類的使用
java 內(nèi)部類和靜態(tài)內(nèi)部類的區(qū)別
Java常用類,7000+字一次性幫你總結(jié)好啦!
靜態(tài)內(nèi)部類和非靜態(tài)內(nèi)部類的區(qū)別
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

主站蜘蛛池模板: 三河市| 永靖县| 麻阳| 霞浦县| 晋宁县| 平湖市| 郑州市| 璧山县| 寿光市| 汝州市| 报价| 岐山县| 青州市| 伊宁县| 曲松县| 漯河市| 五大连池市| 尼勒克县| 南充市| 湘乡市| 新和县| 丰县| 崇明县| 山阳县| 苍南县| 闽侯县| 广南县| 昌平区| 莲花县| 观塘区| 靖宇县| 林西县| 宁德市| 墨竹工卡县| 买车| 岳普湖县| 镇赉县| 高阳县| 环江| 曲周县| 西峡县|