亚洲日本乱码卡2卡3卡新区,日韩亚洲人成在线综合,亚洲熟妇无码八AV在线播放http://www.tkk7.com/Harriet/ ——等待飄雪的日子...努力,努力,再努力!zh-cnSun, 11 May 2025 23:09:32 GMTSun, 11 May 2025 23:09:32 GMT60全國計算機等級考試MS OFFICE要點B組(6-10)http://www.tkk7.com/Harriet/archive/2007/12/10/166594.htmlHarrietHarrietMon, 10 Dec 2007 02:49:00 GMThttp://www.tkk7.com/Harriet/archive/2007/12/10/166594.htmlhttp://www.tkk7.com/Harriet/comments/166594.htmlhttp://www.tkk7.com/Harriet/archive/2007/12/10/166594.html#Feedback1http://www.tkk7.com/Harriet/comments/commentRss/166594.htmlhttp://www.tkk7.com/Harriet/services/trackbacks/166594.html1.域名的格式:主機名.機構名.網絡名.最高層域名,
    
頂級域名主要包括:COM表示商業機構;
                      EDU
表示教育機構;
                      GOV
表示政府機構;
                      MIL
表軍事機構;
                      NET
表示網絡支持中心;
                      ORG
表示國際組織。

2.存儲一個漢字需要2個字節,所以,要存放10個24*24點陣的漢字字模,需要10*24*24/8=720B

**3.CAD完整的拼寫形式為:Computer Aided Design,中文意思是計算機輔助設計。

4.CPU是由運算器和控制器兩部分組成,可以完成指令的解釋與執行。計算機的存儲器分為內存儲器和外存儲器。

內存儲器是計算機主機的一個組成部分,它與CPU直接進行信息交換,CPU直接讀取內存中的數據。

5.非零無符號二進制整數之后添加一個0,相當于向左移動了一位,也就是擴大了原來數的2倍。在一個非零無符號二進制整數之后去掉一個0,相當于向右移動一位,也就是變為原數的1/2。

6.計算機最主要的工作特點是存儲程序與自動控制,其他選項均是其中的一部分特點。

7.存儲器分為內存儲器和外存儲器,隨機存儲器RAM、只讀存儲器ROM都屬于內存儲器,RAM有四種類型:DRAM(動態RAM)、SRAM(靜態RAM)、CMOS ROM、VRAM(視頻RAM)。

8.5位無符號二進制數可以從最小的00000至最大的11111,即最大為2^5-1=31。

9.五筆字形碼輸入法屬于形碼輸入法,它是以漢字的形狀特點為每個漢字進行編碼,其思想是依據漢字的筆劃特征將基本筆劃劃分為5類并分別賦以代號。

*10.計算機網絡按地理區域范圍可分為:局域網、城域網和廣域網。

   1.局 域網(local area network,LAN)。其典型應用場合:(1)同一房間內的所有主機,覆蓋距離10米數量級。(2)同一房樓宇內的所有主機,覆蓋距離100米數量 級。(3)同一校園內、廠區內、院落內的所有主機,覆蓋范圍在1公里數量級。答案中的Ethernet網、Novell網和Token Rings網屬于局域網。

   2.城域網(metropolitan area network,MAN)。指所有主機(工作站點)分布在同一城區內。覆蓋范圍約在10公里數量級。

   3.廣域網(wide area network,WAN)。指在網絡中所有主機與工作站點分布的地理范圍,能覆蓋幾公里以上的范圍,包括10公里、100公里與1000公里以上的數量級,比如同一城市、同一國家、同一洲甚至跨越幾個洲等。Chinanet網屬于廣域網。

11.Pentium 4/1.7G中 的1.7G表示CPU的時鐘主頻為1.7GHz。計算機的存儲系統由高速緩存(Cache)、主存和外存組成,高速緩存的特點是存取速度快、容量小,它存 儲的內容是主存中經常被訪問的程序和數據的副本。使用它的目的是提高計算機運行速度。運算速度指微機每秒能執行的指令數,單位為MIPS或MFLOPS (Million FLOating Point Per Second----每秒百萬條浮點指令),目前微機的運算速度在200~300MIPS以上,計算機的運算速度受主頻和內存速度的制約。

12.硬盤容量是指微型計算機硬盤所能容納信息的字節數。

13.匯編語言雖然在編寫、修改和閱讀程序等方面有了相當的改進,但仍然與人們的要求有一定的距離,仍然是一種依賴于機器的語言。

14.不間斷電源(UPS)總是直接從電池向計算機供電,當停電時,文件服務器可使用UPS提供的電源繼續工作,UPS中包含一個變流器,它可以將電池中的直流電轉成純正的正弦交流電供給計算機使用。

15.C 語言、FORTRAN語言等高級語言編制的源程序,需經編譯程序轉換為目標程序,然后交給計算機運行。由BASIC語言編制的源程序,經解釋程序的翻譯, 實現的是邊解釋、邊執行并立即得到運行結果,因而不產生目標程序。用匯編語言編制的程序,需經匯編程序轉換為目標程序,然后才能被計算機運行。用數據庫語 言編制的源程序,需經數據庫管理系統轉換為目標程序,才能被計算機執行。

16.多媒體計算機是指能綜合處理多種媒體信息(如文字、圖形、圖像、聲音等),使多種信息建立聯系,并具有交互性的計算機系統。

17.八進制數10化成十進制數是1*8^1+0*8^0=8。

   十六進制數10化成十進制數是1*16^1+0*16^0=16。

   二進制數10化成十進制數是1*2^1+0*2^0=2。

18.漢 字機內碼是計算機系統內部處理和存儲漢字的代碼,國家標準是漢字信息交換的標準編碼,但因其前后字節的最高位均為0,易與ASCII碼混淆。因此漢字的機 內碼采用變形國家標準碼,以解決與ASCII碼沖突的問題。將國家標準編碼的兩個字節中的最高位改為1即為漢字輸入機內碼。

19.局域網是由網絡服務器、工作站或客戶機、網絡適配器(網卡)、傳輸介質和網絡互連設備組成。

   網間互連設備有中繼器、集線器、網橋、路由器、網關和交換集成器。

20.批處理系統不屬于交互系統。

  由于批處理系統禁止用戶與計算機系統的交互,因此比較適合那些對處理時間要求不太嚴、作業運行步驟比較規范、程序已經過考驗的作業。

21."2000年問題"是有關計算機處理日期的問題。

22.CD-ROM盤片容量要比軟件磁盤容量大得多,目前一張CD-ROM盤片可存放的字節數是640MB。

23.目前微型計算機的CPU可以處理的二進制位至少為8位。

