import java.awt.event.ActionEvent
import java.awt.event.ActionListenerimport javax.swing.*
public class Press { /**
* @param args
*/
JFrame jf = new JFrame("内部匿名类演示")//创建一个JFrame组件
JButton jb = new JButton("Press me") //创建按钮
JLabel jt = new JLabel() //创建一个标签用来输出“hello!!”
public Press(){
jf.add(jb,BorderLayout.SOUTH) //添加按钮
jf.add(jt,BorderLayout.CENTER) //添加标签
jf.setSize(200,200)//设置jf大小
jf.setVisible(true)//设置jf为可见
/*接下来是内部匿名类的应用了,为jb添加一个左键单击响应事件*/
jb.addActionListener(new ActionListener(){ /*这里就是内部匿名类了,没有类名,下面是类的方法体*/ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jt.setText("hello!!")
}})
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Press p =new Press()
}}
你可以试着给jf添加一个事件响应,让它点×可以关掉,这样你就能理解匿名内部类了,再看看书里对“内部类”、“匿名类”的介绍,一个个理解这样“匿名内部类”就没问题了
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()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)