java中的匿名类

匿名类

匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。

这就要采用另一种形式的new语句,如下所示:

new <类或接口> <类的主体>

这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。

如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。

注意匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。

从技术上说,匿名类可被视为非静态的内部类,所以它们具有和方法内部声明的非静态内部类一样的权限和限制。

如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用。匿名类尤其适合在Swing应用程序中快速创建事件处理程序。

时间: 2024-08-21 08:01:07

java中的匿名类的相关文章

java 中的匿名类

问题描述 哪位高手相接下什么是匿名类,它与子类有什么关系能用子类代替吗如何代替,如何使用? 解决方案 解决方案二:JButtonjb=newJButton();jb.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){System.out.println("dosomething");}}); 这上面就使用了匿名类;匿名,就是没有名字,懒得给这个类取名字,只在内部使用,就用这种方式;

使用 Lambda 取代 Android 中的匿名类_Android

Lambda是第十一个希腊字母,大写Λ,小写λ,额,跑题了-Lambda表达式 是Java8的新特性之一: Lambda表达式 函数式接口 流API 默认方法 新的Date Time API Lambda表达式 取代了匿名类 ,取消了模板,允许用函数式风格编写代码. 由于最近接触了RxJava,遇到了Lambda,立马就喜欢上了~所以就学习了一下. 本文主要介绍一下Lambda在Android中替代匿名类的部分使用场景. 在Android中使用Lambda gradle-retrolambda

使用 Lambda 取代 Android 中的匿名类

Lambda是第十一个希腊字母,大写Λ,小写λ,额,跑题了-Lambda表达式 是Java8的新特性之一: Lambda表达式 函数式接口 流API 默认方法 新的Date Time API Lambda表达式 取代了匿名类 ,取消了模板,允许用函数式风格编写代码. 由于最近接触了RxJava,遇到了Lambda,立马就喜欢上了~所以就学习了一下. 本文主要介绍一下Lambda在Android中替代匿名类的部分使用场景. 在Android中使用Lambda gradle-retrolambda

Java中StringUtils工具类的一些用法实例

  这篇文章主要介绍了Java中StringUtils工具类的一些用法实例,本文着重讲解了isEmpty和isBlank方法的使用,另外也讲解了trim.strip等方法的使用实例,需要的朋友可以参考下 StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果

详解java中的Collections类_java

一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数组无法完全表达你要表达的东西,而定义一个类Class有太过麻烦,这时候,你可以考虑一下用Java中的Collections类.使用Collections类,必须在文件头声明import java.util.*; 一.动态.有序.可变大小的一维数组Vector与ArrayList  Collectio

java中基于TaskEngine类封装实现定时任务

主要包括如下几个类:   文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 作者: javaboy2012 Email:yanek@163.com qq:    1046011462       1. 核心工具类: TaskEngine   package com.yanek.task; import java.util.*; import java.util.Lin

java-请教JAVA中的Calendar类的一个问题

问题描述 请教JAVA中的Calendar类的一个问题 请问大神,我画红框的部分就是我出问题的地方,为什么我set好的Date值是5月,而下面输出后是0月?搞得下面的add方法也是从0开始加3 解决方案 把SimpleDateFormat中的m改为大写的M,改为"yyyy年MM月dd日".而且要注意,获取到的Month是用0-11表示的,如果要表示真实的日期,要记得+1. 解决方案二: yyyy年M月d日 看看

在java中New 类名() 类里面的数据会被重新赋值吗?

问题描述 在java中New 类名() 类里面的数据会被重新赋值吗? 在java中New 类名() 类里面的数据会被重新赋值吗? 解决方案 java中new 类名()是用来调用类的无参构造器开辟内存空间的,初始化一个该类的对象,而该对象里面的值就是类的初始值.会不会被重新赋值要看无参构造器里面的代码有没有再次赋值的过程. 解决方案二: 你这是新建一个 对象 就相当与数据库表 插入一行数据 解决方案三: 是对象里的数据吧,每次new出来的对象里的数据都会有初始化. 解决方案四: 你类里面的都是初始

java中的链表类的remove问题

问题描述 java中的链表类的remove问题 新人初学java,有些基本问题不是很懂,求教各位,谢谢 java中的LinkedList这个链表类中有这样一个方法,removefirst方法,含义是删除,并且返回链表的第一个元素,我想问下各位,是不是只要是删除了第一个元素,那么后面的第二个元素会顶到原来第一个元素的位置上,当我第二次调用这个方法时,相当于删除了链表的第一个元素(原来的第二个元素)? 谢谢各位了 解决方案 是的,removeFirst()方法返回链表第一个元素,并且删掉这个元素,当