`
tedeyang
  • 浏览: 318483 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

inner class与重载问题

阅读更多

今天貌似发现了一个java的bug.
这是一个内部匿名类调用外部类方法的问题.
我在外部类中有个notifyAll(Object me)方法,在内部匿名类里却无法调用它,编译报错。
尝试把notifyAll改名为tellAll,——恩,蛮好,可以调用。
尝试写成 OuterClassName.this.notifyAll(me)——恩,也可以调用。
看起来如果在外部类中重载Object的方法,java无法区分。

/** */ /**
 * 
 
*/

package  cn.roob.webdown.statistic;

import  java.util.concurrent.Executors;
import  java.util.concurrent.ScheduledExecutorService;
import  java.util.concurrent.TimeUnit;

import  org.apache.log4j.Logger;

import  cn.roob.webdown.persist.StatisticDAO;
import  cn.roob.webdown.persist.TaskCountRecord;
import  cn.roob.webdown.util.Config;

/** */ /**
 * 任务状态定时统计线程,只记录发生了变动的统计结果.<br>
 * 以单例模式运行,通过观察者模式发送统计结果<br>
 * 典型的观察者有客户端通讯和统计曲线图
 * 
 * 
@author  tedeyang
 * 
 
*/

public   class  TaskStatistic  extends  CommonStatisticSource  {
    
static   private   int  statisticRate  =  Config.getApplicationConfig().statisticRate();
    
static   private  TaskStatistic thread  =   null ;
    
private   static  Logger log  =  Logger.getLogger(TaskStatistic. class );
    
private   final  ScheduledExecutorService schedule  =  Executors.newSingleThreadScheduledExecutor();
    
private   boolean  started  =   false ;

    
private  TaskStatistic()  {
    }


    
public   static  TaskStatistic getSingleScheduledThread()  {
        
if  (thread  ==   null {
            thread 
=   new  TaskStatistic();
        }

        
return  thread;
    }


    
/** */ /**
     * 在垃圾收集前停止线程
     * 
@see  java.lang.Object#finalize()
     
*/

    
protected   void  finalize()  throws  Throwable  {
        
this .stop();
        
super .finalize();
    }


    
/** */ /**
     * 启动,以固定的延迟频率统计数据库中任务的状态,如果状态发生变化则通知监听者,并记录.
     
*/

    
public   void  start()  {
        
if  (started)
            
return ;
        
if  (log.isInfoEnabled())
            log.info(
" 启动任务统计线程 " );
        started 
=   true ;

        
final  StatisticDAO dao  =   new  StatisticDAO();
        schedule.scheduleWithFixedDelay(
                
                
new  Runnable()  {
                    TaskCountRecord lastRecord 
=   null ;
                    
public   void  run()  {
                        TaskCountRecord totalCount 
=  dao.countTaskStatus();
                        
//  任务数没有变化则不更新
                         if  ( ! totalCount.equals(lastRecord))  {
                            lastRecord 
=  totalCount;
                            tellAllObservers(totalCount);
                            dao.save(totalCount); 
                                notifyAll(totalCount);//该方法在父类中
                        }
 
                    }

                }
,
                statisticRate, 
                statisticRate, 
                TimeUnit.SECONDS
        );
    }


    
/** */ /**
     * 结束
     
*/

    
public   void  stop()  {
        schedule.shutdown();
        started 
=   false ;
        
if  (log.isInfoEnabled())
            log.info(
" 停止任务统计线程 " );
    }

}

分享到:
评论

相关推荐

    java笔试题

    1、面向对象的特征有哪些方面? 2、访问修饰符public,private,protected,以及不写(默认)时的区别...24、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 25、Java 中会存在内存泄漏吗,请简单描述。

    JAVA面试题最全集

    37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39.编写代码实现一个线程池 40.描述一下JVM加载class文件的原理机制? 41....

    java编程基础,应用与实例

    第10章 内隐类(inner class) 146 10.1 静态类(static class) 146 10.2 成员类(member class) 147 10.3 局部类(local class) 150 10.4 匿名类(anonymous class) 152 10.5 巩固练习 153 第11章 异常处理...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 19 【基础】关于“==”和“equal()” 19 关于“==” 19 关于“equals()” 20 【基础】String为什么是final 20 【基础】java中String、...

    LuaBind 源码 (Lua增强库)

    为了正确处理所有权转移问题,create_a()将用来适配返回值策略. 参见 策略 章节. -Linker Lin 4/5/08 6:32 PM struct B: A {}; struct C: B {}; void g(A*); void g(B*); 执行以下 Lua 代码即结果: a1 = create...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    7.5.5 重载容易引发误解的两个地方——返回类型和形参名 170 7.5.6 重载中的最难点——参数匹配原则 171 7.6 使用类的实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    7.5.5 重载容易引发误解的两个地方——返回类型和形参名 170 7.5.6 重载中的最难点——参数匹配原则 171 7.6 使用类的实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 ...

    java 面试题 总结

    21、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。 22、JSP中动态...

    超级有影响力霸气的Java面试题大全文档

    24、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。 25、JSP中动态...

    Java面试宝典2020修订版V1.0.1.doc

    31、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 33、数字转字符有多少种方式,分别是什么 22 34、Java创建对象有几种方式 22 35、写出验证...

    Java开发技术大全(500个源代码).

    localVSmember.java 局部变量与成员变量同名问题示例 onlyTest.java 对象传值示例 otherClass.java 从类的外部访问对象的成员 showInstVar.java 演示不同的对象拥有不同的成员变量 showMain.java 演示main方法...

    java面试800题

    Q0041 Java保留字 11个:byValue, cast, false, future, generic, inner, operator, outer, rest, true, var. Q0042 Java的值传递的规则? Java基本类型的都是值传递,对象使用的都是引用传递 Q0043 java相关概念 ...

    【05-面向对象(下)】

     –在外部类以外的地方使用内部类,内部类完整的类名应该OuterClass.InnerClass.  –在外部类以外的地方使用非静态内部类创建对象的语法如下:OuterInstance.new InnerConstructor()  –在外部类以外的地方使用...

    MySQL命令大全

    RELOAD: 重载访问控制表,刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限: Alter: 修改已存在的数据表(例如增加/删除列)和索引。 Create: 建立新的数据库或数据表。 Delete: 删除表的记录...

    MYSQL常用命令大全

    RELOAD: 重载访问控制表,刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限: Alter: 修改已存在的数据表(例如增加/删除列)和索引。 Create: 建立新的数据库或数据表。 Delete: 删除表的记录。 ...

Global site tag (gtag.js) - Google Analytics