<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>認證信息 — killtest.com.tw &#187; JAVA</title>
	<atom:link href="http://www.killtest.com.tw/index.php/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.killtest.com.tw</link>
	<description>專業提供最新MCSE,CCNA,CCNP,MCTS,MCPD...認證信息</description>
	<lastBuildDate>Thu, 29 Jul 2010 08:09:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>5種跟蹤Java執行的方法</title>
		<link>http://www.killtest.com.tw/index.php/uncategorized/java-5/</link>
		<comments>http://www.killtest.com.tw/index.php/uncategorized/java-5/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 05:46:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[執行方法]]></category>

		<guid isPermaLink="false">http://www.killtest.com.tw/?p=2094</guid>
		<description><![CDATA[Zviki Cohen基於自己探索和理解他人所編寫代碼的體驗，發布了跟蹤Java執行過程的5種方法。他發現簡單的閱讀源代碼（有些情況下是反編譯代碼），可能是十分乏味和有錯誤傾向的過程。
　　作為替代，他推薦了5種不同運行時跟蹤方法以在Java代碼運行時觀察它，消除了學習他人代碼的許多不利條件。以下濃縮了他的5個建議：
　　1、基本方法：斷點和單步執行
　　“以最簡單的方法開始：設置斷點並開始跟蹤妳的程序執行。它在這些時候是最好的：妳需要壹個快速且簡單的解決方案，妳擁有所有代碼並且知道想在哪裏停止執行。妳需要在給定斷點設置精細的信息（參數、局部變量等等）。”
　　2、初級方法：調試消息
　　“我們通過設置調試消息來繼續對程序跟蹤。最簡單的方法是使用System.out.println語句把消息打印到控制臺。 它在這些時候是最好的：妳擁有代碼且很清楚妳正在尋找什麽。對事件處理器來說這是非常好的解決方案。當貫穿某壹復雜流程的執行過程時，它的高性能對理解觸發了哪個事件是非常實用的。”
　　3、熱門方法：動態代理（Dynamic Proxy）
　　“這是在簡單調試消息之上所做的改進。動態代理是壹個特定的Java特性，它允許開發者引入proxy類，加進某壹給定類之前，並通過某壹給定接口截獲所有調用。它在這些時候是最好的：它對事件處理器來說是非常好的解決方案。妳可以在很短時間內用壹個普通代理設置壹個虛擬事件處理器，來查看事件發生順序。當需要理解事件處理器時這是最簡單和快捷的方法。”
　　4、暴力方法：運行時剖析器（Run-time Profiler）
　　“剖析器是通過特定的JVM hooks在系統中跟蹤所有調用的強大工具。但是用它來跟蹤執行過程是大才小用。它在這些時候是最好的：妳想擁有壹個特定操作的完整畫卷（如，非常短的執行流程）。”
　　5、新時代：Aspects
　　“面向方面編程（Aspect Oriented Programming——AOP）是壹個非凡的想法。無需深入Aspect概念，這裏只考慮其能力：它是截獲妳的代碼執行既快速又容易的方法。妳可以圍繞方法、構造器、屬性訪問等等有選擇地設置hook，而不需要修改原始代碼。在這些hook中，妳可以打印調試消息。它在這些時候是最好的：妳想跟蹤可重新構建的代碼執行。”


No related posts.
Related posts brought to you by Yet Another Related Posts Plugin.


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Zviki Cohen基於自己探索和理解他人所編寫代碼的體驗，發布了跟蹤Java執行過程的5種方法。他發現簡單的閱讀源代碼（有些情況下是反編譯代碼），可能是十分乏味和有錯誤傾向的過程。<br />
　　作為替代，他推薦了5種不同運行時跟蹤方法以在Java代碼運行時觀察它，消除了學習他人代碼的許多不利條件。以下濃縮了他的5個建議：</p>
<p>　　1、基本方法：斷點和單步執行</p>
<p>　　“以最簡單的方法開始：設置斷點並開始跟蹤妳的程序執行。它在這些時候是最好的：妳需要壹個快速且簡單的解決方案，妳擁有所有代碼並且知道想在哪裏停止執行。妳需要在給定斷點設置精細的信息（參數、局部變量等等）。”</p>
<p>　　2、初級方法：調試消息</p>
<p>　　“我們通過設置調試消息來繼續對程序跟蹤。最簡單的方法是使用System.out.println語句把消息打印到控制臺。 它在這些時候是最好的：妳擁有代碼且很清楚妳正在尋找什麽。對事件處理器來說這是非常好的解決方案。當貫穿某壹復雜流程的執行過程時，它的高性能對理解觸發了哪個事件是非常實用的。”</p>
<p>　　3、熱門方法：動態代理（Dynamic Proxy）</p>
<p>　　“這是在簡單調試消息之上所做的改進。動態代理是壹個特定的Java特性，它允許開發者引入proxy類，加進某壹給定類之前，並通過某壹給定接口截獲所有調用。它在這些時候是最好的：它對事件處理器來說是非常好的解決方案。妳可以在很短時間內用壹個普通代理設置壹個虛擬事件處理器，來查看事件發生順序。當需要理解事件處理器時這是最簡單和快捷的方法。”</p>
<p>　　4、暴力方法：運行時剖析器（Run-time Profiler）</p>
<p>　　“剖析器是通過特定的JVM hooks在系統中跟蹤所有調用的強大工具。但是用它來跟蹤執行過程是大才小用。它在這些時候是最好的：妳想擁有壹個特定操作的完整畫卷（如，非常短的執行流程）。”</p>
<p>　　5、新時代：Aspects</p>
<p>　　“面向方面編程（Aspect Oriented Programming——AOP）是壹個非凡的想法。無需深入Aspect概念，這裏只考慮其能力：它是截獲妳的代碼執行既快速又容易的方法。妳可以圍繞方法、構造器、屬性訪問等等有選擇地設置hook，而不需要修改原始代碼。在這些hook中，妳可以打印調試消息。它在這些時候是最好的：妳想跟蹤可重新構建的代碼執行。”</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.killtest.com.tw/index.php/uncategorized/java-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>從C++轉到Java需注意的地方</title>
		<link>http://www.killtest.com.tw/index.php/sun/%e5%be%9ec%e8%bd%89%e5%88%b0java%e9%9c%80%e6%b3%a8%e6%84%8f%e7%9a%84%e5%9c%b0%e6%96%b9/</link>
		<comments>http://www.killtest.com.tw/index.php/sun/%e5%be%9ec%e8%bd%89%e5%88%b0java%e9%9c%80%e6%b3%a8%e6%84%8f%e7%9a%84%e5%9c%b0%e6%96%b9/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 07:49:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SUN]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[SCJP]]></category>

		<guid isPermaLink="false">http://www.killtest.com.tw/?p=1291</guid>
		<description><![CDATA[1.Java在虛擬機上運行
Java源代碼並不是被編譯成為普通的機器代碼。而是被翻譯成為虛擬機可以執行的代碼。一個Java解釋器最終執行這些代碼。這其中沒有連接的過程；解釋在需要的時候動態的加載一些類；
2.Java是完全面向對象的
Java是一種完全面向對象的語言。這意味著你對任何一個Java對象所做的動作都是通過一個方法實現的。第一點就是，再也沒有沒有主函數這樣的孤立的東西了。取而代之的是，你必須開始用一個對象的看法看待一個程序，一個類的對象。但是這個對象又什麼對象呢？大多數Java程序只是簡單的通過繼承Java基礎類Object來實現所需要的東西，但是你可以通過創建程序基礎類用於多個特性相似的應用程序來節省時間。
嚴格的面向對象的規定意味著理用原有的C/C++代碼不可以直接不加改動的使用；系統調用也是這樣的。 C++中，你可以通過在C++正常的命名空間外聲明extern&#8221;C&#8221;來使用原有的C的過程調用，包括系統調用
在Java中，只有一個類似的安全回溯的方法，但是並不是十分簡單的方法。你必須定義一個本地方法，其目的是為C語言提供接口，然後提供連接的介質。 Java環境提供了完成這種任務的工具，但是整個過程和C++中提供的extern比微不足道，完成使用C++類的過程則更加複雜，因為這樣會引入對C的藉口和C函數和C++成員函數的問題。
幸運的是，許多常用的系統實用工具函數已經在系統類中的方法中提供出來，但是這些明顯沒有包含經過許多年來你所創建的那些類和過程。所以，在你需要的時候你應該去鑽研一下。
3.Java中沒有獨立的頭文件
在Java中，關於類的一切東西都被放到一個單獨的文件中。方法的位置只可能在一個地方出現，一個方法的實現必須在它的定義過程中同時進行。這樣做得優點是在實現程序的時候不容易因為文件的非同步錯誤而失敗，或者獲取到一個沒有實現的聲明。類的聲明可以被Java解釋器利用甚至是從一個編譯過的單元中獲取，所以不再需要有頭文件，只要有編譯過的文件。
這樣做的缺點與我們編程的過程有關。許多C++程序員喜歡用頭文件來代替文檔。要看一個成員函數的接口參數，只需要看頭文件中的聲明即可。你可以經常的看頭文件即可了解怎樣去使用這個類。在Java中，沒有這樣的總結。因為實現類方法的代碼必須在方法定義的時候出現，而且，對於一個單獨的函數的代碼來說就經常佔據了一整頁乃至更多。這樣，很難通過看Java的代碼就初步了解類是怎樣使用的。你必須為你需要的類準備足夠多的文檔。不言而喻，再處理非商業類庫的時候文檔是極度缺乏的。
在當先的Java環境中提供了兩個工具來補償這些，javap來打印類標識，javadoc為嵌入式程序提供HTML文檔。
4.用Package來分解Java命名空間
在大的C++工程中經常遇到的一個問題是命名空間&#8211;怎樣保證工程的一些程序員不會創建和另一些程序員一樣名字的類？更糟糕的是，供應商可能會提供一個包含和你的類一樣名字的類的庫。有許多方法可以解決這一問題，但是很可能在問題發現之前工程已經啟動，改正錯誤是需要付出許多痛苦的。
Java通過&#8221;Package&#8221;這個概念解決了這個問題，Package有效地通過通過集合類劃分了命名空間。在不同包內的兩個同名的類仍然是不同的。關鍵問題就變成了類是否放置到相應的包中。
記住，Java並沒有解決命名衝突的問題。擴展一個基類而引起了派生類的衝突。比如說，如果你最喜歡的供應商提供了一些類，然後你把它們用做基類並且派生有一個foo方法的類，當供應商提供一個新版本的類的時候就可能出現，如果供應商業也在新類中提供了一個foo的方法。
5.異常是Java的重要特性
在C++中，異常和異常處理是十分深奧的事情；許多C++程序員從沒有處理過它們甚至不知道它們是何物。異常是在正常的過程中出現的未預料的錯誤，因此，它們不會從方法中返回，或者作為參數傳入；但是，它們不能被忽略！這裡的一個例子是計算一個書的方根的方法。正常的接口形式是將一個正數作為參數傳入方法，然後方法會返回一個正實數作為結果，方法可以檢驗這些並且在異常產生的時候拋出異常。在大多數係統中，程序員並不是必須這樣做，這樣，一個沒有考慮到的異常可以使程序不正常的退出。
在Java中，異常已經成為語言中非常成熟的部分。方法的說明中就包含了異常的信息，程序處理器也強制檢驗如果你使用了一個能夠產生異常的方法，你就必須檢查異常是否發生。幾乎所有的Java程序員都會遇到異常的情況，因為許多非常有用的庫中的類都會拋出異常。處理異常並不難，但是在一些時候是需要注意的。一個方法的文檔會指明方法拋出的異常的類型。如果你忘了，不要緊，編譯器會提醒你的。
 
6.字符串不再是字符數組
Java中包括了一個字符串的對象，並且是個常量。字符串不像字符數組一樣，雖然可以簡單的從一個字符數組構造一個字符串。你應該盡可能的用字符串代替字符數組，因為他們不會因為誤操作而被覆蓋。
7.Java限制了常量對象和方法
在C++中，你可以正式的聲明一個函數參數或者函數返回值為const類型，這樣可以有效的防止對參數或者返回值的不正當修改。另外，你可以聲明一個成員函數為const，表明它不可以修改任何他操作的對象。
Java支持常量操作符，只讀變量，這些通過final關鍵字實現。但是Java沒有支持強制的使一個可寫變量在函數傳遞、返回的過程中變為只讀。或者定義一個不操作修改對象的常量方法。
在Java中，這個省略帶來的影響和在C++中相比就非常小了，這很大程度上因為字符串變量和字符數組的不同，但是這也帶來一個引起錯誤的隱患。特別地，沒有辦法檢驗一個方法是否可以改動對象。
8.Java沒有指針
理解指針的概念是一個C或C++程序員最難應付的問題。指針也是錯誤產生的一大根源。 Java中沒有指針，對象的句柄直接作為參數傳遞，而不是傳遞指針。另外，你必須通過索引使用數組。這些都不是什麼大問題。然而，沒有指針是在寫含有函數指針或者成員函數指針的系統的時候引起很大麻煩。這個問題在處理回調函數的時候更加顯著。
9.Java沒有參數化類型
參數化類型提供了用一段程序處理許多相似程序的方法。一個例子就是開平方根的方法，它可以對int或者float操作。在C++中，這一特性是由模板提供的。
Java中不包含C++中的模板的等價物。如果你經常使用模板來簡化程序，比如說構造許多使用相似參數類型的函數，這簡直就是災難。這意味著更多使用複制、粘貼的過程來手動的完成。然而，如果你使用模板來生成類的話，沒有簡單的方法。
10.Java使用垃圾回收
在垃圾回收的語言中，運行時環境一直監測哪些內存不被使用。當一塊內存不用的時候，系統自動的回收內存。比如說，一個對像在一個方法中生成，但是沒有被調用著返回或者沒有儲存為全局變量，不能在方法外部使用。系統自己會知道哪些變量是你用不到的，哪些是可以用到的。因此，你不必再為破壞對象回收內存而擔心。在C++中，很多的調試時間都被使用到檢查內存漏洞中。 Java的這種方法很大程度上降低了這種錯誤的可能。但是他依然不能處理邏輯混亂的程序，他們不能夠被回收。許多C++的類中的析構函數是用來釋放對象引用的內存的。 Java使垃圾回收的事實說明在Java中不是必需寫析構函數了。但是並不意味著你可以忘記為你的類寫析構函數。比如，一個對像打開了網絡連接就必須被恰當的清理來關閉這個連接。在Java中，析構函數被稱作&#8221;finalization&#8221;方法。
11.Java不支持多重繼承
在任何一個複雜的面向對象的系統中，實現一個有更多方法的新類是十分經常遇到的事情。比如說，一個Manager類，需要被作為一個連表的表頭，但是一個Manager又必須是一個Employee。有許多方法來處理這樣的問題。一個方法是允許從多個類繼承。在這個例子中，Manager需要從Linked List和Employee繼承。
Java沒有多重繼承。但是你可以聲明接口&#8211;來描述實現一些功能的編程接口。一個類可以由多個接口實現，包括他唯一的功能。不同的類可以由同樣的接口實現。方法的參數既可以聲明為類，也可以聲明為接口。如果是接口的話，實現接口的類就可以作為參數傳入方法。
接口的概念要比多繼承容易理解一些，但是他有一定的局限性。特別地，你必須在類中實現接口的時候編碼去重新實現類的功能。
12.Java支持多線程
多線程可以使你寫出在同一時刻完成多種任務的程序。比如說，你可以在完成讀取一個大文件之間允許用戶對已經讀取的部分進行編輯。你需要把程序分為多線程來執行。為安全起見。你的程序要被精心的設計，因為可能不止一個線程需要對數據進行訪問、修改。
Java開始就支持多線程。類和接口用來分解一個程序成為不同的線程。語言簡單的對重要的數據作同步或者鎖定處理。
13.Java以一些預定義的類為基礎
默認的Java環境中包括一些從Java基礎類實現而來的一些包。這些允許你很快的寫出一些有用的程序，這些包如下：
java.awt：當今許多應用程序都非常依賴GUI,java提供了一個Abstract Window Toolkid，這可以讓你在不考慮運行平台的前提下處理GUI對象。
java.applet：applet的主要目的是提供瀏覽有關的內容。它本身是awt組件的字類並且支持其他一些特性，比如聲音、渲染等。
 
java.io：java.io提供了對流、文件、管道的讀寫操作。
java.lang：提供了java的基礎類Objcet,Integar,Float……；
java.net：提供對網絡編程的支持。包括處理socket,URL,Internet尋址等。
java.util：為數據結構提供的通用實用工具集


Related posts:SCJP 310-065 Exam The Sun Certified Programmer for Java Platform, Standard Edition 6...SUN 310-202最新認證資訊 目前 Java 相關的認證有四個，分別是 SCJP、SCWD、SCJD、SCAJ，考試時皆以英文出題，但在臺灣 SCJP 考試可以選擇使用繁體中文版考題。這幾 認證考試的特點分述如下：SCJP （Sun Certified Java...SCJP 310-065認證題庫介紹         對於Java程序設計員，Sun推出兩 認證：Sun...
Related posts brought to you by Yet Another Related Posts Plugin.


Related posts:<ol><li><a href='http://www.killtest.com.tw/index.php/sun/scjp-exam/' rel='bookmark' title='Permanent Link: SCJP 310-065 Exam'>SCJP 310-065 Exam</a> <small>The Sun Certified Programmer for Java Platform, Standard Edition 6...</small></li><li><a href='http://www.killtest.com.tw/index.php/sun/sun-310-202/' rel='bookmark' title='Permanent Link: SUN 310-202最新認證資訊'>SUN 310-202最新認證資訊</a> <small>目前 Java 相關的認證有四個，分別是 SCJP、SCWD、SCJD、SCAJ，考試時皆以英文出題，但在臺灣 SCJP 考試可以選擇使用繁體中文版考題。這幾 認證考試的特點分述如下：SCJP （Sun Certified Java...</small></li><li><a href='http://www.killtest.com.tw/index.php/sun/scjp-8/' rel='bookmark' title='Permanent Link: SCJP 310-065認證題庫介紹'>SCJP 310-065認證題庫介紹</a> <small>        對於Java程序設計員，Sun推出兩 認證：Sun...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>1.Java在虛擬機上運行</p>
<p>Java源代碼並不是被編譯成為普通的機器代碼。而是被翻譯成為虛擬機可以執行的代碼。一個Java解釋器最終執行這些代碼。這其中沒有連接的過程；解釋在需要的時候動態的加載一些類；</p>
<p>2.Java是完全面向對象的</p>
<p>Java是一種完全面向對象的語言。這意味著你對任何一個Java對象所做的動作都是通過一個方法實現的。第一點就是，再也沒有沒有主函數這樣的孤立的東西了。取而代之的是，你必須開始用一個對象的看法看待一個程序，一個類的對象。但是這個對象又什麼對象呢？大多數Java程序只是簡單的通過繼承Java基礎類Object來實現所需要的東西，但是你可以通過創建程序基礎類用於多個特性相似的應用程序來節省時間。</p>
<p>嚴格的面向對象的規定意味著理用原有的C/C++代碼不可以直接不加改動的使用；系統調用也是這樣的。 C++中，你可以通過在C++正常的命名空間外聲明extern&#8221;C&#8221;來使用原有的C的過程調用，包括系統調用</p>
<p>在Java中，只有一個類似的安全回溯的方法，但是並不是十分簡單的方法。你必須定義一個本地方法，其目的是為C語言提供接口，然後提供連接的介質。 Java環境提供了完成這種任務的工具，但是整個過程和C++中提供的extern比微不足道，完成使用C++類的過程則更加複雜，因為這樣會引入對C的藉口和C函數和C++成員函數的問題。</p>
<p>幸運的是，許多常用的系統實用工具函數已經在系統類中的方法中提供出來，但是這些明顯沒有包含經過許多年來你所創建的那些類和過程。所以，在你需要的時候你應該去鑽研一下。</p>
<p>3.Java中沒有獨立的頭文件</p>
<p>在Java中，關於類的一切東西都被放到一個單獨的文件中。方法的位置只可能在一個地方出現，一個方法的實現必須在它的定義過程中同時進行。這樣做得優點是在實現程序的時候不容易因為文件的非同步錯誤而失敗，或者獲取到一個沒有實現的聲明。類的聲明可以被Java解釋器利用甚至是從一個編譯過的單元中獲取，所以不再需要有頭文件，只要有編譯過的文件。</p>
<p>這樣做的缺點與我們編程的過程有關。許多C++程序員喜歡用頭文件來代替文檔。要看一個成員函數的接口參數，只需要看頭文件中的聲明即可。你可以經常的看頭文件即可了解怎樣去使用這個類。在Java中，沒有這樣的總結。因為實現類方法的代碼必須在方法定義的時候出現，而且，對於一個單獨的函數的代碼來說就經常佔據了一整頁乃至更多。這樣，很難通過看Java的代碼就初步了解類是怎樣使用的。你必須為你需要的類準備足夠多的文檔。不言而喻，再處理非商業類庫的時候文檔是極度缺乏的。</p>
<p>在當先的Java環境中提供了兩個工具來補償這些，javap來打印類標識，javadoc為嵌入式程序提供HTML文檔。</p>
<p>4.用Package來分解Java命名空間</p>
<p>在大的C++工程中經常遇到的一個問題是命名空間&#8211;怎樣保證工程的一些程序員不會創建和另一些程序員一樣名字的類？更糟糕的是，供應商可能會提供一個包含和你的類一樣名字的類的庫。有許多方法可以解決這一問題，但是很可能在問題發現之前工程已經啟動，改正錯誤是需要付出許多痛苦的。</p>
<p>Java通過&#8221;Package&#8221;這個概念解決了這個問題，Package有效地通過通過集合類劃分了命名空間。在不同包內的兩個同名的類仍然是不同的。關鍵問題就變成了類是否放置到相應的包中。</p>
<p>記住，Java並沒有解決命名衝突的問題。擴展一個基類而引起了派生類的衝突。比如說，如果你最喜歡的供應商提供了一些類，然後你把它們用做基類並且派生有一個foo方法的類，當供應商提供一個新版本的類的時候就可能出現，如果供應商業也在新類中提供了一個foo的方法。</p>
<p>5.異常是Java的重要特性</p>
<p>在C++中，異常和異常處理是十分深奧的事情；許多C++程序員從沒有處理過它們甚至不知道它們是何物。異常是在正常的過程中出現的未預料的錯誤，因此，它們不會從方法中返回，或者作為參數傳入；但是，它們不能被忽略！這裡的一個例子是計算一個書的方根的方法。正常的接口形式是將一個正數作為參數傳入方法，然後方法會返回一個正實數作為結果，方法可以檢驗這些並且在異常產生的時候拋出異常。在大多數係統中，程序員並不是必須這樣做，這樣，一個沒有考慮到的異常可以使程序不正常的退出。</p>
<p>在Java中，異常已經成為語言中非常成熟的部分。方法的說明中就包含了異常的信息，程序處理器也強制檢驗如果你使用了一個能夠產生異常的方法，你就必須檢查異常是否發生。幾乎所有的Java程序員都會遇到異常的情況，因為許多非常有用的庫中的類都會拋出異常。處理異常並不難，但是在一些時候是需要注意的。一個方法的文檔會指明方法拋出的異常的類型。如果你忘了，不要緊，編譯器會提醒你的。<br />
 <br />
6.字符串不再是字符數組</p>
<p>Java中包括了一個字符串的對象，並且是個常量。字符串不像字符數組一樣，雖然可以簡單的從一個字符數組構造一個字符串。你應該盡可能的用字符串代替字符數組，因為他們不會因為誤操作而被覆蓋。</p>
<p>7.Java限制了常量對象和方法</p>
<p>在C++中，你可以正式的聲明一個函數參數或者函數返回值為const類型，這樣可以有效的防止對參數或者返回值的不正當修改。另外，你可以聲明一個成員函數為const，表明它不可以修改任何他操作的對象。</p>
<p>Java支持常量操作符，只讀變量，這些通過final關鍵字實現。但是Java沒有支持強制的使一個可寫變量在函數傳遞、返回的過程中變為只讀。或者定義一個不操作修改對象的常量方法。</p>
<p>在Java中，這個省略帶來的影響和在C++中相比就非常小了，這很大程度上因為字符串變量和字符數組的不同，但是這也帶來一個引起錯誤的隱患。特別地，沒有辦法檢驗一個方法是否可以改動對象。</p>
<p>8.Java沒有指針</p>
<p>理解指針的概念是一個C或C++程序員最難應付的問題。指針也是錯誤產生的一大根源。 Java中沒有指針，對象的句柄直接作為參數傳遞，而不是傳遞指針。另外，你必須通過索引使用數組。這些都不是什麼大問題。然而，沒有指針是在寫含有函數指針或者成員函數指針的系統的時候引起很大麻煩。這個問題在處理回調函數的時候更加顯著。</p>
<p>9.Java沒有參數化類型</p>
<p>參數化類型提供了用一段程序處理許多相似程序的方法。一個例子就是開平方根的方法，它可以對int或者float操作。在C++中，這一特性是由模板提供的。</p>
<p>Java中不包含C++中的模板的等價物。如果你經常使用模板來簡化程序，比如說構造許多使用相似參數類型的函數，這簡直就是災難。這意味著更多使用複制、粘貼的過程來手動的完成。然而，如果你使用模板來生成類的話，沒有簡單的方法。</p>
<p>10.Java使用垃圾回收</p>
<p>在垃圾回收的語言中，運行時環境一直監測哪些內存不被使用。當一塊內存不用的時候，系統自動的回收內存。比如說，一個對像在一個方法中生成，但是沒有被調用著返回或者沒有儲存為全局變量，不能在方法外部使用。系統自己會知道哪些變量是你用不到的，哪些是可以用到的。因此，你不必再為破壞對象回收內存而擔心。在C++中，很多的調試時間都被使用到檢查內存漏洞中。 Java的這種方法很大程度上降低了這種錯誤的可能。但是他依然不能處理邏輯混亂的程序，他們不能夠被回收。許多C++的類中的析構函數是用來釋放對象引用的內存的。 Java使垃圾回收的事實說明在Java中不是必需寫析構函數了。但是並不意味著你可以忘記為你的類寫析構函數。比如，一個對像打開了網絡連接就必須被恰當的清理來關閉這個連接。在Java中，析構函數被稱作&#8221;finalization&#8221;方法。</p>
<p>11.Java不支持多重繼承</p>
<p>在任何一個複雜的面向對象的系統中，實現一個有更多方法的新類是十分經常遇到的事情。比如說，一個Manager類，需要被作為一個連表的表頭，但是一個Manager又必須是一個Employee。有許多方法來處理這樣的問題。一個方法是允許從多個類繼承。在這個例子中，Manager需要從Linked List和Employee繼承。</p>
<p>Java沒有多重繼承。但是你可以聲明接口&#8211;來描述實現一些功能的編程接口。一個類可以由多個接口實現，包括他唯一的功能。不同的類可以由同樣的接口實現。方法的參數既可以聲明為類，也可以聲明為接口。如果是接口的話，實現接口的類就可以作為參數傳入方法。</p>
<p>接口的概念要比多繼承容易理解一些，但是他有一定的局限性。特別地，你必須在類中實現接口的時候編碼去重新實現類的功能。</p>
<p>12.Java支持多線程</p>
<p>多線程可以使你寫出在同一時刻完成多種任務的程序。比如說，你可以在完成讀取一個大文件之間允許用戶對已經讀取的部分進行編輯。你需要把程序分為多線程來執行。為安全起見。你的程序要被精心的設計，因為可能不止一個線程需要對數據進行訪問、修改。</p>
<p>Java開始就支持多線程。類和接口用來分解一個程序成為不同的線程。語言簡單的對重要的數據作同步或者鎖定處理。</p>
<p>13.Java以一些預定義的類為基礎</p>
<p>默認的Java環境中包括一些從Java基礎類實現而來的一些包。這些允許你很快的寫出一些有用的程序，這些包如下：</p>
<p>java.awt：當今許多應用程序都非常依賴GUI,java提供了一個Abstract Window Toolkid，這可以讓你在不考慮運行平台的前提下處理GUI對象。</p>
<p>java.applet：applet的主要目的是提供瀏覽有關的內容。它本身是awt組件的字類並且支持其他一些特性，比如聲音、渲染等。<br />
 <br />
java.io：java.io提供了對流、文件、管道的讀寫操作。</p>
<p>java.lang：提供了java的基礎類Objcet,Integar,Float……；</p>
<p>java.net：提供對網絡編程的支持。包括處理socket,URL,Internet尋址等。</p>
<p>java.util：為數據結構提供的通用實用工具集</p>


<p>Related posts:<ol><li><a href='http://www.killtest.com.tw/index.php/sun/scjp-exam/' rel='bookmark' title='Permanent Link: SCJP 310-065 Exam'>SCJP 310-065 Exam</a> <small>The Sun Certified Programmer for Java Platform, Standard Edition 6...</small></li><li><a href='http://www.killtest.com.tw/index.php/sun/sun-310-202/' rel='bookmark' title='Permanent Link: SUN 310-202最新認證資訊'>SUN 310-202最新認證資訊</a> <small>目前 Java 相關的認證有四個，分別是 SCJP、SCWD、SCJD、SCAJ，考試時皆以英文出題，但在臺灣 SCJP 考試可以選擇使用繁體中文版考題。這幾 認證考試的特點分述如下：SCJP （Sun Certified Java...</small></li><li><a href='http://www.killtest.com.tw/index.php/sun/scjp-8/' rel='bookmark' title='Permanent Link: SCJP 310-065認證題庫介紹'>SCJP 310-065認證題庫介紹</a> <small>        對於Java程序設計員，Sun推出兩 認證：Sun...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.killtest.com.tw/index.php/sun/%e5%be%9ec%e8%bd%89%e5%88%b0java%e9%9c%80%e6%b3%a8%e6%84%8f%e7%9a%84%e5%9c%b0%e6%96%b9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAVA學習資料</title>
		<link>http://www.killtest.com.tw/index.php/sun/java-3/</link>
		<comments>http://www.killtest.com.tw/index.php/sun/java-3/#comments</comments>
		<pubDate>Fri, 22 May 2009 01:03:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[310-065]]></category>
		<category><![CDATA[SUN]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[SCJP]]></category>

		<guid isPermaLink="false">http://www.killtest.com.tw/?p=1175</guid>
		<description><![CDATA[要想深入理解“容器”的概念需要我們首先理解“容器”的宏觀框架——容器框架。容器框架從宏觀角度為我們描述了壹個“容器”的世界，告訴我們在Java的容器世界中有哪些 “容器”、它們之間的關系如何、它們是什麽樣子、它們如何使用。總之，容器框架就是壹個用於表示操作集合的統壹的體系結構，容器框架包含以下元素：
q 接口——它們代表容器類型的抽象數據類型。SCJP 整個Java容器類的基礎後來是容器接口（例如Collection，Map等接口），而不是類。使用接口的最大好處在於將容器的實現與容器的接口分開，這就意味著妳可以使用相同的方法訪問容器而不用關心容器是由什麽樣的數據結構實現的，即接口允許操作容器和不涉及容器所代表的細節。在面向對象的語言中，這些接口壹般組成壹個層次結構。
q 實現—— 它們是容器接口的具體實現。
q 算法—— 它們是在實現集合接口對象上執行運算的方法，如搜索和排序。這些算法被稱為多態的，也就是說，相同的方法可以用於處理某種接口的許多種不同的實現，算法就是可重用的功能。
相比較傳統的容器框架——例如C++的標準模板庫（Standard Template Library）和Smalltalk 的層次結構，Java的容器框架結構清晰，容易掌握。
圖6.1是容器框架中接口以及實現的之間的集成關系圖，它對我們學習Java中大量容器類型是很有幫助的。點線箭頭代表特定的類實現（Implements）壹個接口（若是抽象類，則表示部分實現了接口）。虛線線箭頭表示壹個類可以生成(Produce)箭頭所指向類的對象，例如，任意的Collection可以生成Iterator，而List可以生成ListIterator（當然，也能生成普通的Iterator）。實線箭頭表示類間的繼承(Inheritate)關系。
要想深入理解“容器”的概念需要我們首先理解“容器”的宏觀框架——容器框架。容器框架從宏觀角度為我們描述了壹個“容器”的世界，告訴我們在Java的容器世界中有哪些 “容器”、它們之間的關系如何、它們是什麽樣子、它們如何使用。總之，容器框架就是壹個用於表示操作集合的統壹的體系結構，容器框架包含以下元素：
q 接口——它們代表容器類型的抽象數據類型。整個Java容器類的基礎後來是容器接口（例如Collection，Map等接口），而不是類。使用接口的最大好處在於將容器的實現與容器的接口分開，這就意味著妳可以使用相同的方法訪問容器而不用關心容器是由什麽樣的數據結構實現的，即接口允許操作容器和不涉及容器所代表的細節。在面向對象的語言中，這些接口壹般組成壹個層次結構。
q 實現—— 它們是容器接口的具體實現。
q 算法—— 它們是在實現集合接口對象上執行運算的方法，如搜索和排序。這些算法被稱為多態的，也就是說，相同的方法可以用於處理某種接口的許多種不同的實現，算法就是可重用的功能。
相比較傳統的容器框架——例如C++的標準模板庫（Standard Template Library）和Smalltalk 的層次結構，Java的容器框架結構清晰，容易掌握。
圖6.1是容器框架中接口以及實現的之間的集成關系圖，它對我們學習Java中大量容器類型是很有幫助的。點線箭頭代表特定的類實現（Implements）壹個接口（若是抽象類，則表示部分實現了接口）。虛線線箭頭表示壹個類可以生成(Produce)箭頭所指向類的對象，例如，任意的Collection可以生成Iterator，而List可以生成ListIterator（當然，也能生成普通的Iterator）。實線箭頭表示類間的繼承(Inheritate)關系。


No related posts.
Related posts brought to you by Yet Another Related Posts Plugin.


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>要想深入理解“容器”的概念需要我們首先理解“容器”的宏觀框架——容器框架。容器框架從宏觀角度為我們描述了壹個“容器”的世界，告訴我們在Java的容器世界中有哪些 “容器”、它們之間的關系如何、它們是什麽樣子、它們如何使用。總之，容器框架就是壹個用於表示操作集合的統壹的體系結構，容器框架包含以下元素：<br />
q 接口——它們代表容器類型的抽象數據類型。<a href="http://www.killtest.asia/post/5.html">SCJP</a> 整個Java容器類的基礎後來是容器接口（例如Collection，Map等接口），而不是類。使用接口的最大好處在於將容器的實現與容器的接口分開，這就意味著妳可以使用相同的方法訪問容器而不用關心容器是由什麽樣的數據結構實現的，即接口允許操作容器和不涉及容器所代表的細節。在面向對象的語言中，這些接口壹般組成壹個層次結構。<br />
q 實現—— 它們是容器接口的具體實現。<br />
q 算法—— 它們是在實現集合接口對象上執行運算的方法，如搜索和排序。這些算法被稱為多態的，也就是說，相同的方法可以用於處理某種接口的許多種不同的實現，算法就是可重用的功能。</p>
<p>相比較傳統的容器框架——例如C++的標準模板庫（Standard Template Library）和Smalltalk 的層次結構，Java的容器框架結構清晰，容易掌握。<br />
圖6.1是容器框架中接口以及實現的之間的集成關系圖，它對我們學習Java中大量容器類型是很有幫助的。點線箭頭代表特定的類實現（Implements）壹個接口（若是抽象類，則表示部分實現了接口）。虛線線箭頭表示壹個類可以生成(Produce)箭頭所指向類的對象，例如，任意的Collection可以生成Iterator，而List可以生成ListIterator（當然，也能生成普通的Iterator）。實線箭頭表示類間的繼承(Inheritate)關系。</p>
<p>要想深入理解“容器”的概念需要我們首先理解“容器”的宏觀框架——容器框架。容器框架從宏觀角度為我們描述了壹個“容器”的世界，告訴我們在Java的容器世界中有哪些 “容器”、它們之間的關系如何、它們是什麽樣子、它們如何使用。總之，容器框架就是壹個用於表示操作集合的統壹的體系結構，容器框架包含以下元素：<br />
q 接口——它們代表容器類型的抽象數據類型。整個Java容器類的基礎後來是容器接口（例如Collection，Map等接口），而不是類。使用接口的最大好處在於將容器的實現與容器的接口分開，這就意味著妳可以使用相同的方法訪問容器而不用關心容器是由什麽樣的數據結構實現的，即接口允許操作容器和不涉及容器所代表的細節。在面向對象的語言中，這些接口壹般組成壹個層次結構。<br />
q 實現—— 它們是容器接口的具體實現。<br />
q 算法—— 它們是在實現集合接口對象上執行運算的方法，如搜索和排序。這些算法被稱為多態的，也就是說，相同的方法可以用於處理某種接口的許多種不同的實現，算法就是可重用的功能。</p>
<p>相比較傳統的容器框架——例如C++的標準模板庫（Standard Template Library）和Smalltalk 的層次結構，Java的容器框架結構清晰，容易掌握。<br />
圖6.1是容器框架中接口以及實現的之間的集成關系圖，它對我們學習Java中大量容器類型是很有幫助的。點線箭頭代表特定的類實現（Implements）壹個接口（若是抽象類，則表示部分實現了接口）。虛線線箭頭表示壹個類可以生成(Produce)箭頭所指向類的對象，例如，任意的Collection可以生成Iterator，而List可以生成ListIterator（當然，也能生成普通的Iterator）。實線箭頭表示類間的繼承(Inheritate)關系。</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.killtest.com.tw/index.php/sun/java-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAVA認證基礎：隨機整數的生成過程</title>
		<link>http://www.killtest.com.tw/index.php/sun/java/</link>
		<comments>http://www.killtest.com.tw/index.php/sun/java/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 01:29:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SUN]]></category>
		<category><![CDATA[JAVA]]></category>

		<guid isPermaLink="false">http://www.killtest.com.tw/?p=96</guid>
		<description><![CDATA[使用Java 2 SDK基礎類庫產生隨機數的方法很多。但是如果你跟不上這些類庫的更新腳步，你有可能正在使用的是一種低效的隨機數生成機制，更糟糕的是：你有可能得到的不是均勻分布的隨機數。本文將向你展示一種較為可靠的隨機數生成方法，同時與其他方法進行比較。
自從JDK最初版本發布起，我們就可以使用java.util.Random類產生隨機數了。在JDK1.2中，Random類有了一個名為nextInt()的方法：public int nextInt(int n)給定一個參數n，nextInt(n)將返回一個大於等於0小於n的隨機數，即：0 &#60;= nextInt(n) &#60; n。你所要做的就是先聲明一個Random的對象，在調用其nextInt(n)函數以返回隨機值。這裏有個示例，下面的代碼段將生成很多隨機數並輸出它們的平均值：
以下是引用片段：
　　int count = 1000000;
　　int range = Integer.MAX_VALUE / 3 * 2;
　　double sum = 0;
　　Random rand = new Random();
　　for (int i=0; i&#60;count; i++) {
　　sum += rand.nextInt(range);
　　}
　　System.out.println(sum/count);
執行了1000000次循環之後，得到的平均值基本上就處於隨機數範圍的中點（midpoint）。
　　到目前為止，事情還並不復雜，但是我們會問為什麽要使用nextInt(n)？考慮一下的隨機數生成方法：
　　(1)使用老的方法nextInt()，沒有制定數值範圍
　　(2)用Math.abs()靜態函數得到(1)中產生值的絕對值
　　(3)對(2)的結果進行取模運算(%)，得到期望範圍類的值
　　我們說nextInt(n)要比上述方法更好，為什麽呢？參考以下的代碼段：
以下是引用片段：
　　sum = 0;
　　for (int i=0; i&#60;count; i++) {
　　sum += Math.abs(rand.nextInt()) % range;
　　}
　　System.out.println(sum/count);
　　不難發現，每次循環都多出了幾步運算。事實上，這種隨機數生成的方法存在著以下三個問題：
　　首先，nextInt()返回的值是趨於均勻分布在Integer.MIN_VALUE 和 Integer.MAX_VALUE之間的。如果你取Integer.MIN_VALUE的絕對值，得到的仍然不是一個正數。事實上，Math.abs(Integer.MIN_VALUE)等於Integer.MIN_VALUE。因此，存在著這樣一種情況（雖然很少見）：rand.nextInt()=Integer.MIN_VALUE，經過取絕對值Math.abs(rand.nextInt())之後，得到是一個負數。這種幾率為 1/(2^31)，在我們的測試中不太可能發生——循環次數只有1000000次。
　　其次，當你對nextInt()取模時，你使結果的隨機性大打折扣。隨機數中較小的值出現的幾率更大一些。這就是眾所周知的偽隨機數生成，因此我們不是用取模的方法。
　　最後，也可能是最糟糕的：隨機數不是均勻分布。如果你執行了上述的兩段代碼，第一段代碼的結果將會大於715,000,000，考慮到數值範圍的中點（midpoint)715,827,882，所以這是一個可以接受的結果。然而，你會吃驚的發現第二段代碼得到的平均值肯定不會超過600,000,000。
　　為何第二段代碼的結果會如此的偏差？糾其本質，問題出在數值分布的不均勻。當你進行取模運算時，你將過大的數轉換成了較小的。這使得較小的數更容易產生。
　　使用nextInt(range)將會解決上述的三個問題。還有一種隨機數生成方法——使用Math.random()。這個方法的效果如何？
以下是引用片段：
　　sum = 0;
　　for (int i=0; i&#60;count; i++) {
　　sum [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>使用Java 2 SDK基礎類庫產生隨機數的方法很多。但是如果你跟不上這些類庫的更新腳步，你有可能正在使用的是一種低效的隨機數生成機制，更糟糕的是：你有可能得到的不是均勻分布的隨機數。本文將向你展示一種較為可靠的隨機數生成方法，同時與其他方法進行比較。<br />
自從JDK最初版本發布起，我們就可以使用java.util.Random類產生隨機數了。在JDK1.2中，Random類有了一個名為nextInt()的方法：public int nextInt(int n)給定一個參數n，nextInt(n)將返回一個大於等於0小於n的隨機數，即：0 &lt;= nextInt(n) &lt; n。你所要做的就是先聲明一個Random的對象，在調用其nextInt(n)函數以返回隨機值。這裏有個示例，下面的代碼段將生成很多隨機數並輸出它們的平均值：</p>
<p>以下是引用片段：<br />
　　int count = 1000000;<br />
　　int range = Integer.MAX_VALUE / 3 * 2;<br />
　　double sum = 0;<br />
　　Random rand = new Random();<br />
　　for (int i=0; i&lt;count; i++) {<br />
　　sum += rand.nextInt(range);<br />
　　}<br />
　　System.out.println(sum/count);</p>
<p>執行了1000000次循環之後，得到的平均值基本上就處於隨機數範圍的中點（midpoint）。</p>
<p>　　到目前為止，事情還並不復雜，但是我們會問為什麽要使用nextInt(n)？考慮一下的隨機數生成方法：<br />
　　(1)使用老的方法nextInt()，沒有制定數值範圍<br />
　　(2)用Math.abs()靜態函數得到(1)中產生值的絕對值<br />
　　(3)對(2)的結果進行取模運算(%)，得到期望範圍類的值</p>
<p>　　我們說nextInt(n)要比上述方法更好，為什麽呢？參考以下的代碼段：</p>
<p>以下是引用片段：<br />
　　sum = 0;<br />
　　for (int i=0; i&lt;count; i++) {<br />
　　sum += Math.abs(rand.nextInt()) % range;<br />
　　}<br />
　　System.out.println(sum/count);<br />
　　不難發現，每次循環都多出了幾步運算。事實上，這種隨機數生成的方法存在著以下三個問題：</p>
<p>　　首先，nextInt()返回的值是趨於均勻分布在Integer.MIN_VALUE 和 Integer.MAX_VALUE之間的。如果你取Integer.MIN_VALUE的絕對值，得到的仍然不是一個正數。事實上，Math.abs(Integer.MIN_VALUE)等於Integer.MIN_VALUE。因此，存在著這樣一種情況（雖然很少見）：rand.nextInt()=Integer.MIN_VALUE，經過取絕對值Math.abs(rand.nextInt())之後，得到是一個負數。這種幾率為 1/(2^31)，在我們的測試中不太可能發生——循環次數只有1000000次。<br />
　　其次，當你對nextInt()取模時，你使結果的隨機性大打折扣。隨機數中較小的值出現的幾率更大一些。這就是眾所周知的偽隨機數生成，因此我們不是用取模的方法。<br />
　　最後，也可能是最糟糕的：隨機數不是均勻分布。如果你執行了上述的兩段代碼，第一段代碼的結果將會大於715,000,000，考慮到數值範圍的中點（midpoint)715,827,882，所以這是一個可以接受的結果。然而，你會吃驚的發現第二段代碼得到的平均值肯定不會超過600,000,000。</p>
<p>　　為何第二段代碼的結果會如此的偏差？糾其本質，問題出在數值分布的不均勻。當你進行取模運算時，你將過大的數轉換成了較小的。這使得較小的數更容易產生。</p>
<p>　　使用nextInt(range)將會解決上述的三個問題。還有一種隨機數生成方法——使用Math.random()。這個方法的效果如何？</p>
<p>以下是引用片段：<br />
　　sum = 0;<br />
　　for (int i=0; i&lt;count; i++) {<br />
　　sum += (int)(Math.random() * range);<br />
　　}<br />
　　System.out.println(sum/count);<br />
很好，使用random()不會碰到nextInt()的麻煩。你不會得到負數返回值，沒有使用取模運算，值分布也是均勻的。還有什麽問題嗎？你有沒有考慮到Math.random()使用了浮點運算，而nextInt()和nextInt(range)只有整數操作？Math.random()可能會慢上四倍。再加上從浮點到整數的類型轉換，整個運算將會更慢。好了，經過一番比較，我們發現使用nextInt(range)生成隨機數更為有效，因為它避免了其他方法的種種弊端。最後再給出一段代碼，通過測試可以比較本文提到的幾種隨機數生成方法。</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.killtest.com.tw/index.php/sun/java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