24.在 計算機中,把計算機硬件能夠直接識別和執行的命令稱之為指令。指令是由一組二進制代碼組成,規定了計算機執行程序操作。一臺計算機硬件可以識別和執行若干 條指令,一臺計算機所能執行的所有指令的集合就是這臺計算機的指令系統。指令系統是計算機性能的集中表現,它沒有統一的標準,不是所有的計算機指令系統都 相同的。

程序就是為解決某一問題而設計組合的一系列指令。

25.程序設計語言通常分為:機器語言、匯編語言和高級語言三類。機器語言是計算機唯一能夠識別并直接執行的語言。必須用翻釋的方法把高級語言源程序翻釋成等價的機器語言程序才能在計算機上執行。目前流行的高級語言如C、C++、Visual Basic等。

26.正確的電子郵箱地址的格式為:用戶名+@+計算機名+機構名+最高域名。

27.由 于計算機中的雙字節漢字與單字節的西文字符是混合在一起處理的,所以漢字信息如不予以特別的標識,則它與單字節的ASCII碼就會混淆不清,無法識別。為 了解決這個問題,采用的方法之一,就是使表示漢字的兩個字節的最高位等于"1"。這種高位為1的雙字節(16位)漢字編碼稱為漢字的"機內碼",又稱"內 碼"。

28.所謂軟件是指為方便使用計算機和提高使用效率而組織的程序以及用于程序開發、使用、維護的有關文檔。

29.通常把計數制中使用符號的個數稱為該進位制的基數。十進制的基數為10。

30.一條指令包括操作碼和操作數地址兩個部分。操作碼指定計算機執行什么類型的操作;操作數地址指明操作數所在的地址和運算結果存放的地方。

31.Alt鍵又稱為轉換鍵,Ctrl鍵又稱為控制鍵,Shift鍵又稱為上檔鍵。

32.計算機實際執行程序和加工處理數據時,外存儲器中的信息需要先傳送入內存儲器后才能被CPU使用。

33.根據Internet的域名代碼規定,域名中的net表示網絡中心,com表示商業組織,gov表示政府部門,org表示其他組織。

34.一般所說的存儲器的管理都是指對內存儲器的管理。

35.有符號數表示范圍是:-32767~32767;無符號數表示范圍是:0~65535。

36.計算機中的浮點數表示法包括兩個部分:一部分是階碼(表示指數,記作E);另一部分是尾數(表示有效數字,記作M)。

37.通常,字節是主存儲器中信息的基本編址單元,即一個存儲單元存放一個字節。主存單元從0開始依自然數編號,最大地址加1就是存儲器的存儲容量。例如,存儲容量為1KB時,其地址為0--1023(十進制)。

38.編譯是將用高級語言編寫的源程序整個翻譯成目標程序,然后將目標程序交給計算機運行;解釋是對用高級語言編寫的源程序逐行進行分析,邊解釋、邊執行,立即得到運行結果,它不產生目標程序。

39.能被計算機直接識別的并執行的二進制代碼語言稱為機器語言,用助記符表示二進制代碼的機器語言稱為匯編語言,高級語言是同自然語言和數字語言比較接近的計算機程序設計語言,用高級語言不能直接在機器上運行,需要通過編譯程序轉換成機器語言,程序才能在機器上執行。



Harriet 2007-12-10 10:49 發表評論
]]>
Java知識點http://www.tkk7.com/Harriet/archive/2007/12/03/164791.htmlHarrietHarrietMon, 03 Dec 2007 02:21:00 GMThttp://www.tkk7.com/Harriet/archive/2007/12/03/164791.htmlhttp://www.tkk7.com/Harriet/comments/164791.htmlhttp://www.tkk7.com/Harriet/archive/2007/12/03/164791.html#Feedback0http://www.tkk7.com/Harriet/comments/commentRss/164791.htmlhttp://www.tkk7.com/Harriet/services/trackbacks/164791.html● 用帶標號(label)的break和continue代替goto,使得break可以直接跳出到循環外的某個位置,continue跳到當前循環外的循環
label起給給循環命名的作用,在程序中引用label表示跳出label所標示的循環


● 初始化和清除是程序設計安全性的兩個最重要的問題

● 創建對象時:1.分配空間    2.調用構造函數對這個對象進行初始化    3.然后把初始化完了對象交給那個引用

● 重載
在日常生活中,我們用相同的詞表達多種不同的含義,即詞的“重載”。
大多數程序設計語言要求我們為每個函數都設定一個獨一無二的標識符。
但是構造函數的出現要求函數名也要能夠“重載”。
即函數名相同,參數不同的構造函數
使用時各自調用不同的參數構造函數。

構造函數名與類名相同

● 缺省構造函數
如果一個類沒有定義構造函數,則編譯程序會幫我們自動創建一個缺省構造函數。
但是一旦定義了一個,就不會幫我們自動生成一個。


● this
this關鍵字可以為已調用了其方法的那個對象生成相應的句柄。
調用這個函數的那個對象--this,即這個函數要作用在哪個對象之上。
在一個構造函數中可以調用一次另一個構造函數,用this(參數)

● 垃圾收集機制
垃圾收集機制只知道怎樣釋放由new分配的內存,所以它不知道如何釋放對象的“特殊”內存。一旦垃圾收集機制準備好釋放對象中占用的存儲空間,他首先調用finalize()。
finalize() 由Object定義

在構造函數內只進行基本的初始化

定義初始化:
一個直接的做法是在定義數據成員的同時也為其賦值
可以調用一個方法進行初始化
在構造函數之前就進行定義初始化

用一個類創建類的對象時,先分配一個空間,依次做成員變量的定義初始化,再調用構造函數。


● 靜態數據初始化
靜態的東西屬于類。
類Class與類對象。
如果一個變量是一個靜態變量的話,所有對象里的這個變量的值是同一個。
靜態數據成員只在這個類的第一個對象要創建的時候初始化(裝載這個類的時候)。

運行java命令后,啟動jvm,找到類的定義文件,找到類的定義文件之后,裝載;裝載完成之后在內存里形成了一個類對象來代表這個類,然后要對這個類對象里的靜態成員變量進行初始化

初始化順序
1.類型為Dog的一個對象首次創建時,或者Dog類的靜態方法/數據首次訪問時,Java解釋器必須找到Dog.class。
2.找到Dog.class后,它的所有的靜態初始化模塊都會運行。因此,靜態初始化僅發生一次。
3.創建一個new Dog()時,new語句首先會在堆里分配一個足夠的空間。
4.這個空間將會被清除為零,因此Dog中所有的數據成員都得到了缺省值。
5.執行定義初始化。
6.執行構造函數。
先靜態后動態;先定義初始化后構造函數。

