JAVA匿名类用在什么地方 老师说是作为参数用的 到底是在方法体里定义还是在形参列表里定义呀 最好有例子

我主要不明白的是匿名类的定义位置 请详细说下
2025-03-07 11:09:37
推荐回答(3个)
回答1:

没有绝对的定义位置。
你应该知道Java是“纯”面向对象的语言吧?比C++都强悍,因为Java任何可以执行代码都放在了类的内部。包括了变量定义。
下面就给你说说匿名类怎么用。
定义类,目的是为了定义对象,再用对象表达实际数据对象。
通常,需要表达的数据对象不少或常用,所以,你设计一个类(有名称的),再用类去定义对象,这是常规用法。
有时,你所需要的对象仅仅使用一次,根本没必须独立显示式地使用一个类,这时就可以直接使用匿名类来创建实例对象,然后就使用此对象。
最常用明显的例子是图形界面的事件监听器,往往处理代码很简单而且只用在一个组件上,所以通常这样用:XXXXXX.addXXXXXListener(new XXXXXXListener(){
//此接口的事件处理函数
});
其实,不止可以用在这里,本人做的Java扫雷,把一个类成员对象的实现用匿名类实现的。
实际上,匿名类这样去理解:
1.类是定义对象的,匿名类也是;
2.别的类有名字,可以多次声明/创建对象,而匿名类没有名字,只能当时直接创建对象实例;
3.由于2,所以有名类可以独立存在于一个源文件;而匿名类最多也就是做为类成员变量的定义,或方法调用的参数,或局部变量的定义(这个比较少,实际上用不到);
4.匿名类构造函数无法实现,因此通常定义的匿名类都是无参的。
比如,定义显式类和对象可以这样:
class XXXX{
//类成员
}
......
XXXX xxxx=new XXXX();
而匿名类是直接定义:
xxxx=new XXXX(){
//类成员
};
这时xxxx就是一个实例对象,并且是由XXXX派生出来的,注意xxxx不算XXXX的直接实例。

回答2:

在时间监听时 用到
addKeyListener(new XX{ ……})

回答3:

你说的是对象吧,引用型例如方法public void getInfo(Person p){}
那么在你调用此方法时候,可是直接对象.getInfo(new Person());
这个new Person()就是匿名对象,作为实参,只要在调用时候传递Person类型的就可以