内部类

原创 2007年09月19日 14:43:00
 
       匿名内部类,比如下面函数内部initialize定义了两个匿名类(红色代码部分):
   publicsynchronizedvoid initialize(Environment env,
                                        Detector detector,
                                        DaemonListener listener,
                                        PlainLogger[] loggers) throws NullPointerException,
                    IllegalStateException {
 
        if (fInitialized) {
            return;
        }
 
        Helper.notNull( env, "environment" );
        Helper.notNull( detector, "detector" );
 
       fDetector = detector;
        fDaemonListener = listener;
 
        // Check the loggers.
        if (loggers != null) {
            for (int i = 0; i < loggers.length; i++) {
                if (loggers[i] != null && !loggers[i].isLoggable( )) {
                    thrownew IllegalStateException( "Logger" + i
                                                     + " isn't loggable" );
                }
            }
 
            // Get loggers.
            if (loggers.length >= 1) {
                fAppLogger = loggers[0];
            }
            if (loggers.length >= 2) {
                fErrorLogger = loggers[1];
            }
        }
 
        // Initialize the daemon options first.
        initDaemonOptions( env );
 
        // Check the loggers.
        if (loggers != null) {
            for (int i = 0; i < loggers.length; i++) {
                if (loggers[i] != null && !loggers[i].isLoggable( )) {
                    thrownew IllegalStateException( "Logger" + i
                                                     + " isn't loggable" );
                }
            }
 
            // Get loggers.
            if (loggers.length >= 1) {
                fAppLogger = loggers[0];
            }
            if (loggers.length >= 2) {
                fErrorLogger = loggers[1];
            }
        }
 
        log( "Using Rv Daemon: " + fDaemonOptions.getCurTransportOption( ) );
 
        // Implements a detector listener.
        DetectorListener detectorListener = new DetectorListener( ) {
 
            public void onConnected() {
                String newDaemon = fDaemonOptions.getCurTransportOption( );
                log( "Connected to Daemon: " + newDaemon );
                synchronized (Daemon.this) {
                    fState = DaemonState.CONNECTED;
                   
                    for (Iterator i = fSwitchHandlers.iterator( ); i.hasNext( );) {
                        ((SwitchHandler) i.next( )).doSwitching( newDaemon );
                    }
                   
                    fState = DaemonState.SWITCHED;
                }
 
                log( "Switched to Daemon: " + newDaemon );
 
                if (fDaemonListener != null) {
                    fDaemonListener.onStateChanged( fState,
                                                    fLastDaemon,
                                                    newDaemon );
                }
            }
 
            public void onDisconnected() {
 
                synchronized (Daemon.this) {
                    fState = DaemonState.SWITCHING;
                    round( );
                }
                log( "Disconnected to Daemon: " + fLastDaemon );
 
                if (fDaemonListener != null) {
                    fDaemonListener.onStateChanged( fState,
                                                    fLastDaemon,
                                                    fDaemonOptions.peekNextAvailTransportOption( ) );
                }
                detect( );
            }
        };
 
        fDetector.registerDetectorListener( detectorListener );
 
        // Do the first connecting in other thread.
        Thread first = new Thread( "InitialDetector" ) {
            public void run() {
                detect( );
            }
        };
        first.start( );
 
        fInitialized = true;
        log( "Daemon detecting initialized." );
    }
      
       new DetectorListener( ){...}等价于创建一个派生自接口DectorListener的子类,然后返回该类的引用。 同样的道理,另外一个是从Thread派生并且重写了run函数,因此该类可以作为一个县城对象运行。
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

Java 内部类与外部类的关系

内部类分为:非静态内部类、静态类内部类、匿名内部类和局部内部类。            内部类可以直接访问外部类的私有属性,这是由于这个原因。        1、非静态内部类对象会持有外部类的对象。其...
  • lmj121212
  • lmj121212
  • 2016年11月23日 21:39
  • 798

JAVA和C++内部类

JAVA和C++内部类的异同
  • qq78442761
  • qq78442761
  • 2016年11月21日 22:52
  • 452

成员内部类.局部内部类.静态内部类.匿名内部类的区别

一 对于非静态内部类,不能有静态成员,例如变量,方法等。静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量。非静态内部类的非静态成员可以访问外部类的非静态变量。 成员内部类...
  • dipang00
  • dipang00
  • 2016年10月17日 11:51
  • 756

内部类和外部类之间互相访问

内部类与外部类之间的成员互相访问  内部类可以访问外部类的任何成员,包括private成员。  外部类访问内部类的成员需要创建内部类的对象,之后可以访问内部类的任何成员,包括private成员,需...
  • wangkjs
  • wangkjs
  • 2015年08月11日 11:43
  • 1100

Java内部类总结 (吐血之作)

内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。 内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访...
  • a564663276
  • a564663276
  • 2013年05月23日 11:29
  • 48177

创建内部类的实例方法

方法1:在外部类类初始化内部类实例 class Start { public static void main(String [] args) { MyOuter outer=new My...
  • leafinsnowfield
  • leafinsnowfield
  • 2015年08月09日 10:42
  • 2029

c++内部类和外部类(java)

(1)简介: 内部类其实就是一种在类声明里面定义的一种局部数据类型。(非常类似于struct Node声明的),这和java的还有存在区别的。 ---- 内部类的声明有public和private...
  • u010700335
  • u010700335
  • 2014年11月23日 12:15
  • 1227

java内部类有什么好处?为什么需要内部类?

提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。内部类从表面上看,就...
  • a564663276
  • a564663276
  • 2013年05月23日 10:27
  • 6879

java静态内部类

转载:http://www.cnblogs.com/Alex--Yang/p/3386863.html    http://book.51cto.com/art/201202/317517.htm ...
  • a465456465
  • a465456465
  • 2015年07月01日 11:25
  • 761

java中的外部类和内部类

1.概念  内部类:顾名思义
  • wuzhoudao
  • wuzhoudao
  • 2014年06月17日 19:09
  • 987
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:内部类
举报原因:
原因补充:

(最多只允许输入30个字)