恰好在預習龍書,就把官網上提供的那份java寫的前端代碼拖了下來看看。php
導入eclipse,發現有一堆warning,其中一個是Reference to generic type Hashtable<K, V> should be parameterized。html
google之,發現了一篇不錯的講解:What is a raw type and why shouldn't we use it?前端
簡而言之,就是泛型和C++的模版同樣,要寫上類型,否則要是玩壞了,編譯的時候不給你報錯,等着runtime來掛就很差了。嗯這代碼很老了吧……再仔細一看,貌似沒什麼註釋也,仍是默默看書好了……java
按照core java上的指示,去導入一個project看看……咦,新版的界面沒有create project from existing source了……python
google一下找到了解決方案: Eclipse Community Forums: Newcomers » helios & "create project from existing source"ios
在建立新project的時候去掉Use default location的勾,選擇對應文件夾就好了。chrome
導入另外一個project看看,這回有一個warning:The serializable class ImageViewerFrame does not declare a static final serialVersionUID fieldexpress
再google之,解答:What does it mean: The serializable class does not declare a static final serialVersionUID field?api
OK,那什麼是serializable class?學其餘語言的時候貌似看到過,可是沒仔細看什麼意思。瀏覽器
解答在這裏:
原來就是和python的pickle、JS的JSON相似做用的東西~ 用來把對象轉化成可存儲的格式叫serialization,把類從存儲的byte裏讀出來叫deserialization。eclipse給出這個警告,是由於加一個UID可以確保serialization和deserialization用的是同一版本的類,以避免中途這個類修改過,就會牛頭不對馬嘴了。
要解決這個warning,能夠在類中隨便加一個UID,好比eclipse給出的第一個解決方案就是加上:
private static final long serialVersionUID = 1L;
不過這個東西沒有也不礙事,就是沒那麼安全而已,因此才只是個warning。
仔細看了一下這個demo的代碼
Java裏貌似能夠匿名地implement一個interface,而後直接傳給一個函數,像這樣:
obj.method(new Interface(){ // override some methods... });
傳說中的Java applet!好懷舊的感受……
編譯出的.class裏面是bytecode,能夠反編譯回去,跑的時候用
java className
就好了,記得不要加.class
Java裏的整數和布爾類型是沒有隱式轉換的,也就是說你不能if(0)這樣玩,因此就能夠防止
if (x = 0)
這種手誤,編譯的時候就給你報錯抓出來(果真是提防豬隊友指定語言……)
Java裏的常量用final,好比類的靜態常量就能夠用
static final int x = 10;
這樣聲明。詭異的是const也是Java的保留字,雖然如今的Java語法里根!本!沒用它!
由於浮點數運算的一致性實在太難保證了(有些處理器用80bit來保存浮點數,簡直不能作朋友),因此Java默認是不保證這個的,除非你在函數名上加個strictfp,裏面的運算就會保證這個,好比
public static strictfp void func() {...}
和JS同樣,常見的數學運算都是Math這個類的靜態方法。若是不想每次都寫Math.xxx這樣好麻煩,能夠用
import static java.lang.Math.*
(能夠看出java的import是有static之分的,和python不一樣的是想不加類名直接import,沒有from xxx import xxx這種東西)
cast的方法和C同樣,注意布爾型是不給cast的,手動都不行!若是你要cast,就只能相似這樣
i == 0 ? true : false b ? 1 : 0