● 顯式初始化
靜態初始化塊,地位相當于一條靜態初始化語句
定義初始化塊,地位相當于一條定義初始化語句

● 數組
數組代表一系列對象或者基本數據類型,所有相同類型的對象都封裝在一起——采用一個統一的標識符名稱。
數組變量實際上是一個指向數組的句柄(引用),所以推薦使用int[] a這樣的書寫方式
通常情況下java的數組通過new出來: a1=new int[5],表示a1是一個引用,指向一個int型數組
使用length

對象數組
對于對象數組,數組的成員實際上是句柄(對象的引用)
對象數組也可以定義初始化
Integer i;   i 為對對象的引用

● 隱藏實施過程——訪問控制
面向對象程序設計的一個概念:隱藏盡可能多的東西
庫創建者應聲明哪些是客戶程序員可以使用的,哪些是不可一使用的

● 包:庫單元
用import來引入包或包里的成員。
import java.util.*;    java.util 表示包名  *號表示包里的所有類
import java.util.Vector;      類的全名
目的是在所有對象范圍內唯一的標識一個類
之所以要這樣的引入,是為了提供一種特殊的機制,來實現命名空間的管理

● 編譯單元
每個編譯單元必須是以.java結尾的文件名稱,在一個編譯單元里,可以有一個 public的類,這個類的名字必須與文件的名字相同。在一個單元內,可以有多個類,但只能有一個public的類。
編譯一個.java文件時,對應于文件中的每一個類,會得到一個.class文件,文件名與類的名字相同。一個程序是一堆.class文件。

● 定義包
一個庫是一堆這樣的.class文件,它們被定義為一個包,但是并不真正地合并在一個文件中。
包沒有什么管理機制,包只要聲明就可以了
   package mypackage;
   public class MyClass;  //MyClass這個類就屬于mypackage這個包
現在,如果客戶程序員想要使用MyClass,就要用import來引入mypackage包,或者是使用MyClass的全名。
    import mypackage;    //引入mypackage包
    MyClass m = new MyClass(); mypackage.MyClass m = new mypackage.MyClass();
//使用MyClass的全名

rt.jar   java基礎類庫的所有包
使用jar命令來查看   |more


● CLASSPATH
-  .表示當前目錄     d:";.  d盤根下是一個搜索的根
- CLASSPATH包含一個或多個目錄,它們作為一種特殊的根使用,從這里展開對.class文件的搜索

● 類成員的訪問屬性
“Friendly” (缺省包)
public: 界面訪問 (accessor/mutator)
private: 不能接觸!
protected: "某種友好"  包內可以訪問,子類也可以訪問。子類和父類不在一個包的情況下。

● 類的訪問控制
一個編譯單元(文件)中只能有一個public的類。因此一個編譯單元只有一個唯一的公共界面,其余的類都是"friendly"的。 public類的名字必須和文件的名字一樣。
可以,盡管很少見,一個編譯單元沒有一個public類,所有的類都是"friendly"的,那么文件名可以任意起。

● 繼承
class ThisClass extends SuperClass {
??? //??? class body
}
ThisClass是第三人稱彈數,extend要加s---extends

● 傳遞構造參數
先初始化父類的部分,在初始化自己的
-缺省構造函數
-super(…)  調用父類的一個構造函數并且傳遞參數

● 初始化和類的裝載
-先父類靜態,后子類靜態
-先父類定義初始化,父類構造函數
-后子類定義初始化,子類構造函數

● Upcasting
-子類和父類之間的關系是: The new class is a type of the existing class.
-Upcasting是安全的.

● Method call binding
-早綁定(靜態綁定))  晚綁定(動態綁定)
-Java中所有的綁定都是晚綁定,除了final的方法
-早綁定有早綁定的優點,晚綁定有晚綁定的優點。但是,晚綁定帶來了多態性。
-多態性就是把一個子類的對象當作父類的對象來看待,然后讓它執行父類所能執行的函數。
靜態綁定:若方法類型為priavte static final 編譯器會準確知道該調用哪個方法
動態綁定:是很重要的特性,它能使程序變得可擴展而不需要重編譯已存代碼

● 多態性
多態性就是指父類的某個方法被其子類重寫時,可以各自產生自己的功能行為

● final
final : This cannot be changed
-final for data
-final for methods
-final for a class

● Final data
-只能被賦值一次的變量
-可以看作是常量
final Value v2 -- final的Value類的引用v2,final保護了對象的引用v2不被改變(這個引用的本身不能被改變)但是Value所指的對象是可以改變的

● Final Methods
-有兩種final方法:
1.在方法上加上一把鎖,防止繼承者改變它的意義。
2.編譯器把對該方法的調用變成inline(嵌入)調用。
-Private is Final,不存在override問題

● Final classes
-Final classes是不允許被繼承的。為防止他人從你的類上派生新類,此類是不可擴展的。主要是安全上的作用。

● abstract類和abstract方法(抽象類和抽象方法)
可以定義某個類是抽象的(只制造概念)
-一個類的作用僅僅是表達接口,而不是具體的實現細節
-抽象的方法是不完全的,它只是一個聲明,沒有方法體
-包含一個抽象方法的類被稱作抽象類
-不能制造抽象類的對象
-從抽象類繼承的類必須override所有父類的抽象方法,否則子類本身成為一個抽象類
-可以聲明一個抽象類但是里面沒有一個抽象方法
關鍵字abstract定義抽象類
做這樣類的目的是禁止產生這樣類的對象

abstract類不能用new運算符創建對象,必須產生其子類,由子類創建對象。
對于abstract方法,只允許聲明,而不允許實現
如果一個類是一個abstract類的子類,它必須具體實現父類的abstract方法
如果一個類中含有abstract方法,那么這個類必須用abstract來修飾(abstract也可以沒有abstract方法)
一個abstract類只關心它的子類是否具有某種功能,而不關心功能的具體行為,功能的具體行為由子類負責實現

● Interface 
——totally abstract class(完全抽象的類)
-Interface在java中的地位和class一樣  可以繼承
-Interface沒有body(也沒有構造函數),只表達概念  
-在Interface中所有的方法都是public的,即使你沒有聲明它是public的。
-在Interface中所有的數據成員都是public static final的,即使你沒有聲名。但不能是blank final
使用implements,表示實現了什么功能
-Interface編譯后也生成一個class文件。其實Interface也是class,只不過是一種完全抽象的類

● 實現interface
-實現interface的類,其interface中所有的方法必須被“實現”,否則這個類成為一個抽象類。
-所有實現interface中的方法必須被申明為public
-Interface可以從多個Interface得到繼承,但是不能繼承類。

