当前页面: 开发资料首页 → J2SE 专题 → J2SE 1.5 in a Nutshell 中文版 --1.5新特性
J2SE 1.5 in a Nutshell 中文版 --1.5新特性
摘要: J2SE 1.5 in a Nutshell 中文版 --1.5新特性
ArticleJ2SE 1.5 in a Nutshell
import java.lang.reflect.*;
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @interface debug {
boolean devbuild() default false;
int counter();
}
public class MetaTest {
final boolean production=true;
@debug(devbuild=production,counter=1) public void testMethod() {
}
public static void main(String[] args) {
MetaTest mt = new MetaTest();
try {
Annotation[] a = mt.getClass().getMethod("testMethod").getAnnotations();
for (int i=0; i
</td></tr></table>
public void ping() throws RemoteException;
}
public class Ping implements PingIF {
public void ping() {
}
}
</td></tr></table>
public @remote void ping() {
}
}
</td></tr></table>
list.add(0, new Integer(42));
int total = ((Integer)list.get(0)).intValue();
</td></tr></table>
list.add(0, new Integer(42));
int total = list.get(0).intValue();
</td></tr></table>
list.add(0, new Integer(42));
int total = (list.get(0)).intValue();
</td></tr></table>
list.add(0, 42);
int total = list.get(0);
</td></tr></table>
for (Iterator i = list.iterator(); i.hasNext();) {
Integer value=(Integer)i.next();
}
</td></tr></table>
for (Integer i : list) { ... }
</td></tr></table>
</td></tr></table>
静态引入 Static Import
静态引入的特性是用"import static"这样的语句使得你能不输入类名就可以直接使用一个类中的静态常量.比如我们经常在添加一个控件的时候用的BorderLayout.CENTER,使用了静态引入后,你只需要简单的调用CENTER就可以了.
getContentPane().add(new JPanel(), CENTER);
</td></tr></table>
System.out.printf("%s %5d\n", user,total);
</td></tr></table>
String param= s.next();
int value=s.nextInt();
s.close();
</td></tr></table>
for (int i=0;i </td></tr></table>
s.acquireUninterruptibly(); //for non-blocking version use s.acquire()
balance=balance+10; //protected value
s.release(); //return semaphore token
</td></tr></table>
import java.util.*;
import javax.management.*;
public class MemTest {
public static void main(String args[]) {
List pools =ManagementFactory.getMemoryPoolMBeans();
for(ListIterator i = pools.listIterator(); i.hasNext();) {
MemoryPoolMBean p = (MemoryPoolMBean) i.next();
System.out.println("Memory type="+p.getType()+" Memory usage="+p.getUsage());
}
}
}
</td></tr></table>
import java.lang.instrument.Instrumentation;
public class myBCI {
private static Instrumentation instCopy;
public static void premain(String options, Instrumentation inst) {
instCopy = inst;
}
public static Instrumentation getInstrumentation() {
return instCopy;
}
}
//File BCITest.java
import java.nio.*;
import java.io.*;
import java.nio.channels.*;
import java.lang.instrument.*;
public class BCITest {
public static void main (String[] args) {
try {
OriginalClass mc = new OriginalClass();
mc.message();
FileChannel fc=new FileInputStream(new File("modified"+File.separator+"OriginalClass.class")).getChannel();
ByteBuffer buf = fc.map(FileChannel.MapMode.READ_ONLY, 0, (int)fc.size());
byte[] classBuffer = new byte[buf.capacity()];
buf.get(classBuffer, 0, classBuffer.length);
myBCI.getInstrumentation().redefineClasses(new ClassDefinition[] {new ClassDefinition(mc.getClass(), classBuffer)});
mc.message();
}catch (Exception e){}
}
}
//OriginalClass.java
//Compile in current directory
//Copy source to modified directory,change message and recompile
public class OriginalClass {
public void message() {
System.out.println("OriginalClass");
}
}
</td></tr></table>
for (int i=0; i </td></tr></table>
-XX:OnError="pmap %p"
-XX:OnError="gdb %p"
optional %p used as process id
</td></tr></table>
(X11的工具包叫做sun.awt.X11.XToolkit)
同时X11的工具包还使用了xDnD的协议,所以你可以在Java和其他应用程序之间,比如StarOffice或者Mozilla,拖拽简单的组件.
其他的一些新特性 Miscellaneous Features
核心支持XML Core XML Support
J2SE 1.5 介绍了一些对核心XML平台的修改,包括了XML 1.1,Namespace,XML Schema.还有SAX 2.0.1,XSLT和快速的XLSTC编译器,还有对DOM level 3的支持.
除了对核心XML的支持特性以外,JWSDP(Java Web Services Developer Pack)将会发布最新的Web services标准:JAX-RPC & SAAJ(WSDL/SOAP),JAXB,XML加密以及数字签名和注册用的JAXR.
补充的字符支持 Supplementary Character Support
32位的补充字符支持是被非常小心的添加到了J2SE 1.5中来的,他是作为过渡到Unicode 4.0支持的一个部分.补充的字符被编码成特殊的一对对UTF16的值来生成一个个不同的字符,或者从代码的角度来看,被代替的一对值是由一个高位的UTF16值紧随一个低位的UTF16值,而这个高位和低位的值都是从一个特殊的UTF16值范围内取出来的.
通俗点说,当使用一个String或者字符序列的时候,核心的API库会透明的为你处理这些补充的字符.但是java的char类型数据仍然是16位的,少数使用char作为参数的方法现在有了相应的能接受一个int值的方法,这些方法能表现新的这些大值.特别是Character类,添加了一些象下面代码中的方法来找回当前的字符和随后的字符来支持这些补充的字符:
System.out.println(u+"+ "+u.length());
System.out.println(Character.isHighSurrogate(u.charAt(0)));
System.out.println((int)u.charAt(1));
System.out.println((int)u.codePointAt(0));
</td></tr></table>
↑返回目录
前一篇: 升级到J2SE 5平台的5大理由
后一篇: Apache也要提供自己的J2SE实现