Time of Update: 2018-12-04
記憶是衍生自Lisp,Python,和Perl等過程性語言的一種設計模式,它可以對前次的計算結果進行記憶。 一個實現了記憶功能的函數, 帶有顯式的cache, 所以, 已經計算過的結果就能直接從cache中獲得, 而不用每次都進行計算.記憶能顯著的提升大計算量代碼的效率. 而且是一種可重用的方案.本文闡述了在Java中使用這一模式的方法,並提供了一個可以提供上述功能的"記憶類": Foo foo = (Foo) Memoizer.memoize(new FooImpl());
Time of Update: 2018-12-04
通過動態代理類來建立一個通用的緩衝封裝器 上面第二種方法僅有的缺點就是緩衝封裝器不能重用,每次我們希望添加一個緩衝給某個類,我們就要寫一個特殊的緩衝封裝器給目標介面.這是一個很慢,容易出錯的過程. Jdk1.3開始支援動態代理類: 特別的類能夠在運行期決定實現哪個介面-通常的模式都是,在運行期即決定實現哪個介面.通過這個,我們有可能實現一個通用的緩衝封裝器,我們稱它為Memoizer,在運行期決定實現哪個介面.這樣, CachingBinaryDigitsCalculator就是不再
Time of Update: 2018-12-04
實現計劃架構 在上一節,我們學習了如何使用計劃架構,並將它與 Java 定時器架構進行了比較。下面,我將向您展示如何?這個架構。除了 清單 3 中展示的 ScheduleIterator 介面,構成這個架構的還有另外兩個類 —— Scheduler 和 SchedulerTask 。這些類實際上在內部使用 Timer 和 SchedulerTask,因為計劃其實就是一系列的單次定時器。清單 5 和 6 顯示了這兩個類的原始碼: 清單 5. Scheduler package
Time of Update: 2018-12-04
UML已成為物件導向設計的標準圖形化工具,在UML定義的各種圖中,本文只涉及類圖。Java應用程式由許多類所構成,類圖的設計與實現,是Java實現物件導向應用程式的核心。本文通過一個具體的應用程式的設計與實現過程,詳細說明了利用UML類圖設計Java應用程式,使得開發過程標準化、可視化,代碼編程簡單化。 在類圖中,類被描述為帶有三層的盒子。 頂層為類名,一般用加粗字型表示。如果類是抽象的,其名稱用斜體表示;如果類是介面,則在類名上方標註<<interface>>。
Time of Update: 2018-12-04
一個好的使用者介面(GUI)的設計通常可以在現實世界找到相應的表現。例如,如果在您的面前擺放著一個類似於電腦鍵盤按鍵的一個簡單的按鈕,然而就是這麼簡單的一個按鈕,我們就可以看出一個GUI設計的規則,它由兩個主要的部分構成,一部分使得它具有了按鈕應該具有的動作特性,例如可以被按下。另外一部分則負責它的表現,例如這個按鈕是代表了A還是B。
Time of Update: 2018-12-04
原文:http://www.onjava.com/pub/a/onjava/2003/08/13/stored_procedures.html本文闡述了怎麼使用DBMS預存程序。我闡述了使用預存程序的基本的和進階特性,比如返回ResultSet。本文假設你對DBMS和JDBC已經非常熟悉,也假設你能夠毫無障礙地閱讀其它語言寫成的代碼(即不是Java的語言),但是,並不要求你有任何預存程序的編程經曆。預存程序是指儲存在資料庫並在資料庫端執行的程式。你可以使用特殊的文法在Java類中調用預存程序。在
Time of Update: 2018-12-04
ButtonModel類 ButtonModel維護著三種類型的狀態資訊:是否被按下(pressed),是否“武裝上了”(armed),是否被選擇(selected)。它們都是boolean類型的值。 一個按鈕被按下(pressed)是指當滑鼠在按鈕上面的時候,按下滑鼠但是還沒有鬆開滑鼠按鍵的狀態,及時使用者此時把滑鼠拖拽到按鈕的外面也沒有改變這種狀態。 一個按鈕是否“武裝了”(armed)是指按鈕被按下,並且滑鼠還在按鈕的上面。
Time of Update: 2018-12-04
同步經常作為斷面被引用。斷面是指一次只能有一個線程執行它。多個線程同時執行同步代碼是有可能的。這個誤解是因為很多程式員認為同步關鍵字鎖住了它所包圍的代碼。但是實際情況不是這樣的。同步加鎖的是對象,而不是代碼。因此,如果你的類中有一個同步方法,這個方法可以被兩個不同的線程同時執行,只要每個線程自己建立一個的該類的執行個體即可。參考下面的代碼:class Foo extends Thread { private int val; public Foo(int v) { val =
Time of Update: 2018-12-04
在編寫多線程代碼的時候經常發生多個線程等待一個事件的情況。這種情況多發生於多個線程在同步方法或者同步塊內調用wait方法等待同一個被鎖住的對象。當另一個鎖住該對象的線程從同步方法或者同步塊中調用notify或者notifyAll方法時這些等待線程被喚醒。notify調用僅僅喚醒一個線程,因此如果有多個線程正處於等待狀態,那麼不會有對鎖的競爭。另一方面,notifyAll調用喚醒所有的等待線程而造成競爭,然而只有一個線程能夠得到鎖,其它的都會被阻塞。當多個線程處於等待狀態時的問題是當調用notif
Time of Update: 2018-12-04
每個Java對象都有hashCode()和 equals()方法。許多類忽略(Override)這些方法的預設實施,以在對象執行個體之間提供更深層次的語義可比性。在Java理念和實踐這一部分,Java開發人員Brian
Time of Update: 2018-12-04
1.Java有類似於C語言中sizeof()的操作器嗎? 表面答案是Java沒有提供任何類似於C語言的sizeof()的操作器。但是,我們應該想想為什麼Java 程式員偶爾也需要它。 C語言程式員自己管理大多數的資料結構儲存分配,並且 sizeof()不負責瞭解分配的儲存塊的尺寸大小。C 儲存分配器如malloc(),只要涉及到對象初始化幾乎什麼事都不做:程式員必須設定作為更深一層對象指標的所有對象域。但是當所有的都說過並且編碼過的時候, C/C++ 儲存分配是相當有效。
Time of Update: 2018-12-04
一、概述 Jbuilder 9是功能強大的可視化Java整合開發工具,可以快速開發包括複雜企業級應用系統的各種Java程式,包括獨立運行程式、Applet程式、Servlet、JSP、EJB、Web Service等,最新的Jbuilder 9版本支援Sun的J2SE 1.4和J2EE 1.4。使用視覺化檢視開發程式有很多好處,其中最顯著的是能夠快速產生程式架構、設計圖形介面、偵錯工具等,此外Jbuilder
Time of Update: 2018-12-04
近來在項目中使用到了一個資料庫SQL語句,這個SQL語句是動態產生的,類似下面的方式: Double quantity = ...; String sql = "INSERT INTO " + tableName + " (id, name, quantity) VALUES(" + id + ",'" + name + "'," + quantity + ")"; 系統正常運行1年多了,突然近段時間系統出錯。由於生產環境缺乏充分的調試資訊,所以,調試非常困難。經過艱苦的追蹤和
Time of Update: 2018-12-04
三、Jbuilder 9整合式開發環境簡介圖10 從10中我們可以看出,JBuilder9的整合式開發環境是一個使用單一視窗介面,集編輯、管理檔案與工程、視覺化介面設計、瀏覽、編譯、調試和其他動作等多功能於一體的開發平台。以下是各個部分的名稱及其功能說明。 1、主功能表列(main menu) 主菜單對於編寫程式來說是非常重要的,比如使用者可以用它開啟、儲存工程和檔案,裝載儲存的檔案,在檔案之中尋找文本,編譯和偵錯工具等。 2、主工具列(main
Time of Update: 2018-12-04
在做了所有這些準備之後,下面就是這種圖形遍曆的標準實現:public static IObjectProfileNode profile (Object obj) { final IdentityHashMap visited = new IdentityHashMap (); final ObjectProfileNode root = createProfileTree (obj, visited,
Time of Update: 2018-12-04
在第一部分中,我們實現了5個類。在本部分中,我們接著說明如何利用UML類圖來設計餘下的各個類。為減少篇幅,本部分著重講解UML類圖及應用,對Java實現代碼不再詳細描述。 六、CGPoint類 CGPoint類說明了如何利用非抽象類別擴充抽象類別。CGPoint類是CGObject的子類,CGPoint類擴充了CGObject類,CGPoint類沒有再它所繼承的變數中增加變數,它所聲明的方法只有建構函式和要求它實現的抽象方法。其類圖如下: Java實現代碼為: // CGPoint.
Time of Update: 2018-12-04
在Java Collection Framework中定義的List實現有Vector,ArrayList和LinkedList。這些集合提供了對對象組的索引訪問。他們提供了元素的添加與刪除支援。然而,它們並沒有內建的元素排序支援。 你能夠使用java.util.Collections類中的sort()方法對List元素進行排序。你既可以給方法傳遞一個List對象,也可以傳遞一個List和一個Comparator。如果列表中的元素全都是相同類型的類,並且這個類實現了Comparable介面,
Time of Update: 2018-12-04
Java有一個很好的地方就是java的垃圾收集機制,這個機制整合於jvm的,對程式員來說是隱藏且不透明的。這種情況下,如何得到某個對象消耗的記憶體呢? 曾經看到過有人用以下方法來計算:在產生該object的前後都調用java.lang.Runtime.freeMemory()方法,然後看兩者之差即為該object消耗的記憶體量。 這種方法的代碼是: long totalMem = java.lang.Runtime.freeMemory();Object
Time of Update: 2018-12-04
所有類型的 Java 應用程式一般都需要計劃重複執行的任務。公司專屬應用程式程式需要計劃每日的日誌或者晚間批處理過程。一個 J2SE 或者 J2ME 日曆應用程式需要根據使用者的約定計劃鬧鈴時間。不過,標準的調度類 Timer 和 TimerTask 沒有足夠的靈活性,無法支援通常需要的計劃任務類型。在本文中,Java 開發人員 Tom White 向您展示了如何構建一個簡單通用的計劃架構,以用於執行任意複雜的計劃任務。我將把 java.util.Timer 和
Time of Update: 2018-12-04
三)物件瀏覽器 在使用者介面設計器上任選一個控制項,則在右下方就會出現物件瀏覽器。物件瀏覽器在程式開發中具有非常重要的作用,是使用者進行可視化編程的基礎。物件瀏覽器的主要作用是向使用者提供對象的聲明段中的屬性(Properties)的訪問,如讀取和修改。同時,物件瀏覽器還提供了對象的事件(Events)的設定,在這些設定中往往可以完成在物件導向技術中需要很多工作才能完成的任務,甚至這些改變屬性和事件的工作就是編寫程式的全部。這大大增加了代碼的重用性,這就是物件導向技術的優勢所在。 四)使用者