-為了克服單繼承的缺點,Java使用了接口,一個類可以實現多個接口
-接口體中只進行方法的聲明,不許提供方法的實現,所以,方法的定義沒有方法體,且用分號結尾
-一個類通過使用implements聲明自己使用一個或多個接口,如使用多個接口,用逗號隔開接口名
- 要注意的是,接口中的方法被默認是public的,所以類在實現接口方法時,一定要用public來修飾。另外,如接口方法的返回類型不是void的,那 么在類中實現該接口方法時,方法體至少要有一個return語句;如果是void型,類體除了兩個大括號外,也可以沒有任何語句。
-Java為我們提供的接口都在相應的包中,通過引入包可以使用Java提供的接口,也可以自己定義接口,一個Java源文件就是由類和接口組成的。

● Inner class(內部類)
-In Java 1.1, it is possible to place a class definition within another class definition.
-所謂內部類就是定義在另外一個類內部的類(某個類的定義,在另一個類的內部)
 新的消息機制需要有一個類能夠訪問另外一個類的私有成員
 為了解決因為多類類同時繼承一個很小的類時,所帶來的命名問題。
-什么是使用一個類或訪問一個類:用這個類去制造對象
-類里面除了有成員變量、成員函數,還有成員類,實際上內部類可以稱之為成員類,成員類也具有成員函數和成員變量一樣的屬性。成員類可以訪問私有變量,成員類里面的所有的成員函數可以訪問內部類外面那個類的所有私有變量。
-內部類什么時候被初始化?編譯時生成幾個class文件?
 每個內部類生成一個class文件


1.一個內部類的對象能夠訪問創建它的對象的實現,包括私有數據
2.對于同一個包中的其他類來說,內部類能夠隱藏起來
3.匿名內部類可以很方便的定義回調
4.使用內部類可以非常方便的編寫事件驅動程序

● Private inner class
Inner classes可以完全被封閉起來,不被外界所看到

● Why inner classes?
兩個理由要在方法和scope中定義inner class:
-我們準備實現某種形式的interface,使自己能創建和返回一個句柄。
-要解決一個復雜的問題,并希望創建一個類,用來輔助自己的程序,同時不愿意把類的細節公開。


在函數里面定義的類都加一個數字(序號),從1開始
有變量有函數就是一個類,這個類沒有名字,是匿名類,生成一個“父類名$序號”的class文件
子類送參數給父類的構造函數:在子類的構造函數里用super

如何讓內部類訪問外部類,被訪問的
匿名類沒有名字,也就沒有構造函數,定義初始化塊相當于匿名類的構造函數

● Outter class?
inner classer擁有訪問外部類的所有成員的能力,這是使用inner類的主要理由

父類與子類函數與函數之間的關系,如果函數名相同,參數表相同,則構成override的關系。
私有的為靜態綁定
inner class 與 inner class 之間不會構成override關系。

● Exception機制處理
但是如果你完全檢查任何時刻的錯誤,你的代碼就會變成無法閱讀的夢魘。
所有的函數調用的返回值都要判斷,但是可能發生由于嵌套過多而造成代碼閱讀和維護困難,所以java里使用了try...catch,每一個catch針對一種錯誤,將事務邏輯與錯誤處理分開
-使用異常機制,讀、寫和調試代碼變得清晰。它把處理錯誤的代碼和正常的代碼分開。

● Throw an exception
-throw new NullPointerException();
-throw new NullPointerException("HERE!");
異常發生時,你不能解決問題,所以必須扔(throw)出一個異常。
1.一個異常對象建立起來了。
2.當前運行的路徑被停止,異常對象被彈出(eject)。
3.異常處理機制接管,開始尋找一個合適的地方來繼續執行。

● Catch an exception
Java的異常機制的好處就在于它使我們在一個地方將精力集中在要解決的問題上,而在另一個地方處理來自那部分代碼的異常情況。
  try {      //   code that may make exception
  } catch ( Type1 id1) {
  } catch ( Type2 id2) {
  }
catch的匹配不是一種精確匹配,只要這個對象是那個類的對象就可以了
catch不管再多,只需滿足一個就結束了。

● Catch all kind of exception
一個捕捉任何異常的捕捉器是一個捕捉基本類型異常的捕捉器。
catch ( Exception e) {
 System.out.println("caught an exception")
}
捕捉任何異常的catch

● Interface: Throwable
String getMessage();
String toString();
void printStackTrace();
void printStackTrace(PrintStream);

● Re-throwing
catch (Exception e) {
 throw e;
}
-關于fillInStackTrace()
-也可以拋出一個與接收到的異常不同的異常

● Announce for exception
通知客戶程序員自己寫的方法中可能拋出什么樣的異常是一種文明的做法。
 void f() throws tooBig, tooSmall, oldStyle { // Body of f() }
如果你要從你的方法中拋出某種異常,你必須申明。
但是你可以撒謊申明你并不真正拋出的異常。

● Override of exception
當你override一個方法,你只能申明和拋出不比它的父類版本中申明的異常多的異常

● finally



Harriet 2007-12-03 10:21 發表評論
]]>
Java 和 .Net 在異常處理機制上的區別http://www.tkk7.com/Harriet/archive/2007/12/03/164789.htmlHarrietHarrietMon, 03 Dec 2007 02:17:00 GMThttp://www.tkk7.com/Harriet/archive/2007/12/03/164789.htmlhttp://www.tkk7.com/Harriet/comments/164789.htmlhttp://www.tkk7.com/Harriet/archive/2007/12/03/164789.html#Feedback1http://www.tkk7.com/Harriet/comments/commentRss/164789.htmlhttp://www.tkk7.com/Harriet/services/trackbacks/164789.html  
關于 Java 和 .Net 優劣的爭論一直在繼續,而在異常處理方面體現得最為激烈,因為他們之間的差異是如此明顯。.Net 晚于 Java 出現,那么 Java 對 .Net 就理應起到很重要的借鑒作用,但是偉大的 Anders Hejlsberg 為什么沒有繼續 Java 的實現方式,而是另辟蹊徑,這是一個非常值得研究的問題。因為我們要承認一個真理:正確的東西大家都是一樣的正確,錯誤的卻各有個的錯誤。可以肯定這不可 能是 Anders 的疏忽,那么他的道理究竟何在,或者說他們之間究竟有什么區別?

      在你能耐下心來看完這篇帖子之前,我想要明確告訴你一個結論:Java 和 .Net 在異常處理的本質上是沒有區別的。

