最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java基本事件處理機制解析

 更新時間:2023年10月18日 10:08:07   作者:Robin_zd  
這篇文章主要介紹了java基本事件處理機制解析,?Java事件處理機制是一種用于處理用戶交互和系統(tǒng)事件的編程模型,它基于事件驅(qū)動的思想,通過監(jiān)聽和響應(yīng)事件來實現(xiàn)程序的交互性和動態(tài)性,需要的朋友可以參考下

基本事件處理機制分析

一、什么是事件處理機制?

事件處理機制中參與有三種角色:事件源、事件、事件監(jiān)聽者

  • 事件源:產(chǎn)生事件的對象/組件
  • 事件:事件源的狀態(tài)發(fā)生改變之后的對象,如鼠標操作、鍵盤操作等
  • 事件監(jiān)聽者:負責(zé)監(jiān)聽事件的發(fā)生并處理事件

二、Action與ActionListener機制分析

Java GUI可以利用ActionListener進行ActionEvent的監(jiān)聽

其步驟如下:

  • 事件監(jiān)聽者實現(xiàn)了接口ActionListener的類實例
  • 事件源對象能夠添加監(jiān)聽器對象并向其發(fā)送事件對象
  • 當(dāng)事件發(fā)生時,事件源將事件對象發(fā)送給添加的監(jiān)聽器
  • 監(jiān)聽器對象對事件對象進行處理響應(yīng)

示例:

//actionlistener可以作為外部類、內(nèi)部類、匿名類進行監(jiān)聽,本示例使用內(nèi)部類
//兩個監(jiān)聽者對應(yīng)兩個button組件
private class bt1Handler implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        jTextArea.setText("按鈕一點擊");
    }
}
private class bt2Handler implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        jTextArea.setText("按鈕二點擊");
    }
}
//添加監(jiān)視器
bt1.addActionListener(bt1Handler);
bt2.addActionListener(bt2Handler);

效果:

在這里插入圖片描述

三、其他事件處理方式

(1)普通方法調(diào)用

它是一種阻塞式調(diào)用,例如A類中的方法a要調(diào)用B類中的方法b,必須要等待b方法執(zhí)行完畢才能執(zhí)行b方法之后的代碼,如果b方法執(zhí)行時間較長,整個過程就被阻塞在了這一步。

(2)回調(diào)函數(shù)

回調(diào)函數(shù)的概念十分簡單,就是將函數(shù)作為另一個函數(shù)的參數(shù),java中不允許方法作為參數(shù)們只能傳入類,然后調(diào)用類的方法,分為同步與異步回調(diào)函數(shù),下面分別實現(xiàn):

同步回調(diào):

//示例:我與朋友打電話讓他去我家吃飯,朋友同意
//Me類:
public class Me implements callable {
MyFriend friend;
public Me( MyFriend friend){
this.friend=friend;
}
public void callFriend() throws Exception {
	System.out.println("開始執(zhí)行同步回調(diào)函數(shù)");
System.out.println("去我家吃飯");
friend.answer(this);
System.out.println("開始執(zhí)行同步回調(diào)函數(shù)");
}
@Override
//回調(diào)函數(shù)
public void call(){
System.out.println("好好好");
}
}
//MyFriend類:
public class MyFriend {
public void answer( callable callable) throws Exception{
System.out.println("接線中.....");
callable.call();
}
}
//callable接口:
public interface callable {
public void call();
}
//test類:
public class testCallBack {
public static void main(String[] args) throws  Exception{
MyFriend friend=new MyFriend();
Me me=new Me(friend);
me.callFriend();
}
}

結(jié)果:

在這里插入圖片描述

異步回調(diào):

