??xml version="1.0" encoding="utf-8" standalone="yes"?>久久国产精品免费一区二区三区,av片在线看,欧美.日韩.国产.一区.二区http://www.aygfsteel.com/BigMouse/category/23448.html记录前进路上的每一个脚?/description>zh-cnMon, 25 Jun 2007 23:55:03 GMTMon, 25 Jun 2007 23:55:03 GMT60转蝲Qjdk5.0新特?/title><link>http://www.aygfsteel.com/BigMouse/articles/125762.html</link><dc:creator>BigMouse</dc:creator><author>BigMouse</author><pubDate>Fri, 22 Jun 2007 02:49:00 GMT</pubDate><guid>http://www.aygfsteel.com/BigMouse/articles/125762.html</guid><wfw:comment>http://www.aygfsteel.com/BigMouse/comments/125762.html</wfw:comment><comments>http://www.aygfsteel.com/BigMouse/articles/125762.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/BigMouse/comments/commentRss/125762.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/BigMouse/services/trackbacks/125762.html</trackback:ping><description><![CDATA[<div>以下是网上摘录的: JDK5.0的新Ҏ?2005-2006)</div> <div>“JDK1.5”Q开发代L虎)的一个重要主题就是通过新增一些特性来化开发,<br>q些Ҏ包括泛型,for-each 循环Q自动装?拆包Q枚举,可变参数, 静态导?br>C 风格的格式化 I/O、、ƈ发实用程序以及更单的 RMI 接口生成?</div> <div>JSR 201 包括如下四个语言变化Q增强的 for 循环、枚丄型、静态导入和 autoboxingQJSR 175 指定了新的元数据功能Q?JSR 14 则详l说明了泛型?/div> <div>javac ~译器执行的默认语言规范是版?1.4。这意味着要利用以下语a变化的Q何好处,需要向 javac 命o传递参?-source 1.5?</div> <div>使用q些Ҏ有助于我们~写更加清晰Q精悍,安全的代码?/div> <div>  下面我们单介l一下这些新Ҏ?/div> <div>  1.泛型(Generic)</div> <div>  C++通过模板技术可以指定集合的元素cdQ而Java?.5之前一直没有相对应的功<br>能。一个集合可以放Mcd的对象,相应C集合里面拿对象的时候我们也不得不对<br>他们q行强制得类型{换。猛虎引入了泛型Q它允许指定集合里元素的cdQ这样你?br>以得到强cd在编译时刻进行类型检查的好处?/div> <div> </div> <div>Collection c = new ArrayList();<br>c.add(new Date());</div> <div> </div> <div>  ~译器会l出一个错误:</div> <div> </div> <div>add(java.lang.String) in java.util.Collection cannot be applied to <br>(java.util.Date)</div> <div> </div> <div>  2.For-Each循环</div> <div>  For-Each循环得加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进<br>行一些处理。典型的代码为:</div> <div> </div> <div>void processAll(Collection c){<br>    for(Iterator i=c.iterator(); i.hasNext();){<br>        MyClass myObject = (MyClass)i.next();<br>        myObject.process();<br>    }<br>}</div> <div> </div> <div>  使用For-Each循环Q我们可以把代码改写成:</div> <div> </div> <div>void processAll(Collection c){<br>    for (MyClass  myObject :c)<br>        myObject.process();<br>}</div> <div> </div> <div>  q段代码要比上面清晰许多Qƈ且避免了强制cd转换?/div> <div>  3.自动装包/拆包(Autoboxing/unboxing)</div> <div>  自动装包/拆包大大方便了基本类型数据和它们包装cd使用?/div> <div>  自动装包Q基本类型自动{为包装类.(int >> Integer)</div> <div>  自动拆包Q包装类自动转ؓ基本cd.(Integer >> int)</div> <div>  在JDK1.5之前Q我们L寚w合不能存攑֟本类型而耿耿于怀Q现在自动{换机?br>解决了我们的问题?/div> <div>int a = 3;<br>Collection c = new ArrayList();<br>c.add(a);//自动转换成Integer.</div> <div>Integer b = new Integer(2);<br>c.add(b + 2);</div> <div>  q里Integer先自动{换ؓintq行加法q算Q然后int再次转换为Integer.</div> <div>  4.枚D(Enums)</div> <div>  JDK1.5加入了一个全新类型的“c?#8221;Q枚丄型。ؓ此JDK1.5引入了一个新关键?br>enmu. 我们可以q样来定义一个枚丄型?br> <br>public enum Color<br>{<br>   Red,<br>   White,<br>   Blue<br>}</div> <div>  然后可以q样来用Color myColor = Color.Red.</div> <div>  枚Dcdq提供了两个有用的静态方法values()和valueOf(). 我们可以很方便地<br>使用它们Q例?/div> <div>for (Color c : Color.values())<br>            System.out.println(c);</div> <div>  5.可变参数(Varargs)</div> <div>  可变参数使程序员可以声明一个接受可变数目参数的Ҏ。注意,可变参数必须?br>函数声明中的最后一个参数。假设我们要写一个简单的Ҏ打印一些对象,</div> <div>util.write(obj1);<br>util.write(obj1,obj2);<br>util.write(obj1,obj2,obj3);<br>…</div> <div>  在JDK1.5之前Q我们可以用重蝲来实玎ͼ但是q样需要写很多的重载函敎ͼ昑־<br>不是很有效。如果用可变参数的话我们只需要一个函数就行了</div> <div>public void write(Object... objs) {<br>   for (Object obj: objs)<br>      System.out.println(obj);<br>}</div> <div>  在引入可变参C后,Java的反包也更加方便用了。对?br>c.getMethod("test", new Object[0]).invoke(c.newInstance(), new <br>Object[0]))Q现在我们可以这样写?br>c.getMethod("test").invoke(c.newInstance())Q这L代码比原来清楚了很多。 </div> <div>  6.静态导?Static Imports)</div> <div>  要用用静态成员(Ҏ和变量)我们必须l出提供q个Ҏ的类。用静态导?br>可以使被导入cȝ所有静态变量和静态方法在当前cȝ接可见,使用q些静态成员无需<br>再给Z们的cd?/div> <div>import static java.lang.Math.*;<br>…….<br>r = sin(PI * 2); //无需再写r = Math.sin(Math.PI);</div> <div>  不过Q过度用这个特性也会一定程度上降低代码地可L?/div> <div>元数?br>J2SE 1.5 中的元数据特性提供这L能力Q即?Java cR接口、方法和字段兌附加的数据。这些附加的数据或者注释,可以?javac ~译器或其他工具dQƈ且根据配|不同,可以被保存在cL件中Q也可以在运行时使用 Java 反射 API 被发现?/div> <div>?Java q_增加元数据的一个主要原因是Q得开发工具和q行工具有一个通用的基l构Q以减少开发和部v所需的成本。工具可以用元数据信息生成附加的源代码Q或者在调试时提供附加信息?/div> <div>下面的例子用元数据工具创Z一个调试元数据注释Q这些元数据注释然后又简单地在运行时昄出来。可以想像,大部分的元数据标{Ş成一个标准,即一个良好规范的集合?/div> <div>import java.lang.annotation.*;<br>import java.lang.reflect.*;<br><br>@Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @interface debug {<br>boolean devbuild() default false;<br>int counter();<br>}<br><br>public class MetaTest {<br>final boolean production=true;</div> <div>@debug(devbuild=production,counter=1) public void testMethod() {<br>}<br><br><br>public static void main(String[] args) {<br><br>MetaTest mt = new MetaTest();<br>try {<br>Annotation[] a = mt.getClass().getMethod("testMethod").getAnnotations();<br>for (int i=0; i<a.length ; i++) { <br>System.out.println("a["+i+"]="+a<em>+" "); <br>} <br>} catch(NoSuchMethodException e) { <br>System.out.println(e); <br>} <br>} <br>} </em></div> <div><br>利用一个元数据处理工具Q许多重复的代码~写步骤可以减少成一个简l的元数据标{。例如,讉K某个 JAX-RPC 服务实现时所需的远E接口可以实CؓQ?/div> <div>原来QJ2SE 1.5 以前版本Q:</div> <div>public interface PingIF extends Remote {<br>public void ping() throws RemoteException;<br>}</div> <div>public class Ping implements PingIF {<br>public void ping() {<br>}<br>}</div> <div> </div> <div><br>现在Q?/div> <div>public class Ping {<br>public @remote void ping() {<br>}<br>}</div> <div><strong>二、元数据Q注解)</strong></div> <div>  q是JDK5.0学XDoclt的,有了注解Q以后我们可以不必写接口QEJB写v来会方便很多。EJB3.0要精写法Q注解要占一些功功?/div> <div>  介绍一个常用的注解Q@OverrideQ示例如下:</div> <div style="BORDER-RIGHT: 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: 1px solid; WIDTH: 100%; PADDING-TOP: 1px; BORDER-BOTTOM: 1px solid; HEIGHT: 18px"> <pre>public class Test extends ATest{<br> <br> @Override<br>    public void test() {<br>    }<br>}</pre> </div> <div> 在方法前加了q个注解Q就限定MTest的这个方法一定要是覆盖自ATest的方法testQ否则就会报错。比如你不心把方法test()写成了tesd()Q编译时׃报错。另一个要注意的是@Override用于定义覆盖接口的方法,也就是说ATest必须是一个抽象类、普通类Q但不能是接口?/div> <div>   另一个常见到的注解是@DeprecatedQ表明该(cR字Dc方法)不再被推荐用。不q我们自׃般很用到这个注解?/div> <div>  好了Q注解只讲这两个吧,也不必了解太多,知道个概念,以后用到的时候再说吧。关于注解,看看XDocltQ这是一个开源小工具Q在目开发中非常好用?/div> <center><strong><span style="FONT-SIZE: 20px">我喜qJava 5.0的五个特?/span></strong></center> <center>作者:David Flanagan, Java in a Nutshell, W?版的作?br><br><span style="COLOR: purple">版权声明</span>Q可以Q意{载,转蝲时请务必以超链接形式标明文章原始出处和作者信息及本声?br>作?<br>David Flanagan;<a target=_new><u><font color=#0000ff>xml1123</font></u></a><br>原文地址:<br><a target=_new><u><font color=#0000ff>http://www.onjava.com/pub/a/onjava/2005/04/20/javaIAN5.html</font></u></a><br>中文地址:<br><a target=_new><u><font color=#0000ff>http://www.matrix.org.cn/resource/article/43/43830_Java5.html</font></u></a><br>关键词: Java5<br><br>至今Q毫无疑问你已经看过不止一网上文章列举了Java5.0的伟大的语言新特性:泛型Q标注,枚DcdQ自动装,可变参数Q?for/in循环Q甚至静态引入。我也认些是伟大的特性,但是Q你已经读过他们了。因此,在此我将集中于你可能没有听说q的Java5.0的新APIҎ?br><br>那么Q在下面Q是我喜Ƣ的Java5.0的五个新APIҎ。我已经在《果壳中的Java》(《Java in a nut shell》)W五版的W五章中介绍q他们。ƈ且我也在我的|站中记录了其中的一些。那些看完本文后的细心的读者会发现额外的奖励—第六个Ҏ:很少有h知道的Java5.0支持的新语言语法Q当然用者就更少了。我非常喜欢它,因ؓ它很新异?br><br><strong><span style="FONT-SIZE: 16px">Callable ?Future 接口</span></strong><br><br>我喜Ƣ的W一个特性发掘自新的java.util.concurrent包。如它的名字暗示的,q是个ƈ行编E工具包。在此有很多要探索的Q而我要提的第一喜欢的特性是TimeUnit枚Dcd。TimeUnit让我感兴的是它包含有用的时间相兛_?-你通过一个枚丑ָ量来调用它们Q该帔R代表度量旉的单位。例如:<br>TimeUnit.MILLISECONDS.sleep(200);<br><br>然而,TimeUnitq不是最值得夸奖的。java.util.concurrent最强大的特性之一是它的Q?执行/U程-池结构。ExecutorService接口提供了执行Q务的能力。Executorscd义了工厂Ҏ用于获取使用U程池的ExecutorService的实现。这是强大的要素?br><br>我所喜欢的Q?执行框架的部分是它如何表CQ务以及执行它的结果:Callable和Future接口。我们都熟悉用于定义U程的Runnable接口和它的run()Ҏ。Callable像RunnableQ但它的Ҏ叫做call()Qƈ且这个方法可以返回一个结果或者抛Z个异常,而这两点是Runnable.run()做不到的?br><br>Callable是一个泛型,q且它的l果已经参数化。例如,一个计BigInteger的Q务,是Callable<BigInteger>Qƈ且它的方法call()被声明ؓq回BigInteger。下面是仅有三行代码的Callable接口Q?br><br></center> <pre>public interface Callable<V> {<br>      V call() throws Exception;<br>  }</pre> <div><br><br>当我惌异步执行一个CallabledQ我它传递给ExecutorService的submit()Ҏ。submit()的返回值—这也是我喜Ƣ的部分—是一个Future对象Q本质上是一个对来某时ȝl果?#8220;借条”。如果我准备使用我的d的结果,我简单的调用Future对象的get()Ҏ卛_。如果Q务的执行已完成,那么get()立刻q回l果。否则,它将d直到l果可用。如果Callable抛出异常Q那么get()Ҏ该异常包装为ExecutionExceptionq且抛出它。Futureq有Ҏ用来对Q务的执行q行取消和查询状态,但是你必自己查扑֮们(q些ҎQ。Future也用了泛型,q且l果的类型也参数化了。因此如果我submit()一个Callable<BigInteger>来执行,我将获得一个Future< BigInteger >?br><br>下面是一个简短的例子Q?br><br></div> <pre>/**<br> * q是一个用来计大素数的Callable?br> */<br>public class PrimeSearch implements Callable<BigInteger><br>{<br>    static Random prng = new SecureRandom();<br>    int n;<br>    public PrimeSearch(int bitsize) { n = bitsize; }<br>    public BigInteger call() {<br>        return BigInteger.probablePrime(n, prng);<br>    }<br>}<br><br>// 试同时计算两个素数<br>ExecutorService pool = Executors.newFixedThreadPool(2);<br>Future<BigInteger> p = pool.submit(new PrimeSearch(512));<br>Future<BigInteger> q = pool.submit(new PrimeSearch(512));<br><br>// 两个素数相乘来得到一个合?br>BigInteger product = p.get().multiply(q.get());</pre> <div><br><br><br><strong><span style="FONT-SIZE: 16px">可变参数和自动装?/span></strong><br><br>我说q我不想谈论Java5.0的新语言Ҏ,我不会,但是我确实关注由于可变参数和自动装箱才变为可能的Q或者被增强的旧APIQ新的API?br><br>首先Q当Ӟ是Java5.0的printf风格的文本格式化能力Q通过java.util.FormattercdcMString.format()的工h法。这cL本格式化是最常被引用来支持语a的增加的可变参数和自动装q那种用例。考虑q个Q?br><br></div> <pre>String s = String.format("%s:%d: %s%n", filename,<br>                           lineNumber,<br>                             exception.getMessage());</pre> <div><br><br>关于q段代码没有什么特别值得注意的东ѝ我它列在q是Z说明因ؓ可变参数和自动装所以比下面的例子显得简单:<br><br></div> <pre>String s = String.format("%s:%d: %s%n", new Object[] {<br>                           filename,<br>                           new Integer(lineNumber),<br>                             exception.getMessage()});</pre> <div><br><strong>一、C风格格式化输?/strong></div> <div>在JDK5.0后,我们q样写代码:</div> <div style="BORDER-RIGHT: 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: 1px solid; WIDTH: 100%; PADDING-TOP: 1px; BORDER-BOTTOM: 1px solid; HEIGHT: 18px"> <pre>    public static void main(String[] args) {<br>        int x = 10;<br>        int y = 20;<br>        int sum = x + y;<br>        System.out.printf("%d + %d = %d", x, y, sum);<br>    }</pre> </div> <div><br>可变参数和自动装p对java.lang.reflect API有一个实质性的影响。那是当查扑֒调用Ҏ时不再需要类和对象数l:<br><br></div> <pre>Method m = c.getMethod("put", Object.class,Object.class);<br>  m.invoke(map, "key", "value");</pre> <div><br><br>如果我必选择一个最喜欢的可变参数方法,那么Q将是java.util.Arrays.asList()。这个方法真是个用于创徏不变的对象列表的方便的工厂方法。它接受M数量的类型T的参数ƈ且将它们作ؓList<T>q回:<br><br></div> <pre>List<Integer> smallPrimes =<br>     Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19);</pre> <div><br><br><strong><span style="FONT-SIZE: 16px">能力</span></strong><br><br>我们在上面谈ZRunnable和CallableQƈ且你毫无疑问已经听说q重要的ComparableQ?Serializable,和Cloneable接口。Java5.0新增加了五个重要的能力接口。第一个,当然Q是java.lang.Iterable。你或许知道Java5.0新的for/in循环可以q代数组和集合。你可能不知道它能够对Q何实C可P代(IterableQ接口的对象工作。因此,如果你想让一个不是集合的数据l构可以单地q代Q只需实现Iterable接口。你要做的就是增加一个返回java.util.Iterator 的iterator()Ҏ。当Ӟ写这个P代器QIteratorQ可能不是那么简单的?br><br>下面的代码是一个实CIterable<String>Q是的,Iterable是泛型的Q的文本文gc,因而允许文本文件可以用for/in循环逐行的P代。你可以用类g面的代码使用它:<br><br></div> <pre>TextFile textfile = new TextFile(new File(f), "UTF-8");<br>  int lineNumber = 0;<br>  for(String line : textfile)<br>      System.out.printf("%6d: %s%n", ++lineNumber, line);</pre> <div><br><br>下面是TextFile的代码。注意,q代器不试对底层文g的ƈ发的修改。如果你惌己做Q看一?br><br></div> <pre>java.nio.channels.FileLock?br>import java.io.*;<br>import java.util.Iterator;<br><br>public class TextFile implements Iterable<String> {<br>    File f;<br>    String charsetName;<br><br>    public TextFile(File f, String charsetName)<br>        throws IOException<br>    {<br>        this.f = f;<br>        this.charsetName = charsetName;<br><br>        if (!f.exists())<br>            throw new FileNotFoundException(f.getPath());<br>        if (!f.canRead())<br>            throw new IOException("Can't read: " +<br>                                  f.getPath());<br>    }<br><br>    public Iterator<String> iterator() {<br>        try {<br>            return new TextFileIterator(f, charsetName);<br>        }<br>        catch(IOException e) {<br>            throw new IllegalArgumentException(e);<br>        }<br>    }<br><br><br>    static class TextFileIterator<br>        implements Iterator<String><br>    {<br>        BufferedReader in;<br>        String nextline;<br>        boolean closed = false;<br><br>        public TextFileIterator(File f, String charsetName)<br>            throws IOException<br>        {<br>            InputStream fis = new FileInputStream(f);<br>            Reader isr =<br>                new InputStreamReader(fis, charsetName);<br>            in = new BufferedReader(isr);<br>            getNextLine();<br>        }<br><br>        public boolean hasNext() {<br>            return nextline != null;<br>        }<br><br>        public String next() {<br>            String returnValue = nextline;<br>            getNextLine();<br>            return returnValue;<br>        }<br><br>        public void remove() {<br>            throw new UnsupportedOperationException();<br>        }<br><br>        void getNextLine() {<br>            if (!closed) {<br>                try { nextline = in.readLine(); }<br>                catch(IOException e) {<br>                    throw new IllegalArgumentException(e);<br>                }<br>                if (nextline == null) {<br>                    try { in.close(); }<br>                    catch(IOException ignored) {}<br>                    closed = true;<br>                }<br>            }<br>        }<br>    }<br>}</pre> <div><br><br>Iterable是到目前为止最重要的新能力接口Q但是其它的也是非常的漂亮。接下来Q我们碰到java.lang.Appendable。一个Appendable对象可以q加字符或字W序列(或者一个字W序列的子序列)。实现者包括StringBuffer和StringBuilderQ如果你q没有听说过它,一定要看一看)QWriter(及其子类)QPrintStream,q有java.nio.CharBuffer。将可追加性从q些cM分离出来成ؓAppendable接口Q得新的java.util.FormattercL强大Q它能将文本格式化ؓM可追加的对象Q包括你自己的实现。(l习留给读者:你能否将上面的TextFilecd得既可P代又可追加么Q)?br><br><br>java.lang.Readable接口和Appendable相反Q一个可d象可以将字符传输l给定的CharBuffer。java.io.Reader和它的全部子c都是可ȝQ当然了Q,CharBuffer本n也一栗就像Appendable是ؓ了java.util.Formatter的利益而创造,Readable是ؓ了java.util.Scanner的利益而创造。(Java5.0增加了ScannerQ连同Formatter。这是Java对C的scanf()函数的适应Q但是它(Scanner)不像Formatter之对应于printf()的关p那样密切。)<br><br>我想讨论的最后两个能力接口是java.io.Closeable和java.io.Flushable。如它们的名字暗C的Q它们趋向于被Q何类实现Q通过一个close()或者flush()Ҏ。Closeable被所有的输入和输出流c,RandomAccessFile和Formatter实现。Flushable被输出流cdFormatter实现。这些接口也是ؓ了Formattercȝ利益而定义。注意,Appendable对象Q像StringBuilderQ不L可关闭或者可冲刷(flushable)。通过可关闭性和可冲h分解出来成些接口,Formatter的close()和flush()Ҏ能够军_它们操作的Appendable对象是否需要被关闭或被冲刷。(Java5.0q增加了W六个能力接口,q且它也是有关Formattercȝ。那些想要控制它们的实例怎样被格式化的类可以实现java.util.Formattable接口。然而这个接口的API是难用的Q我不想谈论它。)<br><br><strong>@Override</strong><br><br>毫无疑问,你已l听说过能用元数据标注Java5.0的类型和Ҏ。但是你可能不熟悉增加到java.lang的标准标注类型。我喜欢的第四个Ҏ就是java.lang.Override标注。当你写一个方法准备覆盖另一个的ҎӞ用@Override来标注它Q这L译器会进行检查来保你确实,实际上,覆盖了你惌盖的Ҏ?br><br>如果你拼写错了方法名字或者弄错了Ҏ参数Q那么你实际上ƈ没有覆盖那个你认Z覆盖了的Ҏ。这样就造成了一个如果不用@Override很难捕捉的臭虫。我所以知道是因ؓ我的关于Java1.4的新APIҎ的文章pCq个臭虫Qƈ且这个错误至有一q一直没被检到Q至没有被报告Q。在那篇文章中,你可以在W一늻到我犯的错误。那文章现在包含一个链接到我的博客入口Q在那里我改正了q个臭虫q且在代码中增加了@Override声明?br><br><strong>MatchResult</strong><br>我喜Ƣ的Java5.0的最后一个特性是java.util.regex.MatchResult。对于用于正则表辑ּ的模?匚wAPI我从来没有真正非常满意。Java5.0增加的MatchResult在让我大大地更加满意。当使用一个不太^凡的模式QPatternQ,每次调用匚w者(MatcherQ的find()Ҏ会生成许多状态:开始位|,l束位置Q匹配的文本Q同时还有模式的开始,l束Q每个子表达式的文本。在Java5.0以前Q你只能从Matcher获取它们Q通过在调用find()后再调用start(),end(),q有group()Q如果需要的话?br><br>然而,CJava5.0Q你可以只调用toMatchResult()来获取MatchResult对象再获取全部的状态,MatchResult对象可以保存q且可以以后再检查。MatchResult像Matcher一hstart(),end()Q以及group()ҎQƈ且,实际上,Matcher现在实现了MatchResult?br>q里是一个有用的q回MatchResult的方法:<br><br></div> <pre>public static List<MatchResult> findAll(Pattern pattern,<br>                                        CharSequence text)  {<br>    List<MatchResult> results =<br>        new ArrayList<MatchResult>();<br>    Matcher m = pattern.matcher(text);<br>    while(m.find()) results.add(m.toMatchResult());<br>    return results;<br>}</pre> <div><br><br>q有使用q个Ҏ的代码:<br><br></div> <pre>List<MatchResult> results = findAll(pattern, text);<br>for(MatchResult r : results) {<br>    System.out.printf("Found '%s' at (%d,%d)%n",<br>                      r.group(), r.start(), r.end());<br>}</pre> <div><br><br><br><strong><span style="FONT-SIZE: 16px">十六q制点数字面?/span></strong><br><br>我承论Java5.0的最晦ӆ的新语言Ҏ。这是Q十六进制格式的点帔RQ这里是奇异的详情:一个十六进制符L点帔R?X或?x开头。随后的十六q制数字形成了数的基数。关键是q些数字可以包含一个小数点Q一个十六进制小数点Q)。在基数后面是指敎ͼ是必需的。十六进制Q点常量用p或者P而不是e或者E来引入指数。(想一?#8220;q?#8221;来帮助记忆)。P或者P后面是指敎ͼ必须是一个十q制敎ͼ而不是十六进制数。而且q是个以二ؓ根的指数Q而不是以十ؓ栏V那是Q表C基数要乘以?的幂。最后,整个帔R可以跟随一个f或者F来表CZ个Q点常量,或者一个d或者D表示一个双_ֺ帔RQ就像一个十q制点C栗?br>下面是一些例子:<br><br></div> <pre>double x = 0XaP0;    // 10 * 2^0 = 10.0<br>  double y = 0XfP2D;   // 15 * 2^2 = 60.0<br>  float z  = 0Xf.aP1F; // (15 + 10/16ths) * 2^1 = 31.25f<br>  // 用十q制来打?br>  System.out.printf("%f %f %f%n", x, y, z);<br>  // 用十六进制来打印<br>  System.out.printf("%a %a %a%n", x, y, z);</pre> <div><br><br>Z么Sun要对语言做这些?5.0的发行说明说Q?br>Z允许特定点值实现精及可预见的规范Q十六进制符号可用于Float和Double的Q点字面值和字符串到点数的转换Ҏ中?br><br>q点是合理的。十q制数?.1是不能精地用QҎ式表C的Qƈ且如果你真的需要确切知道在一个QҎ者双_ֺg比特位是怎么讄Q那么你真的惌一个十六进制字面倹{例如,Float.MAX_VALUE的Javadoc指出最大的点值是0x1.fffffeP+127f?br><br>如果你知道ƈ且喜ƢIEEE-754点标准Q那么十六进制Q点字D值或许是你喜Ƣ的一个特性。我只是认ؓ他们有趣?br></div> <div style="MARGIN: 13pt 0cm"><strong><font size=5>一 从xml中装载属?span> <div> </div> <div><font size=3>格式Q?/font></div> <p> <table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1> <tbody> <tr> <td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=568> <div><font size=3><properties></font></div> <div><font size=3><comment>Hi</comment></font></div> <div><font size=3><entry key="id">1</entry></font></div> <div><font size=3><entry key="name">rocie</entry></font></div> <div><font size=3><entry key="email">rocie@sina.com</entry></font></div> <div><font size=3></properties></font></div> </td> </tr> </tbody> </table> </p> <div><font size=3>  </font></div> <div> </div> <div> </div> <div><font size=3>通过以下Ҏ加蝲Q?/font></div> <p> <table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1> <tbody> <tr> <td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=568> <div><font size=3>Properties prop = new Properties();</font></div> <div><font size=3>FileInputStream fis =  new FileInputStream("d:/jdk5/properties/test.xml");</font></div> <div><font size=3>prop.loadFromXML(fis);</font></div> <div><font size=3>prop.list(System.out);</font></div> <div><font size=3>System.out.println("Name: " + prop.getProperty("name"));</font></div> </td> </tr> </tbody> </table> </p> <div><font size=3>  </font></div> <div> </div> <div> </div> <div><font size=3>xml文g攑֜WEB-INF/classes/目录下,可以防止对\径的编?/font></div> <p> <table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1> <tbody> <tr> <td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=568> <div><font size=3>InputStream is = PropertiesTest.class.getClassLoader().getResourceAsStream("rocie.xml");</font></div> <div><font size=3>Properties ps = new Properties();</font></div> <div><font size=3>ps.loadFromXML(is);</font></div> <div><font size=3>System.out.println("name:"+ps.getProperty("name"));<span>         </span></font></div> </td> </tr> </tbody> </table> </p> <div><font size=3>  </font></div> <div> </div> <div> </div> <div><font size=3>通过以下Ҏ保存Q?/font></div> <p> <table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1> <tbody> <tr> <td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=568> <div><font size=3>Properties prop = new Properties();</font></div> <div><font size=3>prop.setProperty("id", "2");</font></div> <div><font size=3>prop.setProperty("name", "彭大?);</font></div> <div><font size=3>prop.setProperty("email", "pds@dotraining.com");</font></div> <div><font size=3>FileOutputStream fos = new FileOutputStream("d:/jdk5/properties/pds.xml");</font></div> <div><font size=3>prop.storeToXML(fos, "彭大?,"gbk");</font></div> <div><font size=3>fos.close();</font></div> </td> </tr> </tbody> </table> </p> <div><font size=3>  </font></div> <div> </div> <div> </div> <div><font size=3>xml文gl节Q?/font></div> <p> <table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1> <tbody> <tr> <td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=568> <div><font size=3><?xml version="1.0" encoding="UTF-8"?></font></div> <div><font size=3><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"></font></div> <div><font size=3><properties></font></div> <div><font size=3><comment>Hi</comment></font></div> <div><font size=3><entry key="id">1</entry></font></div> <div><font size=3><entry key="name">rocie</entry></font></div> <div><font size=3><entry key="email">rocie@sina.com</entry></font></div> <div><font size=3></properties></font></div> </td> </tr> </tbody> </table> </p> <div><font size=3>  </font></div> <div> </div> <div> </div> <div><font size=3>DTD文gQ?/font></div> <p> <table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1> <tbody> <tr> <td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=568> <div><font size=3><?xml version="1.0" encoding="UTF-8"?></font></div> <div><font size=3><!-- DTD for properties --></font></div> <div><font size=3><!ELEMENT properties ( comment?, entry* ) ></font></div> <div><font size=3><!ATTLIST properties version CDATA #FIXED "1.0"></font></div> <div><font size=3><!ELEMENT comment (#PCDATA) ></font></div> <div><font size=3><!ELEMENT entry (#PCDATA) ></font></div> <div><font size=3><!ATTLIST entry key CDATA #REQUIRED></font></div> </td> </tr> </tbody> </table> </p> <div><font size=3>注:?表示0?Q?表示0x限;+表示臛_一?/font></div> <div><font size=3>  </font></div> <div> </div> <div> </div> <div style="MARGIN: 13pt 0cm"><strong><font size=5>?q发集合 </font></strong></div> <div><font size=3>问题Q?strong>ConcurrentModificationException</strong><strong>?/strong><em>fail-fast </em></font></div> <div> </div> <div> </div> <div><font size=3>当遍历一个IteratorӞ如果该Iterator对应的List里的元素发生改变Q则抛出q个异常?/font></div> <div><font size=3>解决ҎQ?strong>java.util.concurrent </strong></font></div> <div> </div> <div> </div> <div><font size=3>用CopyOnWriteArrayList代替原来的ArrayList</font></div> <div><font size=3><strong>copy-on-write:</strong>q意味着如果有大量的读(?get() Q?和P代,不必同步操作以照ց的写(?add() Q调用。对于新?CopyOnWriteArrayList ?CopyOnWriteArraySet c,所有可变的QmutableQ操作都首先取得后台数组的副本,对副本进行更改,然后替换副本。这U做法保证了在遍历自w更改的集合Ӟ永远不会抛出 ConcurrentModificationException 。遍历集合会用原来的集合完成Q而在以后的操作中使用更新后的集合?/font></div> <div><strong><font size=3>  </font></strong></div> <div> </div> <div> </div> <div style="MARGIN: 13pt 0cm"><strong><font size=5><span style="FONT-WEIGHT: normal">?/span>?for/in ?Java 5.0 中增强@?/font></strong></div> <p> <table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1> <tbody> <tr> <td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=568> <div><font size=3>public static List<strong><Integer></strong> list = new ArrayList<strong><Integer></strong>();</font></div> <div><span><font size=3>       </font></span></div> <div><font size=3><span>       public static int[] is = new int[]{1,2,3,4,65,456};</span></font></div> <div><span><font size=3>       </font></span></div> <div><font size=3><span>       static</span></font></div> <div><font size=3><span>       {            </span></font></div> <div><font size=3><span>              for(int i=0;i<100;i++)</span></font></div> <div><font size=3><span>                     list.add(i);              </span></font></div> <div><font size=3><span>       }</span></font></div> <div><span><font size=3>       </font></span></div> <div><font size=3><span>       public static void main(String args[])</span></font></div> <div><font size=3><span>       {</span></font></div> <div><font size=3><span>              for(<strong>Integer</strong> i:list)</span></font></div> <div><font size=3><span>                     System.out.println(i);     </span></font></div> <div><font size=3><span>              System.out.println("-------other for each--------");</span></font></div> <div><font size=3><span>              for(int i:is)</span></font></div> <div><font size=3><span>                     System.out.println(i);</span></font></div> <div><font size=3><span>       }</span></font></div> </td> </tr> </tbody> </table> </p> <div style="MARGIN: 13pt 0cm"><strong><font size=5><span style="FONT-WEIGHT: normal">?/span>枚Dcd enum</font></strong></div> <p> <table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1> <tbody> <tr> <td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=568> <div><font size=3>public class EnumTest {</font></div> <div><font size=3><span>       private Color color;</span></font></div> <div><span><font size=3>       </font></span></div> <div><font size=3><span>       public static enum Color {red,yellow,blue,green};     </span></font></div> <div><span><font size=3>       </font></span></div> <div><font size=3><span>       public Color getColor() {</span></font></div> <div><font size=3><span>              return color;</span></font></div> <div><font size=3><span>       }</span></font></div> <div><font size=3>  </font></div> <div> </div> <div> </div> <div><font size=3><span>       public void setColor(Color color) {</span></font></div> <div><font size=3><span>              this.color = color;</span></font></div> <div><font size=3><span>       }</span></font></div> <div><font size=3>  </font></div> <div> </div> <div> </div> <div><font size=3><span>       public static void main(String args[])</span></font></div> <div><font size=3><span>       {</span></font></div> <div><font size=3><span>              for(Color c:Color.values())</span></font></div> <div><font size=3><span>              {</span></font></div> <div><font size=3><span>                     System.out.println("name:"+c.name()+"ordinal:"+c.ordinal());</span></font></div> <div><font size=3><span>              }     </span></font></div> <div><font size=3><span>              EnumTest et = new EnumTest();</span></font></div> <div><font size=3><span>              et.setColor(Color.red);</span></font></div> <div><font size=3><span>              Color c = et.getColor();</span></font></div> <div><font size=3><span>              switch(c)</span></font></div> <div><font size=3><span>              {</span></font></div> <div><font size=3><span>              case red: System.out.println("red:"+c.name()+c.ordinal());</span></font></div> <div><font size=3><span>                                   break;</span></font></div> <div><font size=3><span>              case yellow: System.out.println("yellow"+c.name()+c.ordinal());</span></font></div> <div><font size=3><span>                                   break;</span></font></div> <div><font size=3><span>              default : System.out.println("over");</span></font></div> <div><font size=3><span>              }</span></font></div> <div><span><font size=3>              </font></span></div> <div><font size=3><span>       }</span></font></div> <div><font size=3>}</font></div> <div> </div> <div> </div> </td> </tr> </tbody> </table> </p> <div><strong><font size=3>  </font></strong></div> <div>q发实用E序<br>q发实用E序库由 Doug Lea 定义?JSR-166 中,?J2SE 1.5 q_中流行的q发软g包的一个特D版本。它提供强大的、高U别的线E构造,包括 executorsQ这是一个线EQ务框Ӟ、线E安全队列、Timers、锁Q包括原子锁Q和其他同步原语?/div> <div>著名的旗语(semaphoreQ是q样一个锁。旗语与现在使用?wait 的用方式相同,用于限制对一块代码的讉K。旗语更加灵z,q且也允许许多ƈ发的U程讉KQ同时允许您在获得一个锁之前对它q行试。下面的例子使用刚好一个旗语,也叫做二q制旗语。更多信息请参见 java.util.concurrent 软g包?/div> <div>final private Semaphore s= new Semaphore(1, true);</div> <div>s.acquireUninterruptibly(); //for non-blocking version use s.acquire()<br><br>balance=balance+10; //protected value<br>s.release(); //return semaphore token</div> <div><br>rmic —?rmi ~译?br>您不再需要?rmic —?rmi ~译器工具——来生成最q程的接口存栏V动态代理的引入意味着通常由存Ҏ供的信息可以在运行时被发现。更多信息请参见 RMI 版本说明?/div> <div>可扩展性和性能<br>1.5 版本承诺在可扩展性和性能斚w的改q,新的重点在于启动旉和内存占用,使它更加易于以最大的速度部v应用E序?/div> <div>最重大的一个更新是引入?Hotspot JVM 中的cL据共享。该技术不仅在多个正在q行?JVM 之间׃n只读数据Q而且改进了启动时_因ؓ核心?JVM c都是预先打包的?/div> <div>性能工效?J2SE 1.5 中的一个新Ҏ,q意味着如果您一直用的是以前版本中专门?JVM q行旉项Q?那么可能值得不用选项或者用很少的选项重新验证您的性能?br></div> <div>监控和可理?br>监控和可理性是 Java q_中的 RAS (Reliability, Availability, ServiceabilityQ即?性、可用性、可服务? 的一个关键组件?/div> <div>JVM Monitoring & Management API (JSR-174) 指定一l全面的可以从正在运行的 JVM q行监控?JVM internals?该信息可通过 JMX (JSR-003) MBeans 讉K刎ͼ也可以?JMX q程接口 (JSR-160) 和行业标?SNMP 工具而远E访问得到?/div> <div>最有用的一个特性是一个低内存程序。当过阀值时QJMX MBeans 可以通知已注册的侦听E序。更多信息请参见 javax.management ?java.lang.management?/div> <div>Z了解新的 API 是多么容易用,下面报告?Hotspot JVM 中内存堆的详l用情c?/div> <div>import java.lang.management.*;<br>import java.util.*;<br>import javax.management.*;</div> <div>public class MemTest {<br>public static void main(String args[]) {<br>List pools =ManagementFactory.getMemoryPoolMBeans();<br>for(ListIterator i = pools.listIterator(); i.hasNext();) {<br>MemoryPoolMBean p = (MemoryPoolMBean) i.next();<br>System.out.println("Memory type="+p.getType()+" Memory usage="+p.getUsage());<br>}<br>}<br>}</div> <div><br>新的 JVM profiling API (JSR-163)<br>该版本还包含一个更强大的本?profiling APIQ叫?JVMTI。该 API 已经?JSR 163 中指定了Qƈ由对改善?profiling 接口的需求所推动。但是,JVMTI 除了h profiling 功能之外Q还惌늛全范围的本机内部q程工具讉KQ包括监控工兗调试工具以及潜在的各种各样的其他代码分析工兗?/div> <div>该实现包含一个用于字节码装置QinstrumentationQ——Java ~程语言装置服务QJava Programming Language Instrumentation ServicesQJPLISQ的机制。这使得分析工具只在需要的地方d额外的配|信息(profilingQ。该技术的优点是,它允许更加集中的分析Qƈ且限制了正在q行?JVM 上的 profiling 工具的引用。该装置甚至可以在运行时和类加蝲时动态地生成Qƈ且可以作为类文g预先处理?/div> <div>下面q个例子创徏了一个装|钩Qinstrumentation hookQ,它可以从盘加蝲cL件的一个已修改的版本。要q行该测试,可利?java -javaagent:myBCI BCITest 启动 JRE?/div> <div><br>//File myBCI.java<br>import java.lang.instrument.Instrumentation;<br><br>public class myBCI {<br>private static Instrumentation instCopy;<br><br>public static void premain(String options, Instrumentation inst) {<br>instCopy = inst;<br>}<br>public static Instrumentation getInstrumentation() {<br>return instCopy;<br>}<br>}<br><br>//File BCITest.java<br><br>import java.nio.*;<br>import java.io.*;<br>import java.nio.channels.*;<br>import java.lang.instrument.*;<br><br>public class BCITest {<br>public static void main (String[] args) {<br>try {<br>OriginalClass mc = new OriginalClass();<br>mc.message();<br><br>FileChannel fc=new FileInputStream(new File("modified"+File.separator+"OriginalClass.class")).getChannel();<br>ByteBuffer buf = fc.map(FileChannel.MapMode.READ_ONLY, 0, (int)fc.size());<br>byte[] classBuffer = new byte[buf.capacity()];<br>buf.get(classBuffer, 0, classBuffer.length);<br>myBCI.getInstrumentation().redefineClasses(new ClassDefinition[] {new ClassDefinition(mc.getClass(), classBuffer)});<br>mc.message();<br>}catch (Exception e){}<br>}<br>}<br><br>//OriginalClass.java<br>//Compile in current directory<br>//Copy source to modified directory,change message and recompile<br><br>public class OriginalClass {<br>public void message() {<br>System.out.println("OriginalClass");<br>}<br>}<br><br><br></div> <div><br>改进的诊断能?br>如果没有控制台窗口可用,生成?Stack 跟踪很W拙。两个新?API —?getStackTrace ?Thread.getAllStackTraces —?以程序的方式提供该信息?/div> <div>StackTraceElement e[]=Thread.currentThread().getStackTrace();<br>for (int i=0; i <e.length; i++) {<br>System.out.println(e<em>);<br>}<br>System.out.println("\n"+Thread.getAllStackTraces());</em></div> <div><br>Hotspot JVM 包含一个致命的错误处理E序Qerror handerQ,如果 JVM 异常中断Q它可以q行用户提供的脚本。?Hotspot JVM 可服务性代理连接器Q调试工具也可以q接C个挂L JVM 或者核心文件?/div> <div>-XX:OnError="command" <br></div> <div>-XX:OnError="pmap %p" <br>-XX:OnError="gdb %p"</div> <div>optional %p used as process id</div> <div><br>桌面客户?br>Java 桌面客户端保留有 Java q_的一个关键组Ӟq且q一Ҏ?J2SE 1.5 中许多改q的焦点?/div> <div>q个 Beta 版本包含启动旉和内存占用方面的一些早期改q。该版本不仅更快Qƈ?Swing 工具集采用了一个暂新的叫做 Ocean 的主题?/div> <div>通过建立 J2SE 1.4.2 中的更新QGTK ?Windows XP 外观斚w有了更进一步的改进?/div> <div><br>Windows XP<br>Click to Enlarge <br><br>Linux/Redhat<br>Click to Enlarge <br><br></div> <div>h最?OpenGL 驱动E序q且选择了图形卡?Linux ?Solaris 用户Q可以用下面的q行时属性从 Java2D 获得本机g加速:</div> <div>java -Dsun.java2d.opengl=true -jar Java2D.</div> <div>Linux 版本也具有快速的 X11 ToolkitQ叫?XAWTQ默认情况下是启用的。如果您需要与 motif 版本q行比较Q可以用下面的pȝ属性:</div> <div>java -Dawt.toolkit=sun.awt.motif.MToolkit -jar Notepad.jar</div> <div>QX11 Toolkit 叫做 sun.awt.X11.XToolkitQ?/div> <div>X11 Toolkit 也?XDnD 协议Q所以您可以?Java 和其他应用(比如 StarOffice ?MozillaQ之间拖攄单的lg?/div> <div>其他Ҏ?br>核心 XML 支持<br>J2SE 1.5 引入了核?XML q_的几个修订,包括 XML 1.1 ?Namespace、XML Schema、SAX 2.0.1、XSLT 和快?XLSTC ~译器,以及最后的 DOM W?3 层支持?/div> <div>除了支持核心 XML 之外Q未来版本的 Java Web Services Developer Pack 交付最新的 Web 服务标准QJAX-RPC & SAAJ (WSDL/SOAP)、JAXB、XML Encryption and Digital SignatureQ以及用于注册的 JAXR?/div> <div>辅助字符支持<br>32 位的辅助字符支持作ؓ传输?Unicode 4.0 支持的一部分Q已l慎重地d到该q_。辅助字W被~码Z对特D的 UTF16 |以生成一个不同的字符或者码点(codepointQ。一个代理对Qsurrogate pairQ是一个高 UTF16 值和后面的一个低 UTF16 值的l合。这些高值和低值来自一个特D范围的 UTF16 倹{?/div> <div>一般来_当?String 或者字W序列时Q核?API 库将透明Cؓ您处理新的辅助字W。但是因?Java "char" 仍然保留?16 位,所以非常少的一些?char 作ؓ参数的方法,现在有了_的可以接?int 值的ҎQ其?int 值可以代表新的更大的倹{特别是 Character c,h附加的方法来索当前的字符和接下来的字W,以便索辅助的码点|如下所C:</div> <div>String u="\uD840\uDC08";<br>System.out.println(u+"+ "+u.length());<br>System.out.println(Character.isHighSurrogate(u.charAt(0)));<br>System.out.println((int)u.charAt(1));<br>System.out.println((int)u.codePointAt(0));</div> <div><br>更多信息请参?Character 中的 Unicode 部分?/div> <div>JDBC RowSets<br>JDBC 行集支持有两个主要的更新。CachedRowSet 包含从数据库索的行的内存中的集合。但是它们也是不q接的,q意味着以后更新可以与数据库重新同步?/div> <div>另一个组件是 WebRowSetQ它使用数据库行通过 XML 来传输数据?/div> <div>参考资料:<br>New Language Features for Ease of Development in the Java 2 Platform, Standard Edition 1.5: <a target=_blank><font color=#000000><u>http://java.sun.com/features/2003/05/bloch_qa.html</u></font></a></div> <div>Tiger Component JSRs<br>003 Java Management Extensions (JMX) Specification <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=3</u></font></a></div> <div>013 Decimal Arithmetic Enhancement <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=13</u></font></a></div> <div>014 Add Generic Types To The Java Programming Language <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=14</u></font></a></div> <div>028 Java SASL Specification <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=28</u></font></a></div> <div>114 JDBC Rowset Implementations <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=114</u></font></a></div> <div>133 Java Memory Model and Thread Specification Revision <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=133</u></font></a></div> <div>160 Java Management Extensions (JMX) Remote API 1.0 <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=160</u></font></a></div> <div>163 Java Platform Profiling Architecture <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=163</u></font></a></div> <div>166 Concurrency Utilities <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=166</u></font></a></div> <div>174 Monitoring and Management Specification for the Java Virtual Machine <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=174</u></font></a></div> <div>175 A Metadata Facility for the Java Programming Language <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=175</u></font></a></div> <div>200 Network Transfer Format for Java Archives <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=200</u></font></a></div> <div>201 Extending the Java Programming Language with Enumerations, Autoboxing, Enhanced for Loops and Static Import <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=201</u></font></a></div> <div>204 Unicode Supplementary Character Support <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=204</u></font></a></div> <div>206 Java API for XML Processing (JAXP) 1.3 <a target=_blank><font color=#000000><u>http://jcp.org/en/jsr/detail?id=206</u></font></a></div> </span></font></strong></div> <img src ="http://www.aygfsteel.com/BigMouse/aggbug/125762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/BigMouse/" target="_blank">BigMouse</a> 2007-06-22 10:49 <a href="http://www.aygfsteel.com/BigMouse/articles/125762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ٹ</a>| <a href="http://" target="_blank">¤</a>| <a href="http://" target="_blank">Ժ</a>| <a href="http://" target="_blank">»</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̩˳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">ǿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">غ</a>| <a href="http://" target="_blank">ƽ̶</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">鴨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">԰</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ٷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ȫ</a>| <a href="http://" target="_blank">ױ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>