一、Java 是如何處理異常的

      如果一個 Java 方法要拋出異常,那么需要在這個方法后面用 throws 關鍵字定義可以拋出的異常類型。倘若沒有定義,就認為該方法不拋出任何異常。如果從方法的入口和出口的角度去考慮一下這個規范,我們知道參數可以認為是方 法的入口(當然某些情況下也可以是出口),而返回值則是方法的出口,這是在程序正常執行的情況下,數據從入口入,出口出。要是程序非正常執行,產生異常又 當如何? 被拋出的異常應該如何從方法中釋放出來呢? Java 的這種語法規范就如同給異常開了一個后門,讓異常可以堂而皇之“正確”地從方法里被拋出。

      這樣的規范決定了 Java 語法必須強行對異常進行 try-catch。設想一下,對于以下的方法簽名:

public void foo() throws BarException { ... }

暗含了兩方面的意思:第一,該方法要拋出 BarException 類型的異常;第二,除了 BarException 外不能拋出其他的異常。而正是這第二點的緣故,我們要如何保證沒有除 BarException 之外的任何異常被拋出呢? 很顯然,就需要 try-catch 其他的異常。也就是說,一般情況下,方法不拋出哪些異常就要在方法內部 try-catch 這些異常。

      Java 這樣的機制既有優點,也有缺點。先來說說優點:

  • 很顯然,這種規范是由 Java 編譯器決定的。倘若 Java 程序的入口點 main() 方法沒有任何異常拋出,就是說要在 main() 方法內部,即整個程序內部捕捉所有的異常,否則將無法通過編譯。這樣編譯器保證了程序對每個異常都有相應的計劃和處理,不會有未處理的異常被泄露到虛擬機 中,導致程序意外中斷或退出,也就是增強了程序的健壯性。當然,Java 有 RuntimeException 的概念,這樣的異常仍然可以隨時被拋出到虛擬機中。
  • 強行 try-catch 要求把異常作為程序設計的一部分看待。就如同方法的參數和返回值一樣,在編寫一個方法時,要結合上下文做出通盤的考慮和打算。雖然異常是所謂的“意外情況”,但是這些“例外”理應是被我們全部了解并處理的。
  • 方便調試。異常理應在正確的位置被捕捉。當異常發生時,我們能更清楚的了解到其來源和相應處理程序的位置,而免去了在整個調用棧中摸索的麻煩。
  • 在不借助任何文檔的情況下,從方法簽名就可以知曉應該對哪些異常進行處理。

      Java 異常處理機制的這些優點也直接導致了他的致命弱點:將程序變得異常繁復。往往一個簡單的程序,功能代碼寥寥幾行,而異常處理部分卻占用了程序的絕大部分篇 幅;同時導致縮進深度加深,既不利于書寫,也不利于閱讀。另外他的強行 try-catch 需要程序員有更高深的造詣,能夠通盤考慮異常處理設計問題,這個在程序開始之初或者對于初學者是一個不小的門檻。這往往會阻礙其推廣與發展,因為低水平初 學者的信心往往因此而受到打擊。然而對于高手來說,編譯器是否能幫助他們找到未被處理的異常只是一個方便與否的問題,只要在編寫方法時注意了異常處理,即 便沒有編譯器的支持,情況也不會糟糕太多。反而倒是由于要遵循這樣復雜的異常處理規范,以至于大多數人都可能為了圖一時方便,對異常的基類型 Exception 或 Throwable 進行籠統地捕捉,這樣做的危害就是那些你無法處理的異常被溺死在處理程序中,(按照異常處理原則,我們應該只捕捉那些可以被處理或恢復的異常,而把其他的 異常繼續拋出。至于這樣做的優勢,以及不這樣做所帶來的問題,不是一兩句能夠說清楚,這里就不展開討論了。)導致程序的不穩定和不確定。既沒有發揮 Java 語法在這方面的優勢,反而增加了憂患。

二、.Net 是如何處理異常的

      一句話概括 .Net 的異常處理方式就是隨心所欲。沒有人要求你一定要拋出異常,也更沒有人要求你一定要捕捉異常。未被捕捉的異常會被以 Unhandled Exception 的形式拋出到虛擬機中。在此我就要先解決一下文章開頭提到的問題,為什么說 Java 和 .Net 這兩種異常處理機制在本質上是相同的。可以從兩個方面來考慮:

  1. 默認情況下。Java 在默認情況下 main() 方法是不拋出異常的,正如前面所說的,這要求所有的異常都必須在 main() 方法內部被捕捉;而 .Net 則沒有這種約束,他的 Main() 以至于整個應用程序中的任何一個方法對異常都是完全開放的。這樣來看,這兩者剛好是對立互補的。
  2. 非默認情況下。Java 可以通過在 main() 方法后面加 throws 關鍵字使得整個應用程序對異常開放;而 .Net 則可以通過給應用程序域(Application Domain)的 UnhandledException 事件添加委托達到捕捉所有異常的目的,很顯然這又是對立互補的。

因此,就好像一個是“正反”,一個是“反正”,加在一起“正反反正”都是一樣的,對于達到控制異常的目錄來說,是沒有區別的。

      很多 Java 愛好者都鄙視 .Net 的這種行為,一方面他令程序變得不夠健壯,因為默認情況下沒有強制的辦法要求所有的異常都被處理,或被正確處理;另外,他為調試增加了困難,不借助文檔或 代碼你將無法了解到一個方法可能拋出什么異常,而當一個異常被拋出的時候,同時異常處理代碼又寫得不夠完善,你將不得不仔細查看整個調用棧來確定異常出現 的位置,而對于這一點 Java 默認是強制的。

      但是 Anders 的想法總是有道理的。

  1. .Net 代碼寫起來非常容易。這是對于初學者,或者那些只是想實現一些測試性小功能的人而言,你完全沒有必要考慮太多異常處理的細節,你要的就是寫代碼,然后讓他 跑起來。這樣的簡單性無疑是你希望看到的,這樣的簡單性無疑更有利于 .Net 在市場上的推廣。由于他在這方面并沒有什么理論上的漏洞,也就仍然適合構建龐大的項目,只是感覺沒有那么舒服罷了。
  2. 一定程度上增加了程序的安全性。難道不捕捉異常可以被成為是安全的嗎?這個話也許要從另外一方面來想,前面說過,有些 Java 程序員(絕對不占少數)為了圖省事,在強行捕捉異常的壓迫下,選擇捕捉異常的基類型,也就是捕捉所有的異常。這樣當有你無法處理的異常出現時,他們就溺死 在了你的代碼中,而外面的程序全然不知,還在以一種不確定的狀態運行著,這就可能是危險的開始。而如果是 .Net,那么 Unhandled Exception 會被虛擬機捕獲,導致程序異常退出,雖然這從面子上對于用戶不是一個好的交代,但是深層次地他避免了程序在危險的狀態下繼續運行。

      總之,蘿卜白菜各有所愛。我的這篇帖子力求公正地討論了這個問題,希望能對你有所幫助。



