Java 与 Haxe 语法对比
2014年03月29日 11:50GMT+8
下边将使用 Haxe/HL
平台来和 Java
对比.因为都是虚拟机。
HelloWorld
Java
Haxe
-
java 和 haxe 一样, 类名必须以大写字母开始, 文件名需要与类名一致, 并且都可以在一个同一个文件内定义多个类。
同一个文件内, java 仅允许一个类为可标注为 public。
-
在 java 中
package
和improt
二个关键字的行为与 haxe 一模一样,唯一的区别是 java 可能需要将目录中的类(class)显示地声明为 public, 否则外部的类(class) 无法访问它, 而在 haxe 中类(class)默认的是 public
因此 java 和 haxe 都有相同编译参数
-cp
还有就是 haxe 中允许一个空的(不带标识符的)
package;
, 而在 java 中这是不允许的。
构造函数和方法重载
Java
Haxe
基础类型
Java
Haxe
初使化类
Java
Haxe
加载源生方法
Java
Haxe
空的
Java
Haxe
空的
Java
Haxe
NDK
留空以后再添加…
Java 速记
-
变量定义
// 感觉和 C 语言很像 int i = 10; char c = 'A'; char [] cs = {'A','B','C'}; String str = "Helo"; Object [] obj = new Object[3]; // 初使化后数组长度必须为已知; obj[0] = new Object(); // java 中需要明确的声明变量的类型,没有 "自动推导" 的语法糖
-
java.lang
这个包不需要导入就可以直接使用. -
java.lang.Object
除了Java的基础类型,所有类型都是继承于 Object,包括 String. 很多数据类型必须为 Object.
感觉很像 AS3. 在 AS3 中 Object 是所有 类 的基类.
-
final
关键字// final 除了 有 const 的行为 // 还可以改变 一个变量作用域,叫做 final local variable // 下边示例中的 @Override run 方法,并不可以访问 其所在的局部变量 // 但是局部变量加上 finnal 关键字后.就可以了 public void foo() { final String x = "hello"; String y = "there"; Runnable runnable = new Runnable() { @Override public void run() { System.out.println(x); // This is valid System.out.println(y); // This is not } }; runnable.run(); } // 这个示例同样展示了 Java 可以在 实例化时,写 override 方法
-
将函数作为参数传递。
// 在 haxe 中定义一个函数类型的方式有: var max: Int -> Int -> Int; var min: (a: Int, b: Int) -> Int; // since haxe 4.0+ var sum: (Int, Int) -> Int; // 同上 // java 中不可以把函数作为参数传递, 只能将参数类型定义成类或接口。 java.lang.Runnable; java.util.concurrent.Callable; java.security.PrivilegedAction; java.util.Comparator; java.io.FileFilter; java.beans.PropertyChangeListener;
lambda
// 在 haxe 可随意定义一个方法, 就像 Javascript 中的一样 var sum = function(a, b) {return a + b;} // haxe 箭头语法: (感觉箭头语法可读性不太好) var sum = (a, b) -> areturn a + b; // java 箭头语法和 haxe 也一致,细节参考: https://www.cnblogs.com/figure9/archive/2014/10/24/4048421.html (int x, int y) -> x + y; (String s) -> { System.out.println(s); }
-
迭代器 iterator
haxe
var a = [1, 2, 3, 4, 5]; for(v in a) { trace(v); } for(i in 0...a.length) { trace(a[i]); }
java:
int[] a = {1, 2, 3, 4, 5}; for(int v: a) { System.out.println(v); } for(int i = 0, len = a.length; i < len; i++) { System.out.println(a[i]); }
-
abstract
在 haxe 中
abstract
的形为有点类似于别名typedef
在 java 中, 在方法上则表示必须重写这个方法,在类则不可以直接实例,只能用 extends 扩展它。
-
enum, java 和 haxe 一样,都不允许给像 c 语言那样给枚举赋值。
haxe: 使用 “;” 号分隔,(这种在 haxe 中称为 FlatEnum)
enum Color { red; green; blue; }
java: 使用 “,” 号分隔每一项。
enum Color { red, green, blue, }
-
try/catch
, java 中有finally
块,而 haxe 无。