A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘忠德 于 2012-1-2 22:38 编辑

RT,接口不能实例化,那new Runnable(){....}怎么解释?

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

4 个回复

正序浏览
wsssx 2012-1-2 16:20:21
报纸
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报

这个是一个匿名内部类~!
一个类如果只使用一次, 那么就可以定义为匿名内部类.
定义方式: new 父类名(){类定义}
这样做是先声明了一个指定父类的子类, 然后用这个子类创建了一个对象
  1. new Thread(new Runnable(){
  2.                        
  3.                         public void run(){
  4.                                 for(int x = 0; x < 10;x++){
  5.                                         System.out.println("x = "+x);
  6.                                 }
  7.                         }
  8.                 }).start();
  9.                        
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
这是匿名内部类的语法和用法。表示一个实现了Runnable的新类的一个对象。

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
new Runnable(){
......
};
后面的分号了吗?
这句实现了Runnable接口。
{};
大括号中的是实现方法。
这个应该是个匿名内部类
下面这个列子就是他的一个用法
public static void start(final String host, final DatagramSocket socket) throws java.net.UnknownHostException
    {
        Runnable udpService = new Runnable()
        {
            public void run()
            {
                if (host != null)
                {
                    try
                    {
                        AbstractDatagramSocket.addDatagramSocket(host, socket);
                    }
                    catch (UnknownHostException e)
                    {
                        LOGGER.error(null, e);
                    }
                }

                try
                {
                    MyOodbTunnelUdp tunnelUdp = new MyOodbTunnelUdp(socket);
                    tunnelUdp.mainloop();
                }
                catch (Exception e)
                {
                    if (socket.isClosed() == false)
                    {
                        LOGGER.error(null, e);
                    }
                }

                if (host != null)
                {
                    try
                    {
                        AbstractDatagramSocket.removeDatagramSocket(host);
                    }
                    catch (UnknownHostException e)
                    {
                        LOGGER.error(null, e);
                    }
                }
            }
        };

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马