Harriet 2007-12-03 10:17 發表評論
]]>
Myeclipse中Tomcat的兩種部署方式http://www.tkk7.com/Harriet/archive/2007/11/23/162565.htmlHarrietHarrietFri, 23 Nov 2007 02:58:00 GMThttp://www.tkk7.com/Harriet/archive/2007/11/23/162565.htmlhttp://www.tkk7.com/Harriet/comments/162565.htmlhttp://www.tkk7.com/Harriet/archive/2007/11/23/162565.html#Feedback9http://www.tkk7.com/Harriet/comments/commentRss/162565.htmlhttp://www.tkk7.com/Harriet/services/trackbacks/162565.html閱讀全文

Harriet 2007-11-23 10:58 發表評論
]]>
自己編寫的一個用struts+spring實現的登陸實例http://www.tkk7.com/Harriet/archive/2007/11/23/162540.htmlHarrietHarrietFri, 23 Nov 2007 02:41:00 GMThttp://www.tkk7.com/Harriet/archive/2007/11/23/162540.htmlhttp://www.tkk7.com/Harriet/comments/162540.htmlhttp://www.tkk7.com/Harriet/archive/2007/11/23/162540.html#Feedback9http://www.tkk7.com/Harriet/comments/commentRss/162540.htmlhttp://www.tkk7.com/Harriet/services/trackbacks/162540.html閱讀全文

Harriet 2007-11-23 10:41 發表評論
]]>
Struts-config.xml配置文件講解http://www.tkk7.com/Harriet/archive/2007/11/22/162432.htmlHarrietHarrietThu, 22 Nov 2007 10:11:00 GMThttp://www.tkk7.com/Harriet/archive/2007/11/22/162432.htmlhttp://www.tkk7.com/Harriet/comments/162432.htmlhttp://www.tkk7.com/Harriet/archive/2007/11/22/162432.html#Feedback0http://www.tkk7.com/Harriet/comments/commentRss/162432.htmlhttp://www.tkk7.com/Harriet/services/trackbacks/162432.html
一、    struts-config.xml的主要元素:
<?xml version=”1.0” encoding=”ISO-8859-1”?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
   
   <data-sources>
       <data-source>
       </data-source>
   </data-sources>

   <form-beans>
       <form-bean / >
   </form-beans>

   <global-forwards>
       <forward / >
   </global-forwards>

   <action-mappings>
       <action / >
   </action-mappings>

   <controller / >

   <message-resources / >

   <plug-in />

</struts-config>
注意:以上各元素的順序是非常重要的,你的struts-config.xml配置文件必須按照這個順序進行配置,否則在你的容器啟動的時候就會出錯。

二、    struts-config.xml的子元素:
1.<icon / >子元素
   它包含<small-icon / >及<large-icon / >,它的作用是圖形化其父元素,<small-icon/>的內容是一個16x16的圖像文件,而<large- icon/>的內容是一個32x32的圖像文件。如下例子:
   <icon>
<small-icon>
              /images/smalllogo.gif
</small-icon>
<large-icon>
    /images/largelogo.gif
</large-icon>
</icon>
2.<display-name / >子元素
   它提供對父元素的短文字(short textual)描述信息,如下:
   <display-name>
           short textual discription of its parent element
   </display-name>
3.<description / >子元素
   它提供對父元素的完全(full-length textual)的描述信息,如下:
<description>
full-length textual discription of its parent element
</description>
4.<set-property / >子元素
       它用來設置它的父元素中設定的JavaBean的屬性值,它一般用在指定的GenericDataSource 屬性,擴展的ActionMappings以及擴展的 global forwards。如下:
       <set-property
           property="name of bean property"       
value="value of bean property" />
         例如:
         <set-property property="driverClass" value="org.gjt.mm.mysql.Driver" />
        <set-property property="user" value="admin"/>
        <set-property property="maxCount" value="4"/>
<set-property property="minCount" value="2"/>
<set-property property="password" value=""/>
<set-property property="url" value="jdbc:mysql://localhost:3306/struts"/>

三、    配置JDBC數據源
其配置形式如下:
<data-sources>
<data-source>
<set-property property="driverClass" value="fully qualified path of JDBC driver"/>
<set-property property="url" value="data source URL"/>
<set-property property=”mincount” value="the minimum number of connections to open"/>
<set-property property="password" value="the password used to create connections"/>
<set-property property="user" value="the username used to create connections"/>
</data-source>
</data-sources>
<data-source>的屬性及其描述信息如下:
屬  性    描 述 信 息
Key    綁定在ServletContext上的DataSource實例的索引鍵,若不設定則缺省為Action.DATA_SOURCE_KEY,如果在應用程序中有多于一個的DataSource,則必須設置Key的值。
DriverClass    所用的JDBC驅動類(必須的)如:com.microsoft.jdbc.sqlserver.SQLServerDriver
url    所用的JDBC的URL(必須的)如:jdbc:microsoft:sqlserver://xg088:1433
MaxCount    同時打開的最大連結數,缺省值為2(可選的)
MinCount    同時打開的最小連結數,缺省值為1(可選的)
User    連結到數據庫的用戶名(必須的)
Password    連結到數據庫的密碼(必須的)
Description    關于DataSource的描述信息(可選的)
ReadOnly    如果設為true,則表示該連結是只讀的,缺省為false。(可選的)
LoginTimeout    創建連結的最大允許時間,以秒為單位。(可選的)
AutoCommit    如果為true,則每次execute之后會強制回滾。缺省為true。(可選的)
舉例說明:
<data-sources>
    <data-source>
        <set-property property=”key” value=” value="WILEY_DATA_SOURCE" />
<set-property property="driverClass" value="org.gjt.mm.mysql.Driver" />
<set-property property="url" value="jdbc:mysql://localhost/wileyusers" />
<set-property property="maxCount" value="5"/>
<set-property property="minCount" value="1"/>
<set-property property="user" value="sa"/>
<set-property property="password" value="yourpassword"/>
</data-source>
</data-sources>

四、    配置FormBean
<form-bean / >用來定義將要綁定到Action的FormBean的實例。語法如下:
<form-beans>
<form-bean name="name used to uniquely identify a FormBean"
            type=”fully qualified class name of FormBean"/>
         </form-beans>
例:
<form-beans>
<form-bean name="lookupForm" type="wiley.LookupForm" />
</form-beans>

