欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
關(guān)于JAVA匿名內部類(lèi),回調,事件模式

關(guān)于JAVA匿名內部類(lèi),回調,事件模式的一點(diǎn)討論 VS dotNET事件模式

關(guān)于JAVA匿名內部類(lèi)的一點(diǎn)討論.
基本理論:
-----------------------------------------------------
關(guān)于JAVA內部類(lèi):一個(gè)內部類(lèi)的定義是定義在另一個(gè)類(lèi)內部的類(lèi)。

  存在它的原因是:

  1.一個(gè)內部類(lèi)的對象能夠訪(fǎng)問(wèn)創(chuàng )建它的對象的實(shí)現,包括私有數據。即內部類(lèi)實(shí)例對包含它的哪個(gè)類(lèi)的實(shí)例來(lái)說(shuō),是特權的。

  2.對于同一個(gè)包中的其他類(lèi)來(lái)說(shuō),內部類(lèi)能夠隱藏起來(lái),換句話(huà)說(shuō),內部類(lèi)不管方法的可見(jiàn)性如何,那怕是public,除了包容類(lèi),其他類(lèi)都無(wú)法使用它。

  3.匿名內部類(lèi)可以很方便的定義回調。

  4.使用內部類(lèi)可以非常方便的編寫(xiě)事件驅動(dòng)程序。


其實(shí)它真正的目的僅僅為了定義回調--進(jìn)一步就是事件驅動(dòng)。

接口和回調:編程一個(gè)常用的模式是回調模式,在這種模式中你可以指定當一個(gè)特定時(shí)間發(fā)生時(shí)回調對象上的方法。
--------------------------------------------------
 注意事項:
 
 匿名類(lèi)和內部類(lèi)中的中的this :
 有時(shí)候,我們會(huì )用到一些內部類(lèi)和匿名類(lèi)。當在匿名類(lèi)中用this時(shí),這個(gè)this則指的是匿名類(lèi)或內部類(lèi)本身。
 這時(shí)如果我們要使用外部類(lèi)的方法和變量的話(huà),則應該加上外部類(lèi)的類(lèi)名。如下面這個(gè)例子:

 

public class A {
  
int i = 1;

  public A() {
    Thread thread 
= new Thread() {
      public 
void run() {
        
for(;;) {
          A.
this.run();
          
try {
            sleep(
1000);
          } 
catch(InterruptedException ie) {
          }
        }
      }
    };
    thread.start();
  }  

  public 
void run() {
    System.out.println(
"i = " + i);
    i
++;
  }

  public static 
void main(String[] args) throws Exception {
    
new A();
  }

}


 

    在上面這個(gè)例子中, thread 是一個(gè)匿名類(lèi)對象,在它的定義中,它的 run 函數里用到了外部類(lèi)的 run 函數。
    這時(shí)由于函數同名,直接調用就不行了。這時(shí)有兩種辦法,一種就是把外部的 run 函數換一個(gè)名字,但這種辦法對于一個(gè)開(kāi)發(fā)到中途的應用來(lái)說(shuō)是不可取的
    。那么就可以用這個(gè)例子中的辦法用外部類(lèi)的類(lèi)名加上 this 引用來(lái)說(shuō)明要調用的是外部類(lèi)的方法 run。
    --------------------------------------------------
   
   
    對于這個(gè)例子:

this.test(new Inner(){
             public 
void method1(){
                 System.out.print(
"1111");
           }
            
             public 
void method2(){
                 System.out.print(
"22222");
           }
});

這個(gè)時(shí)候調用test()方法,那Inner類(lèi)的method1和method2是什么時(shí)候被調用的?難道也是this對象向他們發(fā)消息(比如傳入一個(gè)參數)嗎?還是直接顯式的調用??
 
