日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 香臺麗舍 2014-09-25

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

內(nèi)部類Inner Class

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

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

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

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

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

  局部內(nèi)部類local inner class

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

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

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

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

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

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

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

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

  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)部類可以訪問外部類的靜態(tài)成員
            // 并且它只能訪問靜態(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)部類也是定義在另一個類中,但是定義時不用static修飾。

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

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

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

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

  this.new Innerclass();

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

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

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

  Outerclass.this.member

  詳情見代碼例子:

復制代碼
package com.learnjava.innerclass;

class MemberInner
{
    private int d = 1;
    private int a = 2;

    // 定義一個成員內(nèi)部類
    public class Inner2
    {
        private int a = 8;

        public void doSomething()
        {
            // 直接訪問外部類對象
            System.out.println(d);
            System.out.println(a);// 直接訪問a,則訪問的是內(nèi)部類里的a

            // 如何訪問到外部類里的a呢?
            System.out.println(MemberInner.this.a);
        }

    }

}

public class MemberInnerClassTest
{

    public static void main(String[] args)
    {

        // 創(chuàng)建成員內(nèi)部類的對象
        // 需要先創(chuàng)建外部類的實例
        MemberInner.Inner2 inner = new MemberInner().new Inner2();

        inner.doSomething();
    }
}
復制代碼

 

局部內(nèi)部類Local Inner Class

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

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

  只能訪問方法中定義的final類型的局部變量。

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

復制代碼
package com.learnjava.innerclass;

class LocalInner
{
    int a = 1;

    public void doSomething()
    {
        int b = 2;
        final int c = 3;
        // 定義一個局部內(nèi)部類
        class Inner3
        {
            public void test()
            {
                System.out.println("Hello World");
                System.out.println(a);

                // 不可以訪問非final的局部變量
                // error: Cannot refer to a non-final variable b inside an inner
                // class defined in a different method
                // System.out.println(b);

                // 可以訪問final變量
                System.out.println(c);
            }
        }

        // 創(chuàng)建局部內(nèi)部類的實例并調(diào)用方法
        new Inner3().test();
    }
}

public class LocalInnerClassTest
{
    public static void main(String[] args)
    {
        // 創(chuàng)建外部類對象
        LocalInner inner = new LocalInner();
        // 調(diào)用外部類的方法
        inner.doSomething();
    }

}
復制代碼

 

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

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

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

  匿名內(nèi)部類使用得比較多,通常是作為一個方法參數(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()
        {
        });// 使用了花括號,但是不填入內(nèi)容,執(zhí)行結(jié)果和上面的完全一致
            // 生成了一個繼承了Date類的子類的對象
        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文件中,匿名類會生成OuterClass$1.class文件,數(shù)字根據(jù)是第幾個匿名類而類推。

  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出來一個實現(xiàn)了ActionListener接口的類的實例

            @Override
            public void actionPerformed(ActionEvent arg0)
            {
                System.out.println("Hello World");

            }
        });

        //加入按鈕
        frame.getContentPane().add(button);

        //設置關(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);
    }

}
新趨勢IT教育 www.xinqushi.net  免費在線技術(shù)交流QQ群 258897306 

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

學費低,時間自由,適合在校大學生和在崗充電人士,咨詢QQ:1535741932

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多