当前位置:首页 » 编程语言 » java匿名类

java匿名类

发布时间: 2022-06-17 12:57:26

java当中如何区分匿名对象和匿名类

下面给你具体介绍一下匿名对象和匿名类:

一、匿名对象

匿名对象是没有名字的实体,也就是该实体没有对应的变量名引用

匿名对象的特征:

  • 创建的匿名类的对象只能够调用一次

  • 匿名对象只在堆内存中开辟空间,而不存在栈内存的引用

  • 每次创建匿名对象都是不同的对象

二、匿名类

匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。匿名类相当于在定义类的同时再新建这个类的实例

定义匿名内部类的格式如下:

new 父类构造器(参数列表)|实现接口()
{
//匿名内部类的类体部分
}

匿名类特点:

  • 它必须继承一个类或者实现一个接口,而不能显示的使用extends或者implements,没有父类。

  • 匿名类没有构造方法。通过new<父类名> 创建对象,匿名类定义与创建对象是同时进行的。

  • 匿名类只能一次性的创建,并有父类句柄持有。

  • 匿名类不需要初始化,只有默认的构造方法

三、匿名对象和匿名类区别

1.匿名对象还是一个对象,它必须有已经写好的成员变量、属性、方法

2.匿名类,在声明它的对象的时候,才对它进行代码的构造(封装它的成员变量、属性、方法等)

3.匿名对象:一个对象只需要使用一次的时候,通常使用匿名对象

4.匿名类:比如我们需要一个监听类,并且在实例化这个监听类的时候才需要实现这个监听类内部的方法,那么使用匿名类就最方便了

⑵ Java匿名内部类怎样创建,有何作用和优点,创建线程怎样使用匿名内部类

