匿名類,正如名字一樣在java中沒有名字標識的類,當然了編譯后還是會安排一個名字的。
下面是一個關於匿名類的簡單例子:
public static void main(String[] args) throws InterruptedException { Thread t=new Thread(new Runnable() {
System.out.println("hello,dusk!");
Java語言規范上是這么描述匿名類的:
匿名類的聲明:
匿名類的聲明是由java編譯器自動派生自一個類實例創建表達式。
匿名類永遠不能是抽象的。
匿名類總是隱式的final。
匿名類總是一個內部類;並且不能是static的。
實際使用中我們只需注意這幾點兒:
1、使用匿名內部類時,我們必須是繼承一個類或者實現一個接口,但是兩者不可兼得,同時也只能繼承一個類或者實現一個接口。
2、匿名內部類中是不能定義構造函數的。
3、匿名內部類中不能存在任何的靜態成員變量和靜態方法。
4、匿名內部類為局部內部類,所以局部內部類的所有限制同樣對匿名內部類生效。
5、匿名內部類不能是抽象的,它必須要實現繼承的類或者實現的接口的所有抽象方法。
編譯時的命名規則:
- 內部類的class文件命名是:主類+$+內部類名
- 匿名類的class文件命名是:主類+$+(1,2,3....)
定義一個場景:
package com.dusk.anonymous;
public class AnonymousClassTest { private Runnable r1=new Runnable() {
System.out.println(1);
Runnable r2=new Runnable() {
System.out.println(2);
public static void main(String[] args) { Runnable r3=new Runnable() {
System.out.println(3);
從代碼中我們可以看出定義了三個匿名類:
我們反編譯出來:
-
https://blog.csdn.net/jiaotuwoaini/article/details/51542059