對于Inner類(lèi),除了this這個(gè)類(lèi),就是this.test(...那句中的this,它能夠調用Inner類(lèi)的方法,其他地方都不行,然而,這也需要你在類(lèi)中有個(gè)地方保存有對這個(gè)內部類(lèi)實(shí)例的引用才可以。再說(shuō)明一次,內部類(lèi)是用來(lái)在某個(gè)時(shí)刻調用外面的方法而存在的--這就是回調。

為了說(shuō)明內部類(lèi)實(shí)例的方法只能在包容類(lèi)的實(shí)例中調用,其他地方無(wú)法調用,給個(gè)例子如下:

JAVA2實(shí)用教程源碼:

 

 /** 一個(gè)應用程序,用來(lái)演示內部類(lèi)的使用 */

/** 類(lèi)Outer */
class Outer{ 
private static 
int size;

/** 內部類(lèi)Inner的聲明 */
public class Inner{ 
private 
int size;

/** 方法doStuff() */
public 
void doStuff(int size){ 
size
++//存取局部變量
this.size++;  //存取其內部類(lèi)的成員變量
Outer.this.size++//存取其外部類(lèi)的成員變量
System.out.println(size+" "+this.size+" "+Outer.this.size);
}
}
//內部類(lèi)Inner結束

/** 類(lèi)Outer中定義的實(shí)例方法testInner()方法 */
public 
void testInner(){
Inner i
=new Inner();
i.doStuff(
5); 


/** main()方法 */
public static 
void main(String[] a){ 
Outer o
=new Outer();
o.testInner();
}
}
//類(lèi)Outer結束

 

------------------------------------------------
那么,如何使用內部類(lèi),匿名類(lèi)實(shí)現事件處理呢?

JAVA---事件適配器


 1.事件適配器--EventAdapter

  下例中采用了鼠標適配器:
  

import java.awt.*;
  import java.awt.event.
*;
  public class MouseClickHandler extends MouseAdaper{
    public 
void mouseClicked(MouseEvent e) //只實(shí)現需要的方法
       { ……}
  } 

 

  java.awt.event包中定義的事件適配器類(lèi)包括以下幾個(gè):
  1.ComponentAdapter( 組件適配器)
  2.ContainerAdapter( 容器適配器)
  3.FocusAdapter( 焦點(diǎn)適配器)
  4.KeyAdapter( 鍵盤(pán)適配器)
  5.MouseAdapter( 鼠標適配器)
  6.MouseMotionAdapter( 鼠標運動(dòng)適配器)
  7.WindowAdapter( 窗口適配器)

 2. 用內部類(lèi)實(shí)現事件處理

  內部類(lèi)(inner class)是被定義于另一個(gè)類(lèi)中的類(lèi),使用內部類(lèi)的主要原因是由于:
  ◇ 一個(gè)內部類(lèi)的對象可訪(fǎng)問(wèn)外部類(lèi)的成員方法和變量,包括私有的成員。
  ◇ 實(shí)現事件監聽(tīng)器時(shí),采用內部類(lèi)、匿名類(lèi)編程非常容易實(shí)現其功能。
  ◇ 編寫(xiě)事件驅動(dòng)程序,內部類(lèi)很方便?! ?br>  因此內部類(lèi)所能夠應用的地方往往是在A(yíng)WT的事件處理機制中。

例5.11
   

import java.awt.* ;
   import java.awt.event.
*;
     public class InnerClass{
       private Frame f;
       private TextField tf;
       public InnerClass(){
       f
=new Frame("Inner classes example");
       tf
=new TextField(30);
     }

     public voidi launchFrame(){
       Label label
=new Label("Click and drag the mouse");
       f.add(label,BorderLayout.NORTH);
       f.add(tf,BorderLayout.SOUTH);
       f.addMouseMotionListener(
new MyMouseMotionListener());/*參數為內部類(lèi)對象*/
       f.setSize(
300,200);
       f.setVisible(
true); 
     }

     class MyMouseMotionListener extends MouseMotionAdapter{ 
/*內部類(lèi)開(kāi)始*/
       public 
void mouseDragged(MouseEvent e) {
         String s
="Mouse dragging: x="+e.getX()+"Y="+e.getY();
         tf.setText(s); }
       } ;

       public static 
void main(String args[]) {
         InnerClass obj
=new InnerClass();
         obj.launchFrame();
       }
     }
//內部類(lèi)結束
    }


 

 3.匿名類(lèi)(Anonymous Class)

  當一個(gè)內部類(lèi)的類(lèi)聲名只是在創(chuàng )建此類(lèi)對象時(shí)用了一次,而且要產(chǎn)生的新類(lèi)需繼承于一個(gè)已有的父類(lèi)或實(shí)現一個(gè)接口,才能考慮用匿名類(lèi),由于匿名類(lèi)本身無(wú)名,因此它也就不存在構造方法,它需要顯示地調用一個(gè)無(wú)參的父
類(lèi)的構造方法,并且重寫(xiě)父類(lèi)的方法。所謂的匿名就是該類(lèi)連名字都沒(méi)有,只是顯示地調用一個(gè)無(wú)參的父類(lèi)的構造方法。

例5.12
   

import java.awt.* ;
   import java.awt.event.
*;
    public class AnonymousClass{
     private Frame f;
     private TextField tf;
     public AnonymousClass(){
      f
=new Frame("Inner classes example");
      tf
=new TextField(30);
    }
    public 
void launchFrame(){
      Label label
=new Label("Click and drag the mouse");
      f.add(label,BorderLayout.NORTH);
      f.add(tf,BorderLayout.SOUTH);
      f.addMouseMotionListener(
new MouseMotionAdapter(){ //匿名類(lèi)開(kāi)始
       public void mouseDragged(MouseEvent e){
        String s
="Mouse dragging: x="+e.getX()+"Y="+e.getY();
        tf.setText(s); }
      } ); 
//匿名類(lèi)結束 
      f.setSize(300,200);
      f.setVisible(
true);
      }
       public static 
void main(String args[]) {
        AnonymousClass obj
=new AnonymousClass();
        obj.launchFrame();
        }
      }

 

  其實(shí)仔細分析,例5.11和5.12實(shí)現的都是完全一樣的功能,只不過(guò)采取的方式不同。5.11中的事件處理類(lèi)是一個(gè)內部類(lèi),而5.12的事件處理類(lèi)是匿名類(lèi),可以說(shuō)從類(lèi)的關(guān)系來(lái)說(shuō)是越來(lái)越不清楚,但
是程序也越來(lái)越簡(jiǎn)練。熟悉這兩種方式也十分有助于編寫(xiě)圖形界面的程序。

親自在IDE中實(shí)踐一下,會(huì )理解的更深切一點(diǎn)。

然而,在.NET中實(shí)現事件模式,就要簡(jiǎn)單的多,這樣的文章很多,不過(guò)也不妨繼續討論討論。


posted on 2004-09-11 13:45 海天一鷗 閱讀(3738) 評論(9)  編輯 收藏 收藏至365Key 所屬分類(lèi): JAVA技術(shù)

評論

# re: 關(guān)于JAVA匿名內部類(lèi),回調,事件模式的一點(diǎn)討論 VS dotNET事件模式 2004-09-15 11:32 海天一鷗

http://www.cnblogs.com/sgsoft/articles/43287.aspx

參照該文代碼,可以看看.NET是如何實(shí)現事件驅動(dòng)的,簡(jiǎn)單的讓人害怕!
  回復   

# re: 關(guān)于JAVA匿名內部類(lèi),回調,事件模式的一點(diǎn)討論 VS dotNET事件模式 2004-12-17 10:59 弓長(cháng)三壽

不錯不錯,內容寫(xiě)得比較明白,有條理!
希望多看到這樣高水平的文章!  回復   

# re: 關(guān)于JAVA匿名內部類(lèi),回調,事件模式的一點(diǎn)討論 VS dotNET事件模式 2004-12-28 11:13 金卯刀

沒(méi)找到我要的東西,哥們能幫忙嗎?
我要事件在生活中的實(shí)例,還有和另一門(mén)語(yǔ)言的比較?!  回復   

# re: 關(guān)于JAVA匿名內部類(lèi),回調,事件模式的一點(diǎn)討論 VS dotNET事件模式 2004-12-28 11:15 就是暈~!

沒(méi)人給回,我暈,什么論壇?。??
狂暈,我頂!  回復   

# re: 關(guān)于JAVA匿名內部類(lèi),回調,事件模式的一點(diǎn)討論 VS dotNET事件模式 2004-12-28 13:14 海天一鷗

你把需求寫(xiě)一個(gè)發(fā)郵件給我不就可以呢?!
文章只能拋磚引玉。  回復   

# 關(guān)于內部類(lèi)的一篇文章..得好好看看。暈[TrackBack] 2005-02-23 17:57 小力力力

Ping Back來(lái)自:blog.csdn.net
小力力力引用了該文章,地址:http://blog.csdn.net/faintbear/archive/2005/02/23/299076.aspx  回復   

# re: 關(guān)于JAVA匿名內部類(lèi),回調,事件模式的一點(diǎn)討論 VS dotNET事件模式 2005-09-28 11:08 hyx

多謝指教。是一篇好文章。  回復   

# re: 關(guān)于JAVA匿名內部類(lèi),回調,事件模式的一點(diǎn)討論 VS dotNET事件模式 2005-10-11 11:46 kennwang

非常好 感謝  回復   

# re: 關(guān)于JAVA匿名內部類(lèi),回調,事件模式的一點(diǎn)討論 VS dotNET事件模式 2005-10-21 09:15 chabulier

不錯,簡(jiǎn)單明了,道出真諦.  回復  

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
在java中如何實(shí)現畫(huà)圖
Java筆記(八 圖形界面編程)
JAVA事件的總結A
【轉載】JAVA簡(jiǎn)單后門(mén)程序
java必學(xué)必會(huì )之GUI編程
Socket簡(jiǎn)單實(shí)例
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久