看这样一段话:
在匿名类中不可能有命名构造器(因为它根本没有名字) 但 通过实例初始化 就能够达到为匿名内部类创建一个构造器的效果 就像这样:
//: innerclasses/AnonymousConstructor.java
// Creating a constructor for an anonymous inner class.
import static net.mindview.util.Print.*;abstract class Base {
public Base(int i) {
print("Base constructor, i = " + i);
}
public abstract void f();
} public class AnonymousConstructor {
public static Base getBase(int i) {
return new Base(i) {
{ print("Inside instance initializer"); }
public void f() {
print("In anonymous f()");
}
};
}
public static void main(String[] args) {
Base base = getBase(47);
base.f();
}
} /* Output:
Base constructor, i = 47
Inside instance initializer
In anonymous f()
*///:~
请问:
这个 “实例初始化” 是什么意思 它是怎样达到为匿名内部类创建一个构造器的效果
谢谢
在匿名类中不可能有命名构造器(因为它根本没有名字) 但 通过实例初始化 就能够达到为匿名内部类创建一个构造器的效果 就像这样:
//: innerclasses/AnonymousConstructor.java
// Creating a constructor for an anonymous inner class.
import static net.mindview.util.Print.*;abstract class Base {
public Base(int i) {
print("Base constructor, i = " + i);
}
public abstract void f();
} public class AnonymousConstructor {
public static Base getBase(int i) {
return new Base(i) {
{ print("Inside instance initializer"); }
public void f() {
print("In anonymous f()");
}
};
}
public static void main(String[] args) {
Base base = getBase(47);
base.f();
}
} /* Output:
Base constructor, i = 47
Inside instance initializer
In anonymous f()
*///:~
请问:
这个 “实例初始化” 是什么意思 它是怎样达到为匿名内部类创建一个构造器的效果
谢谢
解决方案 »
- 手头有个服务器项目请看看想知道是不是找开源代码改的
- 如何用java,net包实现一个简单的ping
- 画直线并计算两端的距离.发生问题求教!!!
- 想用JAVA做一些小型的软件,都需要学习什么知识啊?看我列的几项行吗?谢谢!
- 欢迎讨论,数据库事务处理!
- 如何获得目录下文件数目
- www.apache.org怎么了?
- 如何取得exec被调用程序的input信息?
- 请问大侠们!有没有地方去下载java虚拟机!!
- 请问有谁对java.awt.dnd.*包比较熟,能大致讲一下吗!
- 关于数据库连接池出错问题--DBPool_v4.8.3.jar
- 重写JTextField控件,控制JTextField长度和只能在JTextField中输入数字
其实和普通的类一样用啊 就是有它自己的规则而已
至于这规则怎么定的你到sun公司去问吧
{ print("Inside instance initializer"); }
public void f() {
print("In anonymous f()");
}
};
可以整体理解为 实例初始化
只不过是带类体描述的
public Base(int i) {
print("Base constructor, i = " + i);
}
public abstract void f();
} public class AnonymousConstructor {
public static Base getBase(int i) {
return new Base(i) {
{ print("Inside instance initializer"); }
public void f() {
print("In anonymous f()");
}
};
}
public static void main(String[] args) {
Base base = getBase(47);
base.f();
}
} /* Output: 红色部分就是实力初始化,跟普通类是一样的道理class A{
{
System.out.println("initializer");
}
A(int i){
System.out.println("constructor");
}
}
当new A()时,{}中的语句会在构造体之前执行,在匿名内部类中,由于没有构造器,所以可以在{}里添加期望的初始化工作。