恰好在预习龙书,就把官网上提供的那份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