GWT筆記(6)

chszs發表於2007-07-22
版權宣告:本文為博主chszs的原創文章,未經博主允許不得轉載。 https://blog.csdn.net/chszs/article/details/1701722

GWT筆記(6)

Java模擬(Java Emulation)
儘管完整的GWT應用程式能用Java寫出,再部分被翻譯成JavaScript用於客戶端執行。但這裡有幾個不足:
1)面向客戶端的程式碼被某java包所限制,只能作為其子集,該java包是Google的java到javascript翻譯器所支援的java包。
2)另外,客戶端執行的程式碼只使用JRE的子集,該子集能被JavaScript所支援。
一旦你熟悉它們後,你會發現這些限制並不象早先想的那麼壞。這有點象寫移動版的Java應用程式(J2ME)。
一、語言子集(Language subset)
GWT的java到javascript翻譯器解析原始碼,就像java編譯器一樣,但不是將其編譯成位元組碼,而是JavaScript程式碼。
如果你使用GWT不支援的語言特徵的話,在主機模式你的程式碼會工作的很好,但是為了在Web模式執行,編譯到JavaScript時,將得到錯誤。
1)Language Level
GWT編譯器編譯Java原始碼是相容J2SE1.4.2及更早的版本,對Java 5的新特徵則不支援。
2)Intrinsic types
支援byte,char,short,int,long,float,double,Object,String和arrays。
然而,JavaScript沒有64位的整型,故long被對映成double型別的浮點數值。要確保在主機模式和Web模式的連續性,Google推薦使用int變數。
3)Exception
try,catch,finally和使用者自定義的exception都是支援的。
4)Assertions
GWT編譯器解析Java的assert語句時,在JavaScript程式碼中不會省略它的。assert如果能作為VM引數的話,在主機模式下被處理。
5)Multithreading and synchronization
JavaScript直譯器是單執行緒的,因此GWT處理synchronized關鍵字時,它不會起任何作用。synchronization相關庫方法是無效的,包括Object.wait(),Object.notify()和Object.notifyAll()。
6)Relection
GWT不支援類的連續的動態載入。
7)Finalization
JavaScript不支援finalization物件。
8)Strict floating-point
Java語法規範精確地定義了浮點型別,包括單精度數和雙精度數,用strictfp關鍵字來定義的。GWT不支援strictfp關鍵字。
二、Library subset
為了面向客戶端程式碼,GWT只支援JRE庫的子集。一個原因是JRE庫太大,另一個原因是JavaScript沙盒不支援那麼多特徵。
GWT模擬不同於JRE執行環境。
1)Regular expressions
Java的正規表示式語法和JavaScript的是相似的,但使用時還是要小心其中的不同。
2)Serialization
GWT不支援標準的Java serialization。然而,GWT有一個RPC工具,它提供了自動的物件序列化。
三、Supported Packages
為了客戶端程式碼,GWT實現了JRE1.4的Java.lang和java.util包的子集。
java.lang package
1)Classes
Boolean,Byte,Character,Class,Double(1),Float(1),Integer,long(1),Math,Number,Object,Short,String(2),StringBuffer,System。
注:
(1) 避免使用map關鍵字;
(2) 正規表示式改變其標準實現。
2)Errors and Exceptions
ArrayStoreException,AssertionError,CalssCastException,Error,IllegalArgumentException,IllegalStateException,IndexOutOfBoundsException,NegativeArraySizeException,NullPointerException,NumberFormatException,RuntimeException,StringIndexOutOfBoundsException,Throwable(1),UnsupportedOperationException.
注:
(1) 堆疊追蹤目前還不支援。
3)Interfaces
CharSequence,Cloneable,Comparable.

java.util package
1)Classes
AbstractCollection,AbstractList,AbstractMap,ArrayList,Arrays,Collections,Date,HashMap,HashSet,Stack,Vector(1).
注:
(1) 不檢查索引的有效性
2)Errors and Exceptions
EmptyStackException,NoSuchElementException,TooManyListenersException.
3)Interfaces
Collection,Comparator,EventListener,Iterator,List,Map,RandomAccess,Set.
四、正規表示式
1)Boundary matchers
—————————————————————-
Expression      Meaning
—————————————————————-
^              行開始
$              行結束
/b             文字邊界
/B             非文字邊界
—————————————————————-
2)Quantifiers
—————————————————————-
Expression      Meaning
—————————————————————-
*              0到多次
+              1到多次
?              0到1次
{n}            恰好n次
{n,}           n到更多次
{n,m}          在n到m次之間
—————————————————————-
3)Miscellaneous
—————————————————————-
Expression      Meaning
—————————————————————-
.             任意字元
*(x)          捕獲組
(?:x)         非捕獲組
x(?=y)        0寬度正數超前
x(?!y)        0寬度負數超前
x|y           x或y
/n            返回捕獲組的引用。不能使用“/0”
—————————————————————-
你可以假裝Java程式碼直接執行在瀏覽器上。程式碼可以被客戶端和伺服器端共享。