五、    配置全局轉發
全局轉發可以定義幾個<forward/>子元素,struts首先會在<action-mappings>元素中找對應的<forward>,若找不到,則到全局轉發配置中找。語法如下:
<global-forwards>
<forward name="unique target identifier"
path="context-relative path to targetted resource "/>
</global-forwards>
除了name及path屬性之外,還有一個redirect屬性,如果redirect設為true的時候,則用 HttpServletResponse.sendRedirect()方法,否則用RequestDispatcher.forward()方法,缺省 為false。
注:如果為true,則用HttpServletResponse.sendRedirect()方法,此時存儲在原來的HttpServletRequest中的值將會丟失。
例子:
<global-forwards>
<forward name="success" path="/welcome.jsp"/>
<forward name="failure" path="/index.jsp"/>
</global-forwards>
六、    配置<action-mappings>
它可以定義幾個<action / >子元素,它主要是定義Action實例到ActionServlet類中,語法如下:
<action-mappings>
<action path="context-relative path mapping action to a request"
type="fully qualified class name of the Action class"
name="the name of the form bean bound to this Action">
<forward name="forwardname1" path="context-relative path"/>
<forward name="forwardname2" path="context-relative path"/>
</action>
</action-mappings>
<action/>屬性及其描述信息如下:
屬  性    描 述 信 息
Path    在瀏覽器的URL中輸入的字符(必須的)
Type    連結到本映射的Action的全稱(可選的)
Name    與本操作關聯的Action Bean在<form-bean/>中定義name名(可選的)
Scope    指定ActionForm Bean的作用域(session和request),缺省為session。(可選的)
Input    當Bean發生錯誤時返回的控制。(可選的)
ClassName    指定一個調用這個Action類的ActionMapping類的全名。缺省用org.apache.struts.action.ActionMapping,(可選的)
Forward    指定處理相應請求所對應的JSP頁面。(可選的)
Include    如果沒有forward的時候,它起forward的作用。(可選的)
Validate    若為true,則會調用ActionForm的validate()方法,否則不調用,缺省為true。(可選的)
例子:
<action-mappings>
<action path="/lookupAction"
type="wiley.LookupAction"
name="LookupForm"
scope="request"
validate="true"
input="/index.jsp">
<forward name="success" path="/quote.jsp"/>
<forward name="faliue" path="/index.jsp"/>
</action>
</action-mappings>

七、    配置RequestProcessor
在struts-config.xml文件中用<controller/>子元素來定義RequestProcessor,其語法格式如下:
<controller processorClass="fully qualified class name" />
<controller />元素屬性及其描述信息如下:
屬  性    描  述
processorClass    指定自定義的RequestProcessor類的全名
BufferSize    指定用來下載所用的緩存大小。缺省是4096字節。
contentType    定義response文本類型,缺省是text/html
Debug    定義當前系統的除錯級別,缺省是0
Locale    如果是true,則在用戶的session中存放Locale對象,缺省為true
maxFileSize    指定下載文件最大的大小。缺省是250M
multipartClass    指定去代替org.apache.struts.upload.DiskMultipartRequestHandler類的類的全名。
Nocache    如果是true,則會關閉每個response的緩存功能。缺省是false
TempDir    指定上載文件所用的臨時目錄。缺省值由容器決定
例子:
① <controller processorClass="wiley.WileyRequestProcessor" />
② <controller
    contentType="text/html;charset=UTF-8"
    debug="3"
    locale="true"
    nocache="true"
    processorClass="org.apache.struts.action.RequestProcessor"/>
八、    配置Message Resources
在struts-config.xml文件中用<message-resources />元素來定義消息資源。其語法如下:
       <message-resources  parameter="wiley.ApplicationResources"/>
<message-resources />元素屬性及其描述信息如下:
屬  性    描  述
Parameter    給定資源文件全名
ClassName    定義處理消息資源的類名的全名,缺省是org.apache.struts.config.MessageResourcesConfig
Factory    定義MessageResourcesFactory類的全名,缺省是org.apache.struts.util.property.MessageResourcesFacotry
Key    定義綁定在這個資源包中的ServletContext的屬性主鍵,缺省值是Action.MESSAGES_KEY.
Null    如果為true,則找不到消息key時,則返回null,缺省是true.
例子:
① <message-resources parameter="wiley.ApplicationResources"/>
② <message-resources
    parameter="StorefrontMessageResources"
    null="false"/>
<message-resources
    key="IMAGE_RESOURCE_KEY"
    parameter="StorefrontImageResources"
    null="false"/>
注意:設定key的目的如下:
<html:img altKey="navbar.home.image.alt" bundle="IMAGE_RESOURCE_KEY" pageKey="navbar.home.image" width="125" height="15" border="0"/>
這里說明要到StorefrontImageResources.properties資源文件中找主鍵值是”navbar.home.image”所對應的值。
這里StorefrontImageResources.properties的內容如下:
……
navbar.home.image=/images/home.gif
navbar.home.image.alt=Home
……
此處navbar.home.image.alt說明的和<img alt=”Home”……/>一樣。
九、    配置Plug-in
配置Plug-in如下:
<plug-in className="wiley.WileyPlugin"/>
也可如下:
<plug-in className="com.oreilly.struts.storefront.service.memory.StorefrontMemoryDatabasePlugIn">
  <set-property property="pathname" value="/WEB-INF/database.xml"/>
</plug-in>


Harriet 2007-11-22 18:11 發表評論
]]>
我的第一個spring學習——用myeclipse開發springhttp://www.tkk7.com/Harriet/archive/2007/11/22/162317.htmlHarrietHarrietThu, 22 Nov 2007 06:01:00 GMThttp://www.tkk7.com/Harriet/archive/2007/11/22/162317.htmlhttp://www.tkk7.com/Harriet/comments/162317.htmlhttp://www.tkk7.com/Harriet/archive/2007/11/22/162317.html#Feedback11http://www.tkk7.com/Harriet/comments/commentRss/162317.htmlhttp://www.tkk7.com/Harriet/services/trackbacks/162317.html認為真正的程序開發員應該是大部分都用快捷的。以前,很多次java后我師問題時,他是"啪啪啪"地代跳那,看得我眼花繚亂當時,我就慕死了,心想:以后我也要這樣
在,然我還沒有到他那的水平,但是我用快捷
下面就用到一些常到的快捷

  ctrl+a:

  ctrl+c:

  ctrl+v:

我常用的有shift/Home/End+上下左右
大家有些常用的快捷鍵啊大家分享分享

Myeclipse不熟悉卻要用它來開發spring的初學者來,是比有困的,因我就是這樣過來的。所以,我做了個flash演示目的 ,但是太大了,上不了。于我注冊blogjava的新手來,有些功能不太清楚。在我先把寫下來,等以后我有時間把 blogjava弄明白了,看能不能再把那個flash上傳上來。

步驟:

第一步:建工程
   File -> New -> Project ->Web Project,"Project Name":MySpringTest,
然后"Finish";

第二步:導入spring包
  
