天天看點

GWT筆記(6)

版權聲明:本文為部落客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

AbstractCollection,AbstractList,AbstractMap,ArrayList,Arrays,Collections,Date,HashMap,HashSet,Stack,Vector(1).

(1) 不檢查索引的有效性

EmptyStackException,NoSuchElementException,TooManyListenersException.

Collection,Comparator,EventListener,Iterator,List,Map,RandomAccess,Set.

四、正規表達式

1)Boundary matchers

----------------------------------------------------------------

Expression      Meaning

^              行開始

$              行結束

/b             文字邊界

/B             非文字邊界

2)Quantifiers

*              0到多次

+              1到多次

?              0到1次

{n}            恰好n次

{n,}           n到更多次

{n,m}          在n到m次之間

3)Miscellaneous

.             任意字元

*(x)          捕獲組

(?:x)         非捕獲組

x(?=y)        0寬度正數超前

x(?!y)        0寬度負數超前

x|y           x或y

/n            傳回捕獲組的引用。不能使用“/0”

你可以假裝Java代碼直接運作在浏覽器上。代碼可以被用戶端和伺服器端共享。 

上一篇: GWT筆記(5)
下一篇: ICEfaces Note(2)