//與同步回調(diào)區(qū)別是,回調(diào)函數(shù)單開一個線程,不影響和Me類等待回調(diào)函數(shù)執(zhí)行完成
public void callFriend() throws Exception {
System.out.println("開始執(zhí)行異步回調(diào)函數(shù)");
new Thread(new Runnable() {
  @Override
  public void run() {
      try {
          System.out.println("去我家吃飯");
          friend.answer(Me.this);
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
}).start();
System.out.println("異步回調(diào)函數(shù)執(zhí)行完成");
}

結(jié)果:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9BFKSZiM-1663237616444)(C:\Users\zdsss\AppData\Roaming\Typora\typora-user-images\image-20220915174027734.png)]

(3)觀察者模式

所謂觀察者模式,其實是一種一對多的模式,有一個被觀察者以及多個觀察者,當(dāng)被觀察者的狀態(tài)發(fā)生變化時,觀察者可以收到相應(yīng)的信息。像我們平時訂閱一個微信公眾號或者是b站上關(guān)注一個up主,當(dāng)其發(fā)布新內(nèi)容時,你就會得知相應(yīng)的信息。

示例:

//你關(guān)注的up主更新了,并私信通知他的所有粉絲

//觀察者接口
public interface Observer {
    public void update(String video);
}
//具體觀察者(粉絲)類
public class Fan implements Observer{
    private String name;//粉絲姓名
    public Fan(String name){
        this.name=name;
    }

    @Override
    public void update(String video){
        System.out.println(name+"! "+video);
    }
}

//被觀察者接口
public interface UpLoader {
    //添加粉絲
    void addFan(Fan fan);
    //刪除粉絲
    void deleteFan(Fan fan);
    //通知粉絲
    void informFan(String video);
}

//實現(xiàn)類
public class BilibliUpLoader implements UpLoader{
    public String getName() {
        return name;
    }

    private String name;
    private List<Fan> fanList=new ArrayList<>();
    public BilibliUpLoader(String name){
        this.name=name;
    }
    @Override
    public void addFan(Fan fan) {
        fanList.add(fan);
    }

    @Override
    public void deleteFan(Fan fan) {
        fanList.remove(fan);
    }

    @Override
    public void informFan(String video) {
        for(Fan fan:fanList){
            fan.update(video);
        }
    }
}
//測試類
public class test {
    public static void main(String[] args) {
        BilibliUpLoader bilibliUpLoader=new BilibliUpLoader("Mike");
        Fan fan=new Fan("jack");
        Fan fan1=new Fan("Bob");
        Fan fan2=new Fan("Mary");
        Fan fan3=new Fan("Lisa");
        bilibliUpLoader.addFan(fan);
        bilibliUpLoader.addFan(fan1);
        bilibliUpLoader.addFan(fan2);
        bilibliUpLoader.addFan(fan3);
        bilibliUpLoader.informFan(bilibliUpLoader.getName()+"的新視頻來了");
    }
}

結(jié)果:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1R25jW6d-1663237616444)(C:\Users\zdsss\AppData\Roaming\Typora\typora-user-images\image-20220915174005365.png)]

(4)幾種事件處理機制綜合比較

以上四種事件處理機制中可以分為兩類,普通方法調(diào)用為一類,其他三種為第二類:

抽象與解耦:

這三種事件處理方式利用接口將抽象類與實現(xiàn)類的耦合度降低,同時將接口充當(dāng)調(diào)用者與被調(diào)用者之間的第三者,通過接口盡可能減少不同類的依賴關(guān)系,盡可能增大數(shù)據(jù)耦合,從而降低耦合程度。

高內(nèi)聚:

后三鐘事件處理方式,將不同主體分開來(如觀察者與被觀察者),每個實體類專注于自身的職責(zé)(即單一原則)。

好處:

“高內(nèi)聚,低耦合”使得后面三種事件處理方式易于擴展、靈活性高、更易于維護與開發(fā),而普通的函數(shù)調(diào)用則不具備這些優(yōu)點。這也是面向接口編程的一大特點。

