Java匿名类

匿名类,正如名字一样在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);

从代码中我们可以看出定义了三个匿名类:

我们反编译出来:

  1.  

    https://blog.csdn.net/jiaotuwoaini/article/details/51542059

原文地址:https://www.cnblogs.com/feng9exe/p/9268786.html