1、匿名内部类就是没有名字的内部类。这是Java为了方便我们编写程序而设计的一个机制。因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适,而且也免去了给它取名字的烦恼。
2、如果满足下面的一些条件,使用匿名内部类是比较合适的:
·只用到类的一个实例。
·类在定义后马上用到。
·类非常小(SUN推荐是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、方法和类。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
3、用匿名内部类创建多线程有两种方式,和创建一个线程是一样的。
第①种继承Thread:
new
Thread(){
public
void
run(){
//do
something
};
}.start();
第②种实现
Runnable接口:
new
Thread(new
Runnable()
{
public
void
run()
{
//do
something
};
})
{
}.start();

⑶ JAVA匿名类只能是内部类吗

可以这样说,这个也很好想通,既然是匿名类,那么除了在它定义的地方,其他地方就不能使用该类了,因为是匿名的(即没有类名的类),没有类名那么其他地方肯定是不能访问的。所以匿名类只能在定义的时候使用,比如有个类Student,匿名类对象可以这样定义Student stu = new Student(){ };就是在{}括号中的内容,可以对类Student进行重新实现,但是这个类没有名字,所以只能是内部类

⑷ java 匿名类

abstract class Animal {
public abstract void cry();
}

class TestCry {
public void testCry(Animal animal) {
animal.cry();
}
}

public class Example{
public static void main(String[] args) {

TestCry cry = new TestCry () ;
cry.testCry(new Animal (){
public void cry() {
System.out.println("Cat is crying!");
}
});
cry.testCry(new Animal (){
public void cry() {
System.out.println("Dog is crying!");
}
});
// ... 省略其他
}
}

先看段伪代码
abstract class Father(){
....
}

public class Test{
Father f1 = new Father(){ .... } //这里就是有个匿名内部类
}
一般来说,new 一个对象时小括号后应该是分号,也就是new出对象该语句就结束了。
但是出现匿名内部类就不一样,小括号后跟的是大括号,大括号中是该new 出对象的具体的实现方法。
因为我们知道,一个抽象类是不能直接new 的,必须先有实现类了我们才能new出它的实现类。
上面的伪代码就是表示new 的是Father的实现类,这个实现类是个匿名内部类。
其实拆分上面的匿名内部类可为
class SonOne extends Father{
... //这里的代码和上面匿名内部类,大括号中的代码是一样的
}
public class Test{
Father f1 = new SonOne() ;
}

⑸ java中为什么要引入匿名类

有的时候, 为可实现一个功能或者实例化一个对象, 需要实现一个接口, 但是接口应用的地方很多, 但是每个地方的实现都不尽相同, 而且需要实例化的地方就只只有那么一两处, 这个时候, 如果为了这些地方, 每个声明一个类来实现接口的话, 就会浪费很多空间, 还得费时编译, 匿名内部类可以在需要的地方使用接口, 可以在使用的同时实现, 这样不但节省了空间, 还可以使代码更加明了

一般的应用都是在Java界面编程上, Applet, Awt, Swing, SWT, 因为在注册事件侦听的时候, 就有上面的情况, 因为每个组件动作的处理都不一样, 而且注册事件只有一次, 用匿名类就比较方便了. 还有比较器, 用Collections.sort比较对象集合的时候, 直接实例化sort方法的第二个参数, 比较方便.

⑹ java 匿名类怎么写,有什么作用,能举个简单的例子吗

private JButton button = new JButton("OK");
button.addActionListener(new ActionListener(){
//...
});
这里面的ActionListener就是一个匿名类,他的作用跟类的成员方法差不多,可以直接当参数传递,如TimerTask类

⑺ java匿名内部类具体概念是什么,在什么地方用到

java匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。因他是局部内部类,那么局部内部类的所有限制都对其生效。匿名内部类是唯一一种无构造方法类。大部分匿名内部类是用于接口回调用的。匿名内部类在编译的时候由系统自动起名Out$1.class。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。因匿名内部类无构造方法,所以其使用范围非常的有限。当需要多个对象时使用局部内部类,因此局部内部类的应用相对比较多。匿名内部类中不能定义构造方法。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。

示例如下:

publicclassOuter{
privatestaticinti=1;
privateintj=10;
publicstaticvoidouter_f1(){

}
publicvoidouter_f2(){

}
//静态内部类可以用public,protected,private修饰
//静态内部类中可以定义静态或者非静态的成员
staticclassInner{
staticintinner_i=100;
intinner_j=200;
staticvoidinner_f1(){
System.out.println("Outer.i"+i);//静态内部类只能访问外部类的静态成员
outer_f1();//包括静态变量和静态方法
}
voidinner_f2(){
//System.out.println("Outer.i"+j);//静态内部类不能访问外部类的非静态成员
//outer_f2();//包括非静态变量和非静态方法
}
}

publicvoidouter_f3(){
//外部类访问内部类的静态成员:内部类.静态成员
System.out.println(Inner.inner_i);
Inner.inner_f1();
//外部类访问内部类的非静态成员:实例化内部类即可
Innerinner=newInner();
inner.inner_f2();

}
publicstaticvoidmain(String[]args){
newOuter().outer_f3();
}

}

⑻ JAVA匿名类是什么,怎么用

匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义。

内部类是在一个类的内部嵌套定义的类,它可以是其它类的成员,也可以在一个语句块的内部定义,还可以在表达式内部匿名定义。

匿名类与其他类的不同就在于匿名,也就是没有名称。

Java中允许创建子类对象时,除了使用父类的构造方法外,还可以用类体。 匿名类就是一个没有类申明的类体,因为没有名称,所有匿名类不可以申明对象,但却可以创建对象。 例如:

A是一个子类,那么下面的代码就是A的一个子类(匿名类)创建对象。

new A(){

匿名类的类体

};

由于匿名类是一个子类,所以和有一般子类的特征。可以继承父类的方法,同样也可以重写父类的方法。值得提醒的是,在使用匿名类时,一定是在某个类中直接用匿名类创建对象,因此匿名类必定是内部类,所以和其他匿名类一样可以访问外嵌类中的成员变量和方法,匿名类的类体中不可以什么。

static成员变量和static方法。

尽管匿名类没有申明的步骤,但可以在创建匿名对象时返回一个引用赋值给匹配参数。 匿名类的常用方式是向方法的参数传值。

具体方法如下:

abstractclassSpeak{
publicabstractvoidspeakHello();
}
classStudent{
voidf(Speaksp){
sp.speakHello();
}
}
publicclassAnonymousClassDemo{
publicstaticvoidmain(String[]args){
Speakspeak=newSpeak(){
publicvoidspeakHello(){
System.out.println("大家好,祝工作愉快!");
}
};
speak.speakHello();
Studentst=newStudent();
st.f(newSpeak(){
publicvoidspeakHello(){
System.out.println("Iamastudent,howareyou");
}
});
}
}

上面代码的抽象类改成接口同样适用。

⑼ java 匿名内部类 如何实现 举例说明

匿名内部类,就是建立一个内部的类,但没有给你命名,也就是没有引用实例的变量。
public void start() {
this.setBounds(50, 50, GAME_WIDTH, GAME_HEIGHT);
this.setBackground(Color.green);
this.setVisible(true);
/*
下面这个就是匿名内部类了

*/

this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.addKeyListener(new TankKeyEvent());
this.setResizable(false);
new Thread(new TankThread()).start();
}

new 是建立一个 WindowAdapter对象 ,后面一个 {} 表示这个括号中的操作作用于这个默认的对名象,而上面的Java程序中后面是一个函数体。这
个用法的作用是:创建一个对象的实例,并且 override 它的一个函数。打开 WindowAdapter
的代码可以发现。它是一个抽象类。它是对 WindowListener 接口的一个实现。Frame.addWindowListner(); 的参数是一个 WindowListner ,而实现上是传一个从WindowAdapter 派生出的一个匿名类。

⑽ Java匿名内部类

创建一个匿名类对象作为wrapping方法的返回值,同时重写了匿名类的value方法。
return的作用是结束当前方法(C语言里叫函数),看清楚return所在的方法。
要调用该方法才会执行里面的代码。
静态main方法是程序入口点。

热点内容
安卓源码版本 发布:2025-02-06 20:51:34 浏览:429
安卓系统网络播放器哪个好 发布:2025-02-06 20:42:02 浏览:818
头条缓存的视频格式 发布:2025-02-06 20:32:18 浏览:116
ftp不显示文件夹 发布:2025-02-06 20:30:37 浏览:127
苹果手机解压怎么打开 发布:2025-02-06 20:29:35 浏览:476
单片机程序存储器 发布:2025-02-06 20:29:31 浏览:209
串的c语言 发布:2025-02-06 20:25:44 浏览:750
编程函数总结 发布:2025-02-06 20:09:11 浏览:317
编程obj 发布:2025-02-06 19:59:52 浏览:845
津贴脚本 发布:2025-02-06 19:44:10 浏览:742