選中MySpringTest,右擊,MyEclipse -> Add Spring Capabilities……,都默認即可;

第三步:
  
建立項目所需類;MySpringTest -> src -> New ...(以下三個都這樣建)

Spring
的開發沒法自動生成 Bean, 這里大家只好手工來寫了, 也很簡單。

1
、接口Action:(MySpringTest -> src -> New -> interface ,取名為Action)

public interface Action {
    
public String execute(String str);
}

2、實現接口Action的類UpperAction:將其 message 屬性與輸入字符串相連接,并返回其大寫形式。

   (MySpringTest -> src -> New -> class ,取名為UpperAction
 1 
 2 public class UpperAction implements Action{
 3     private String message;
 4 
 5     public String getMessage() {
 6         return message;
 7     }
 8 
 9     public void setMessage(String message) {
10         this.message = message;
11     }
12     public String execute(String str){
13         return (getMessage()+str).toUpperCase();
14     }
15 }
16 

3、實現接口Action的類LowerAction:

將其 message 屬性與輸入字符串相連接,并返回其小寫形式。
   (MySpringTest -> src -> New -> class ,取名為LowerAction

 1 
 2 public class LowerAction implements Action{
 3     private String message;
 4 
 5     public String getMessage() {
 6         return message;
 7     }
 8     public void setMessage(String message) {
 9         this.message = message;
10     }
11     public String execute(String str){
12         return(getMessage()+str).toLowerCase();
13     }
14 }
15 

4、做測試用的SimpleTest類:
MySpringTest -> src -> New -> class ,取名為SimpleTest

 1 import org.springframework.context.ApplicationContext;
 2 import org.springframework.context.support.FileSystemXmlApplicationContext;
 3 
 4 public class SimpleTest {
 5     public static void main(String args[])
 6     {
 7         SimpleTest test=new SimpleTest();
 8         test.testQuickStart();
 9     }
10     public void testQuickStart(){
11         ApplicationContext ctx=new FileSystemXmlApplicationContext("src/bean.xml");
12         Action action=(Action)ctx.getBean("action1");
13         System.out.println(action.execute("Rod Johnson"));
14         action=(Action)ctx.getBean("action2");
15         System.out.println(action.execute("jeckj"));
16     }
17 }
18 

第四步:配置applicationContext.xml文件

 1      <?xml version="1.0" encoding="UTF-8"?>
 2      <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 3      <beans>
 4      <description>Spring Quick Start</description>
 5      
 6      <!--該處bean中的name值必須是 其對應的class中的私有成員名
 7      -->
 8      <bean id="action1" class="UpperAction">
 9      <property name="message"> 
10      <value>HeLLo</value> 
11      </property> 
12      </bean>
13        
14      <bean id="action2" class="LowerAction">
15      <property name="message"> 
16      <value>HeLLo</value> 
17      </property> 
18      </bean> 
19      
20      </beans>

 第四步:調試
   雙擊 Package Explorer 下 MySpringTest/src/TestAction.java 打開源代碼,點擊菜單 Run -> Run As -> 1. Java Application, 如果沒有錯誤的話將會出現如下

1 log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
2 log4j:WARN Please initialize the log4j system properly.
3 HELLOROD JOHNSON
4 hellojeckj

問題:
   1 log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
2 log4j:WARN Please initialize the log4j system properly.

1、我也是個初學者,我想請問比較上手的人士,上面兩行是什么意思?
2、這個例子中沒有用到Tomcat,是不是spring框架不需Web Service,還只是不用Tomcat?


Harriet 2007-11-22 14:01 發表評論
]]>
JSTL簡介——分類說明,清晰易懂http://www.tkk7.com/Harriet/archive/2007/11/22/162269.htmlHarrietHarrietThu, 22 Nov 2007 01:29:00 GMThttp://www.tkk7.com/Harriet/archive/2007/11/22/162269.htmlhttp://www.tkk7.com/Harriet/comments/162269.htmlhttp://www.tkk7.com/Harriet/archive/2007/11/22/162269.html#Feedback0http://www.tkk7.com/Harriet/comments/commentRss/162269.htmlhttp://www.tkk7.com/Harriet/services/trackbacks/162269.html閱讀全文

Harriet 2007-11-22 09:29 發表評論
]]>
寫在第一篇http://www.tkk7.com/Harriet/archive/2007/11/21/162151.htmlHarrietHarrietWed, 21 Nov 2007 09:50:00 GMThttp://www.tkk7.com/Harriet/archive/2007/11/21/162151.htmlhttp://www.tkk7.com/Harriet/comments/162151.htmlhttp://www.tkk7.com/Harriet/archive/2007/11/21/162151.html#Feedback2http://www.tkk7.com/Harriet/comments/commentRss/162151.htmlhttp://www.tkk7.com/Harriet/services/trackbacks/162151.html 一直想擁有這樣類似的blog
來記錄我的學習
今天,終于找到了這個不錯的blogjava
在接下來的日子里鑒證我的學習過程
持之以恒



Harriet 2007-11-21 17:50 發表評論
]]>
主站蜘蛛池模板: 啊灬啊灬别停啊灬用力啊免费看| 18女人毛片水真多免费| 免费无码一区二区三区蜜桃大 | 中文在线日本免费永久18近| 免费看国产一级特黄aa大片| 亚洲变态另类一区二区三区| 日韩黄色免费观看| 青娱乐在线免费观看视频| 国产又大又粗又硬又长免费| 色多多免费视频观看区一区| 亚洲M码 欧洲S码SSS222| fc2成年免费共享视频网站| 在线观看国产区亚洲一区成人| 99在线免费观看| 亚洲视频在线观看不卡| 久久精品a一国产成人免费网站| 亚洲大尺度无码无码专线一区| 国产精品va无码免费麻豆| 日本激情猛烈在线看免费观看| 亚洲色偷偷综合亚洲AVYP| 免费无码中文字幕A级毛片| 亚洲伊人久久大香线蕉| 久久WWW免费人成人片| 国产青草亚洲香蕉精品久久| 亚洲午夜无码片在线观看影院猛 | 99re在线精品视频免费| jiz zz在亚洲| 亚洲综合av永久无码精品一区二区| 亚洲午夜免费视频| 亚洲精品国产综合久久久久紧| 亚洲va中文字幕无码| 最近免费中文字幕高清大全| 亚洲中文字幕无码久久| 亚洲精品无码永久在线观看| 少妇太爽了在线观看免费视频| 亚洲成AV人片高潮喷水| 久久精品亚洲中文字幕无码网站 | 国产午夜精品理论片免费观看| 亚洲最新视频在线观看| 日本一区二区三区日本免费| 中文字幕久无码免费久久|