真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java內(nèi)部類種類代碼解析,JAVA類中類

一個java內(nèi)部類有幾個分類?

共有四種內(nèi)部類,分別是:

創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡營銷,包括網(wǎng)站建設(shè)、成都做網(wǎng)站、SEO優(yōu)化、網(wǎng)絡推廣、整站優(yōu)化營銷策劃推廣、電子商務、移動互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)為不同類型的客戶提供良好的互聯(lián)網(wǎng)應用定制及解決方案,創(chuàng)新互聯(lián)核心團隊10年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務,在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。

1.常規(guī)內(nèi)部類

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

3.局部內(nèi)部類

4.匿名內(nèi)部類

常規(guī)內(nèi)部類:常規(guī)內(nèi)部類沒有用static修飾且定義在在外部類類體中。

常規(guī)內(nèi)部類中的方法可以直接使用外部類的實例變量和實例方法。在常規(guī)內(nèi)部類中可以直接用內(nèi)部類創(chuàng)建對象。

靜態(tài)內(nèi)部類:與類的其他成員相似,可以用static修飾內(nèi)部類,這樣的類稱為靜態(tài)內(nèi)部類。靜態(tài)內(nèi)部類與靜態(tài)內(nèi)部方法相似,只能訪問外部類的static成員,不能直接訪問外部類的實例變量,與實例方法,只有通過對象引用才能訪問。

由于static內(nèi)部類不具有任何對外部類實例的引用,因此static內(nèi)部類中不能使用this關(guān)鍵字來訪問外部類中的實例成員,但是可以訪問外部類中的static成員。這與一般類的static方法相通。

局部內(nèi)部類:在方法體或語句塊(包括方法、構(gòu)造方法、局部塊或靜態(tài)初始化塊)內(nèi)部定義的類成為局部內(nèi)部類。局部內(nèi)部類不能加任何訪問修飾符,因為它只對局部塊有效。

局部內(nèi)部類只在方法體中有效,就想定義的局部變量一樣,在定義的方法體外不能創(chuàng)建局部內(nèi)部類的對象

在方法內(nèi)部定義類時,應注意以下問題:

1.方法定義局部內(nèi)部類同方法定義局部變量一樣,不能使用private、protected、public等訪問修飾說明符修飾,也不能使用static修飾,但可以使用final和???abstract修飾

2.方法中的內(nèi)部類可以訪問外部類成員。對于方法的參數(shù)和局部變量,必須有final修飾才可以訪問。

3.static方法中定義的內(nèi)部類可以訪問外部類定義的static成員

匿名內(nèi)部類:定義類的最終目的是創(chuàng)建一個類的實例,但是如果某個類的實例只是用一次,則可以將類的定義與類的創(chuàng)建,放到與一起完成,或者說在定義類的同時就創(chuàng)建一個類。以這種方法定義的沒有名字的類成為匿名內(nèi)部類。

java內(nèi)部類,匿名內(nèi)部類這些是什么?求詳細用法,還有語法。

一、內(nèi)部類:

內(nèi)部類是定義在另一個類中的類,使用它的原因主要有3個:

內(nèi)部類方法可以訪問該類定義所在的作用域中的數(shù)據(jù),包括私有的數(shù)據(jù);

內(nèi)部類可以對同一個包中的其他類隱藏以來;

當想要定義一個回調(diào)函數(shù)且不想編寫大量代碼時,使用匿名內(nèi)部類比較便捷。

【舉例:《Java核心技術(shù)(卷I)》,6.4節(jié)——內(nèi)部類,程序清單6-6】

import?java.awt.*;

import?java.awt.event.*;

import?java.util.*;

import?javax.swing.*;

import?javax.swing.Timer;

/**

*?This?program?demonstrates?anonymous?inner?classes.

*?@version?1.10?2004-02-07

*?@author?Cay?Horstmann

*/

public?class?InnerClassTest

{

public?static?void?main(String[]?args)

{

TalkingClock?clock?=?new?TalkingClock(1000,?true);

clock.start();

//?keep?program?running?until?user?selects?"Ok"

JOptionPane.showMessageDialog(null,?"Quit?program?");

System.exit(0);

}

}

