更新時(shí)間:2022-07-21 10:52:02 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2365次
與C和C++ 語言不同,Java沒有回調(diào)函數(shù)的概念。Java 不使用指針的概念,因此不支持回調(diào)函數(shù)。但是,我們可以通過傳遞引用函數(shù)位置的接口而不是傳遞函數(shù)的內(nèi)存地址來創(chuàng)建回調(diào)函數(shù)。
Java中使用接口的回調(diào)函數(shù)的語法如下:
公共接口 接口A {
公共 字符串 callA() ;
}
Java 中的回調(diào)函數(shù)的工作方式如下:
創(chuàng)建一個(gè)具有單個(gè)方法 A() 的接口 X。
使用 A 作為方法參數(shù)創(chuàng)建方法 method1()。
在 method1() 中調(diào)用 A() 方法。
為了調(diào)用 method1(),我們傳遞 X 的實(shí)例并覆蓋 A()。
使用箭頭符號(hào)作為關(guān)鍵字新聞的替代方法,以便代碼清晰。
讓我們舉個(gè)例子,理解一個(gè)我們可以在Java中使用回調(diào)函數(shù)的場(chǎng)景,
例子:
我們實(shí)現(xiàn)了計(jì)算州稅(總稅)的稅收計(jì)算器。對(duì)于一個(gè)州,稅收可以不止一種,但對(duì)于我們的示例,假設(shè)我們只有兩種稅,即州稅和中央稅。在這兩種稅中,所有州的中央稅都相同,但各州的州稅可能不同。
static void calculateTax(stateTax() 函數(shù)的地址)
{
中央稅= 2500.0
state_tax = 根據(jù) 接口 方法 的地址獲取
total_tax = central_tax + state_tax;
}
在上面的代碼中,stateTax() 方法的地址或引用被傳遞用于計(jì)算calculateTax() 方法中的稅款總和。狀態(tài)代碼因狀態(tài)而異,因此我們將 stateTax() 方法聲明為接口中的抽象方法。
接口 狀態(tài)稅
{
雙 州稅();
}
下面是哈里亞納邦和北方邦的 stateTax() 方法的實(shí)現(xiàn):
哈里亞納邦 類實(shí)現(xiàn) StateTax{
公共雙 州稅(){
返回1500.0 ;
}
}
UP 類實(shí)現(xiàn) StateTax{
公共雙 州稅(){
返回2500.0 ;
}
}
CallbackExample1.java
//導(dǎo)入需要的類和包
導(dǎo)入 java.util.Scanner;
//創(chuàng)建具有抽象方法stateTax()的接口StateTax
界面 州稅{
//聲明抽象方法
雙 州稅();
}
// 實(shí)現(xiàn)哈里亞納邦的 StateTax 接口
哈里亞納邦 類實(shí)施 StateTax {
公共雙重 狀態(tài)稅()
{
返回1500.0 ;
}
}
// 為 Utter Pradesh 實(shí)現(xiàn) StateTax 接口
UP 類實(shí)施 StateTax {
公共雙重 狀態(tài)稅()
{
返回2500.0 ;
}
}
// 創(chuàng)建 CallbackExample1 來計(jì)算總稅額
類 回調(diào)示例 1 {
//main() 方法開始
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException //處理異常
{
//創(chuàng)建一個(gè) Scanner 類的實(shí)例來接受用戶輸入
掃描儀 sc = new Scanner(System.in);
System.out.println( "輸入狀態(tài)名" );
//從用戶那里獲取狀態(tài)名稱
字符串狀態(tài) = sc.next();
// 將狀態(tài)名稱存儲(chǔ)在對(duì)象 obj 中
類 obj = Class.forName(state);
// 創(chuàng)建由 StateTax 引用的 obj 類的新對(duì)象
StateTax 參考 = (StateTax)obj.newInstance();
//通過傳遞StateTax的引用調(diào)用calculateTax()方法計(jì)算總稅
計(jì)算稅(參考);
}
static void calculateTax(StateTax 數(shù)據(jù))
{
//所有州的中央稅都相同
雙 中央稅= 3500.0 ;
// 獲取用戶輸入狀態(tài)的 state_Tax 并找到總稅
雙 state_Tax = data.stateTax();
雙 總稅 = state_Tax + central_Tax;
// 顯示結(jié)果
System.out.println( "該州的總稅額為=" +total_Tax);
}
}
輸出:
CallbackExample2.java
//為回調(diào)方法創(chuàng)建一個(gè)處理點(diǎn)擊事件的接口
接口 點(diǎn)擊處理程序 {
//創(chuàng)建抽象方法,即clickEventHandler(),它將作為回調(diào)
公共無效 點(diǎn)擊事件處理程序();
}
//創(chuàng)建一個(gè)處理回調(diào)并實(shí)現(xiàn)ClickHandler的類
類 處理 程序?qū)崿F(xiàn) ClickHandler {
//定義clickEventHandler()方法
公共無效 clickEventHandler(){
System.out.println( "按鈕正在點(diǎn)擊" );
}
}
//創(chuàng)建一個(gè)生成事件的類
類 按鈕類 {
公共無效 onClickEvent(ClickHandler obj)
{
obj.clickEventHandler();
}
}
//創(chuàng)建CallbackExample2類
公共類 CallbackExample2 {
//main() 方法開始
公共靜態(tài)無效 主要(字符串[]參數(shù)){
//創(chuàng)建一個(gè)ButtonClass對(duì)象
ButtonClass button = new ButtonClass();
//創(chuàng)建Handler類的對(duì)象
處理程序 hndlrObj = 新的 處理程序();
//傳遞ClickHandler的對(duì)象來執(zhí)行默認(rèn)操作
button.onClickEvent(hndlrObj);
//創(chuàng)建另一個(gè)ButtonClass對(duì)象
ButtonClass newButton = new ButtonClass();
//傳遞接口實(shí)現(xiàn)自己的操作
newButton.onClickEvent(新 ClickHandler(){
@覆蓋
//覆蓋在點(diǎn)擊時(shí)顯示輸出的clickEventHandler()
公共無效 clickEventHandler(){
System.out.println( "按鈕被點(diǎn)擊" );
}
});
}
}
輸出:
CallbackExample3.java
//為callback()方法創(chuàng)建類CallbackExample3
公共類 CallBackExample3 {
//主方法開始
公共靜態(tài)無效 主要(字符串參數(shù)[]){
//將接口名稱作為參數(shù)傳遞的函數(shù)
//創(chuàng)建一個(gè)方法并將接口作為參數(shù)傳遞
回調(diào)方法(新 接口X()
{
//創(chuàng)建callMethodX()
公共 字符串 callMethodX()
{
return "這是第一個(gè)回調(diào)" ;
}
});
// 創(chuàng)建一個(gè)方法并將接口作為參數(shù)傳遞
回調(diào)方法(新 接口X()
{
//創(chuàng)建callMethodX()
公共 字符串 callMethodX() {
return "這是第二次回調(diào)" ;
}
});
回調(diào)方法(()->
{
return "It is the third callback";
});
}
//define callbackMethod()
public static void callbackMethod(interfaceX obj)
{
//print callback messages
System.out.println(obj.callMethodX());
}
//create an interface
public interface interfaceX {
public String callMethodX();
}
}
輸出:
以上就是關(guān)于“Java回調(diào)函數(shù)的實(shí)現(xiàn)”介紹,大家如果想了解更多相關(guān)知識(shí),不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容從入門到精通,細(xì)致全面,很適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743