14十二/060
Java6的一些新特征和例子代码
- Web service更容易写了
看下面的代码,感觉跟C#很像。
1 package hello; 2 import javax.jws.WebService; 3 4 @WebService 5 public class CircleFunctions { 6 public double getArea(double r) { 7 return java.lang.Math.PI * (r * r); 8 }
除了@WebService,Java 6也支持@WebMethod。
调用web service是这样的:
调用web service是这样的:
public static void main(String[] args) { try { // Call Web Service Operation ws.CircleFunctionsService service = new ws.CircleFunctionsService(); ws.CircleFunctions port = service.getCircleFunctionsPort(); // TODO initialize WS operation arguments here double arg0 = 3.0; // TODO process result here double result = port.getArea(arg0); System.out.println("Result = "+result); } catch (Exception ex) { } }
其中ws这个package可以由IDE从给定的wsdl文件自动生成。
- 运行期编译Java源代码
以前要编译Java源码必需用javac.exe,如果想在运行时动态生成两个类,只能先System.exec调用javac,然后用 ClassLoader从硬盘上读取生成的.class文件载入类。这个过程因为要读写硬盘所以非常慢。现在可以直接用API调用javac了。
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager manager = compiler.getStandardFileManager(null, null, null); Iterable compilationUnits = manager.getJavaFileObjects(new File("MyClass.java")); compiler.getTask(null, manager, null, null, null, compilationUnits).call(); manager.close();
- 内置脚本支持
以前觉得djava是个好东西,现在java6内置了脚本支持,也允许脚本跟java之间的交互。看起来djava快要完全退休了。借用sun公司的一句广告:Perhaps You ThougHt yOu couldN't program with a scripting language and Java togetheR. Which will yoU Be trYing ?
jsEngine.put("namesListKey", namesList); System.out.println("Executing in script environment..."); try { jsEngine.eval("var x;" + "var names = namesListKey.toArray();" + "for(x in names) {" + " println(names[x]);" + "}" + "namesListKey.add(\"Dana\");"); } catch (ScriptException ex) { ex.printStackTrace(); } System.out.println("Executing in Java environment..."); for (String name: namesList) { System.out.println(name); }
- 其它
还有很多新特性,比如更好的桌面效果,可以对内存做分析如memory dump,等等,可以参考
http://java.sun.com/javase/6/
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/beta2.html