1 回答

TA貢獻1846條經驗 獲得超7個贊
我認為這曾經是 AWT 的問題。
IIRC 這些類提供了一個不執(zhí)行任何操作的默認方法,您可以重載它 - 為了執(zhí)行諸如發(fā)送應用程序正在關閉的任何適當通知、保存任何未保存的數據、釋放您存儲的任何資源等操作等等等等。
從這個角度來看,這是有道理的??蚣懿恢滥陉P閉時要做什么,因此它為您的代碼提供了一個位置。
由于這個(或任何“為什么?”問題)有點哲學性,請允許我通過一個簡短的轉移來深入探討這個問題,它說明了解決同一問題的不同方法:
在 Mac 上,“代表”有相似但不同的概念。例如,我不會將 Window 子類化,而是將 Window 交給一個“Window-Lifecycle-Delegate-iser”,然后 api 將在發(fā)生時調用我的委托上的適當方法。
這在一定程度上對于 Mac 來說效果很好,因為 Objective-C 比 Java 更接近 Smalltalk 風格。特別是,您可以向對象發(fā)送一條消息(讀作:調用方法),如果該對象沒有說出該消息(讀作:該對象上沒有相應的方法),那么在 Objective-C 中,它就會無處可去,而在爪哇它卻尖叫著死去。
因此,在 Java 中,您必須實現(xiàn)接口上的每個方法,而對于 Objective-C,您只需執(zhí)行您真正關心的方法。因此,您可以創(chuàng)建一個大型 API,其中可能會對委托進行 50-100 次調用,并且您不會讓開發(fā)人員不知所措,因為他們可以忽略其中的 95-99%。
以下是 Java SE 教程中的一些代碼:
public class HelloWorldSwing {
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
所以在這里我們看到我們有這個方法,它創(chuàng)建一個 JFrame(一個奇特的窗口),然后立即指定當用戶嘗試退出時它希望應用程序的行為如何進行。在這種情況下,他們只是選擇批量標準選項。
EXIT_ON_CLOSE 不是唯一的選項,您可能會發(fā)現(xiàn)查看它們很有趣。
這很重要,因為稍后:
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
我們看到該應用程序正在其自己的線程內運行。
因此,在幕后,計算機有某種無限循環(huán)來保持 UI 的活力。這部分需要知道可以打破該循環(huán)并讓線程死亡。
(invokeLater、Runnable 和 run 都是我們在這里處理線程的線索:D)
添加回答
舉報