/**

*?A?clock?that?prints?the?time?in?regular?intervals.

*/

class?TalkingClock

{

private?int?interval;

private?boolean?beep;

/**

*?Starts?the?clock.

*?@param?interval?the?interval?between?messages?(in?milliseconds)

*?@param?beep?true?if?the?clock?should?beep

*/

public?TalkingClock(int?interval,?boolean?beep)

{

this.interval?=?interval;

this.beep?=?beep;

}

/**

*?Starts?the?clock.

*/

public?void?start()

{

ActionListener?listener?=?new?TimePrinter();

Timer?t?=?new?Timer(interval,?listener);

t.start();

}

public?class?TimePrinter?implements?ActionListener

{

public?void?actionPerformed(ActionEvent?event)

{

Date?now?=?new?Date();

System.out.println("At?the?tone,?the?time?is?"?+?now);

if?(beep)?Toolkit.getDefaultToolkit().beep();

}

}

}

上述代碼中,TimePrinter就是在TalkingClock類的內(nèi)部定義的一個內(nèi)部類,因此它可以訪問外圍類的數(shù)據(jù)域,包括interval和beep這種私有域。

二、局部內(nèi)部類:

討論匿名內(nèi)部類之前,先看看局部內(nèi)部類,它是在一個方法中定義的類。代碼示例如下,這里將上例中的TimePrinter類放到了start()方法中進行定義:

public?void?start(int?interval,?final?boolean?beep)

{

class?TimePrinter?implements?ActionListener

{

public?void?actionPerformed(ActionEvent?event)

{

Date?now?=?new?Date();

System.out.println("At?the?tone,?the?time?is?"?+?now);

if?(beep)?Toolkit.getDefaultToolkit().beep();

}

}

ActionListener?listener?=?new?TimePrinter();

Timer?t?=?new?Timer(interval,?listener);

t.start();

}

局部內(nèi)部類不能用public或private訪問說明符來聲明,它的作用域被限定在聲明這個局部內(nèi)部類的塊中。局部內(nèi)部類可以對外部世界完全地隱藏起來。

局部內(nèi)部類不僅能訪問其外圍類,還可以訪問局部變量,不過這些局部變量必須被聲明為final,如上述代碼中start()方法的參數(shù)beep所示。

三、匿名內(nèi)部類

將上面的局部內(nèi)部類的代碼修改一下,就可以定義一個匿名內(nèi)部類,這種類沒有類名。

public?void?start(int?interval,?final?boolean?beep)

{

ActionListener?listener?=?new?ActionListener()

{

public?void?actionPerformed(ActionEvent?event)

{

Date?now?=?new?Date();

System.out.println("At?the?tone,?the?time?is?"?+?now);

if?(beep)?Toolkit.getDefaultToolkit().beep();

}

};

Timer?t?=?new?Timer(interval,?listener);

t.start();

}

請參照局部內(nèi)部類的代碼,比較不同之處。TimePrinter這個類名被省略了,定義listener這個局部內(nèi)部類時,在其后的new ActionListener()后面跟了一個大括號括起的語句塊,也就是此匿名內(nèi)部類的定義語句。匿名內(nèi)部類除了具有內(nèi)部類的優(yōu)點外,還可以減少代碼量。

【內(nèi)容有些多,但愿能幫到你^_^】

Java里什么叫內(nèi)部類什么叫外部類

對普通類(沒有內(nèi)部類的類)來說,內(nèi)部類和外部類都與他無關(guān);對有內(nèi)部類的類來說,它們就是其內(nèi)部類的外部類,外部類是個相對的說法,其實就是有內(nèi)部類的類。

所以,要回答這個問題,只需要講解內(nèi)部類是什么:

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();

示例代碼:

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ù)。

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

示例代碼:

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);

}

}


網(wǎng)頁題目:java內(nèi)部類種類代碼解析,JAVA類中類
分享URL:http://weahome.cn/article/dsechgd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部