这个什么时候用,不太理解
可以给段代码说明最好,谢谢!
可以给段代码说明最好,谢谢!
解决方案 »
- repaint() paint() update()重量级 轻量级
- 很晚很冷 。。。问个简单的问题,顺便散分....
- Java 验证 输入身份证号码号码 是否合法
- el表达式${sessionScope.shoppingCart[0].price}如何理解
- 请教JDBC ResultSet的运行机制?
- 怎么在jpanel中获得当前的jframe对象
- 我在使用jbuilder 7开发项目的时候,一些对象的公共方法不能使用,是不是jbuilder中对移植性要求的比较高
- 怎样在JTree的单项前加入复选框?谢谢!
- SQL Server 2000 有专门的JDBC驱动程序吗?not odbc-jdbc bridge ?
- 又一个内部类问题??
- 把十进制数转换成字符串出现乱码??
- 运行后为什么总是用户名错误?
·只用到类的一个实例。
·类在定义后马上用到。
·类非常小(SUN推荐是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、方法和类。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。 下面的例子看起来有点奇怪:
//在方法中返回一个匿名内部类
public class Parcel6 {
public Contents cont() {
return new Contents() {
private int i = 11. public int value() {
return i.
}
}. // 在这里需要一个分号
} public static void main(String[] args) {
Parcel6 p = new Parcel6().
Contents c = p.cont().
}
}
cont()方法将下面两个动作合并在一起:返回值的生成,与表示这个返回值的类的定义!进一步说,这个类是匿名的,它没有名字。更糟的是,看起来是你正要创建一个Contents对象:
return new Contents()
但是,在到达语句结束的分号之前,你却说:“等一等,我想在这里插入一个类的定义”:
return new Contents() {
private int i = 11.
public int value() { return i. }
}.
这种奇怪的语法指的是:“创建一个继承自Contents的匿名类的对象。”通过new 表达式返回的引用被自动向上转型为对Contents的引用。匿名内部类的语法是下面例子的简略形式:
class MyContents implements Contents {
private int i = 11.
public int value() { return i. }
}
return new MyContents().
在这个匿名内部类中,使用了缺省的构造器来生成Contents。下面的代码展示的是,如果你的基类需要一个有参数的构造器,应该怎么办:
public class Parcel7 {
public Wrapping wrap(int x) {
// Base constructor call:
return new Wrapping(x) { // Pass constructor argument.
public int value() {
return super.value() * 47.
}
}. // Semicolon required
}
public static void main(String[] args) {
Parcel7 p = new Parcel7().
Wrapping w = p.wrap(10).
}
}
......
method(
newInner(){
......
}
);
......
}这种类基本上只使用他的一个实例,没有必要特意拿出来单独写个!!
是JAVA的事件处理,不是JAVA的时间处理!
匿名类的语法是什么样的呢?如下所示:
new SuperType(){
内部类的方法和域;
}
注意,这里的SuperType指超类,它可以是一个接口(interface)或者是一个类(Class),当它是一个接口的时候就不能有构造参数(Construction parameters)了。匿名类的语法相对于Java的其他部分来说稍微复杂一点,我们可以按如下方式理解:
1.SuperType为接口
例子:Interface1() test=new Interface1(){
要实现的的方法;
Interface1的域;
内部类的域以及方法;
}
我们可以如下理解:
先声明了如下一个类,
class Anonymous1 implements Interface1{
要实现的的方法;
Interface1的域;
内部类的域以及方法;
}
然后,Interface1() test=new Anonymouse1();
这样就比较容易理解了。
2.SuperType为类
例子:Class2 test=new Class2(Construction parameters){
内部类的域以及方法;
}
我们可以如下理解:
先声明了如下一个类,
class Anonymous2 extends Class2{
public Anonymous2(Construction parameters){
super(Construction parameters);
}
内部类的域以及方法;
}
然后,Class2 test=new Anonymouse2(Construction parameters);
本节测试代码如下:
package cn.edu.hust.cm.test;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Toolkit;
import javax.swing.JOptionPane;
import javax.swing.Timer;
public class InnerClassTest {
public InnerClassTest() {
super();
}
public static void main(String[] args) {
Court court=new Court(10000,true);
court.start();
JOptionPane.showMessageDialog(null,"停止么,CMTobby?");
System.exit(0);
}
}
class Court{
public Court(int interval,boolean beep){
this.interval=interval;
this.beep=beep;
}
public void start(){
ActionListener action=new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("Cindyelf,wouly you be my girl?");
}
};
Timer t=new Timer(interval,action);
t.start();
}
private int interval;
private boolean beep;
}