到此這篇關(guān)于java基本事件處理機制解析的文章就介紹到這了,更多相關(guān)java事件處理機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 快速了解Hibernate中的Session

    快速了解Hibernate中的Session

    這篇文章主要介紹了快速了解Hibernate中的Session,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java批量從svn導(dǎo)出多個項目代碼實例

    Java批量從svn導(dǎo)出多個項目代碼實例

    這篇文章主要介紹了java批量從svn導(dǎo)出多個項目代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 解決springmvc項目中使用過濾器來解決請求方式為post時出現(xiàn)亂碼的問題

    解決springmvc項目中使用過濾器來解決請求方式為post時出現(xiàn)亂碼的問題

    這篇文章主要介紹了springmvc項目中使用過濾器來解決請求方式為post時出現(xiàn)亂碼的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java多線程并發(fā)基礎(chǔ)實戰(zhàn)舉例

    Java多線程并發(fā)基礎(chǔ)實戰(zhàn)舉例

    進程與線程的區(qū)別,解釋并行與并發(fā)的概念,分析多線程導(dǎo)致的線程安全問題(可見性、原子性、有序性),并探討Java通過volatile、synchronized及Happens-Before規(guī)則解決這些問題的機制,最后分類線程安全程度及實現(xiàn)方案,感興趣的朋友一起看看吧
    2025-09-09
  • Java跨session實現(xiàn)token接口測試過程圖解

    Java跨session實現(xiàn)token接口測試過程圖解

    這篇文章主要介紹了Java跨session實現(xiàn)token接口測試過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • java幾種排序算法的實現(xiàn)及簡單分析

    java幾種排序算法的實現(xiàn)及簡單分析

    這篇文章主要介紹了java幾種排序算法的實現(xiàn)及簡單分析,實例分析了插入排序、希爾排序、選擇排序等常用排序算法,并分析了各個算法的優(yōu)劣,需要的朋友可以參考下
    2015-05-05
  • java并發(fā)包JUC同步器框架AQS框架原文翻譯

    java并發(fā)包JUC同步器框架AQS框架原文翻譯

    發(fā)現(xiàn)了一篇JDK作者的論文《The?java.util.concurrent?Synchronizer?Framework》主要描述了作者對AbstractQueuedSynchronizer同步器框架的設(shè)計和實現(xiàn)。權(quán)威性毋庸置疑!自然需要拜讀一下,配上中文翻譯,希望大家能有所收獲
    2022-02-02
  • Java CompletableFuture與ForkJoinPool的關(guān)系及說明

    Java CompletableFuture與ForkJoinPool的關(guān)系及說明

    這篇文章主要介紹了Java CompletableFuture與ForkJoinPool的關(guān)系及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • JAVA實現(xiàn)數(shù)字大寫金額轉(zhuǎn)換的方法

    JAVA實現(xiàn)數(shù)字大寫金額轉(zhuǎn)換的方法

    這篇文章主要介紹了JAVA實現(xiàn)數(shù)字大寫金額轉(zhuǎn)換的方法,涉及java針對字符串與數(shù)組的遍歷與轉(zhuǎn)換相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • java算法實現(xiàn)預(yù)測雙色球中獎號碼

    java算法實現(xiàn)預(yù)測雙色球中獎號碼

    這篇文章主要介紹了java算法實現(xiàn)預(yù)測雙色球中獎號碼的相關(guān)資料,需要的朋友可以參考下
    2015-12-12

最新評論

濮阳市| 观塘区| 内丘县| 丽水市| 雷州市| 高唐县| 江阴市| 霍林郭勒市| 曲松县| 离岛区| 四子王旗| 兴安盟| 体育| 泸溪县| 逊克县| 仁寿县| 泽普县| 松江区| 新安县| 大化| 灌南县| 鲁甸县| 神池县| 双流县| 西青区| 乾安县| 合肥市| 锡林浩特市| 宜川县| 阳曲县| 永城市| 海宁市| 新巴尔虎右旗| 吴川市| 高邑县| 西安市| 渝北区| 抚宁县| 嘉兴市| 从化市| 仪陇县|