﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-笑看风云-随笔分类-Java</title><link>http://www.blogjava.net/zh-qi/category/32742.html</link><description>一切从头开始</description><language>zh-cn</language><lastBuildDate>Wed, 23 Sep 2009 01:07:17 GMT</lastBuildDate><pubDate>Wed, 23 Sep 2009 01:07:17 GMT</pubDate><ttl>60</ttl><item><title>如何制作 MyEclipse 5.5/6.0 绿色版</title><link>http://www.blogjava.net/zh-qi/archive/2009/09/08/294246.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Tue, 08 Sep 2009 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2009/09/08/294246.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/294246.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2009/09/08/294246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/294246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/294246.html</trackback:ping><description><![CDATA[<p>另一种解决方法是: <a class="entrylistItemTitle" id="CategoryEntryList1_EntryStoryList_Entries_ctl02_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2006/11/27/83884.html"><strong><font color="#1a8bc8">Portable Java IDE 2.1 打包下载(12.7.2006更新)</font></strong></a>&nbsp;&nbsp;&nbsp;<br />
<br />
我们知道 Eclipse 工具的最大缺点, 就是安装插件极其费劲, 第一是需要手工复制安装, 第二呢如果插件版本和 Eclipse 版本不配套, 根本就用不了, 第三呢如果插件A还依赖于插件B(见 Eclipse 官方网站众多插件的下载和安装, 例如 Visual Editor), 你还得去再把插件B下载一下. 所以网上出现了众多 Eclipse 插件的管理方案, 例如 Link 目录安装啊, EasyEclipse 啊(<a title="EasyEclipse Free, open source, easy-to-use Eclipse distributions" href="http://easyeclipse.org/">EasyEclipse Free, open source, easy-to-use Eclipse distributions</a>), EasyEclipse 这个是用 NSIS 来做单个插件的安装和卸载的.&nbsp; 商业的解决方案, 集成了各种各样的插件的, 首推流行的 MyEclipse. 但是随着 MyEclipse 安装包的肥大, 安装一次也是相当的耗时, 尤其最后一步执行 ANT 脚本用 unpack200 解压缩的过程, 如果电脑次一点的话, 轻则半天没反映, 重则进程挂掉, 重新安装. 虽然对 Eclipse 本身我没啥说的, 但是 Eclipse 装插件的确是对初学者来说是个折磨.&nbsp; 废话少说.首先呢, 我们需要去 MyEclipse 的 All In&nbsp;ONE 版本, 这样做绿色版好做一些. 如果你不知道如何下载和安装, 请参考本站视频: <a href="http://www.blogjava.net/beansoft/archive/2007/09/24/147651.html">MyEclipse 6 实战开发讲解视频入门 0: 下载 安装 运行 HelloWorld</a>&nbsp;</p>
<p><a href="http://www.blogjava.net/beansoft/archive/2007/08/12/136164.html">MyEclipse 5.5 + Tomcat 开发视频: 下载,安装,配置,开发并运行Web项目</a> </p>
<p>安装完毕后得到一个完整的目录, 那么我们要做的就是修改一个配置文件, 创建一个启动 BAT 文件后就可以实现 MyEclipse 6 的免安装运行了, 换句话说我们可以放在移动硬盘上启动(当然注册码自己想办法搞定). </p>
<p>首先看安装后的目录: </p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="210" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.56.0_7DCB/image_1.png" width="220" border="0" /> </p>
<p>我们先在这个目录下新建一个文件: MyEclipse 6.0.bat , 文件内容如下: </p>
<blockquote>
<p>start eclipse\eclipse.exe -vm jre\bin\javaw.exe</p>
</blockquote>
<p>接下来只需要改一个Eclipse插件的配置文件就可以实现绿色版运行了, 我们用记事本等文本编辑器打开下面的这个文件 com.genuitec.eclipse.MyEclipse.link: </p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="66" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.56.0_7DCB/image_3.png" width="284" border="0" /> </p>
<p>文件原始内容如下所示: </p>
<p>path=d:\\Java\\MyEclipse6.0\\myeclipse </p>
<p>这个是指定 myeclipse 这个插件目录的位置的, 我们把它改成相对路径即可:</p>
<p>path=..\\myeclipse</p>
<p>OK, 完工了, 把MyEclipse 6.0 整个目录复制到你的移动硬盘上或者刻成光盘. 以后当你的系统重做后或者拿着移动硬盘到了一个根本没装过 Java 工具的电脑上后, 双击批处理文件即可立即启动 MyEclipse 来工作! 复制到硬盘上的任何目录(注意路径建议不要带空格或者汉字), 也可以同样启动, 免去我们安装和配置之苦.</p>
<img src ="http://www.blogjava.net/zh-qi/aggbug/294246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2009-09-08 09:13 <a href="http://www.blogjava.net/zh-qi/archive/2009/09/08/294246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java多线程编程总结</title><link>http://www.blogjava.net/zh-qi/archive/2009/05/18/271351.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Mon, 18 May 2009 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2009/05/18/271351.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/271351.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2009/05/18/271351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/271351.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/271351.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">一、认识多任务、多进程、单线程、多线程<br />
要认识多线程就要从操作系统的原理说起。<br />
&nbsp;<br />
以前古老的DOS操作系统（V&nbsp;</span><span style="color: #000000;">6.22</span><span style="color: #000000;">）是单任务的，还没有线程的概念，系统在每次只能做一件事情。比如你在copy东西的时候不能rename文件名。为了提高系统的利用效率，采用批处理来批量执行任务。<br />
&nbsp;<br />
现在的操作系统都是多任务操作系统，每个运行的任务就是操作系统所做的一件事情，比如你在听歌的同时还在用MSN和好友聊天。听歌和聊天就是两个任务，这个两个任务是&#8220;同时&#8221;进行的。一个任务一般对应一个进程，也可能包含好几个进程。比如运行的MSN就对应一个MSN的进程，如果你用的是&nbsp;windows系统，你就可以在任务管理器中看到操作系统正在运行的进程信息。<br />
&nbsp;<br />
一般来说，当运行一个应用程序的时候，就启动了一个进程，当然有些会启动多个进程。启动进程的时候，操作系统会为进程分配资源，其中最主要的资源是内存空间，因为程序是在内存中运行的。在进程中，有些程序流程块是可以乱序执行的，并且这个代码块可以同时被多次执行。实际上，这样的代码块就是线程体。线程是进程中乱序执行的代码流程。当多个线程同时运行的时候，这样的执行模式成为并发执行。<br />
&nbsp;<br />
多线程的目的是为了最大限度的利用CPU资源。<br />
&nbsp;<br />
Java编写程序都运行在在Java虚拟机（JVM）中，在JVM的内部，程序的多任务是通过线程来实现的。每用java命令启动一个java&nbsp;应用程序，就会启动一个JVM进程。在同一个JVM进程中，有且只有一个进程，就是它自己。在这个JVM环境中，所有程序代码的运行都是以线程来运行。<br />
&nbsp;<br />
一般常见的Java应用程序都是单线程的。比如，用java命令运行一个最简单的HelloWorld的Java应用程序时，就启动了一个&nbsp;JVM进程，JVM找到程序程序的入口点main()，然后运行main()方法，这样就产生了一个线程，这个线程称之为主线程。当main方法结束后，主线程运行完成。JVM进程也随即退出&nbsp;。<br />
&nbsp;<br />
对于一个进程中的多个线程来说，多个线程共享进程的内存块，当有新的线程产生的时候，操作系统不分配新的内存，而是让新线程共享原有的进程块的内存。因此，线程间的通信很容易，速度也很快。不同的进程因为处于不同的内存块，因此进程之间的通信相对困难。<br />
&nbsp;<br />
实际上，操作的系统的多进程实现了多任务并发执行，程序的多线程实现了进程的并发执行。多任务、多进程、多线程的前提都是要求操作系统提供多任务、多进程、多线程的支持。<br />
&nbsp;<br />
在Java程序中，JVM负责线程的调度。线程调度是值按照特定的机制为多个线程分配CPU的使用权。<br />
调度的模式有两种：分时调度和抢占式调度。分时调度是所有线程轮流获得CPU使用权，并平均分配每个线程占用CPU的时间；抢占式调度是根据线程的优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式。<br />
&nbsp;<br />
所谓的&#8220;并发执行&#8221;、&#8220;同时&#8221;其实都不是真正意义上的&#8220;同时&#8221;。众所周知，CPU都有个时钟频率，表示每秒中能执行cpu指令的次数。在每个时钟周期内，CPU实际上只能去执行一条（也有可能多条）指令。操作系统将进程线程进行管理，轮流（没有固定的顺序）分配每个进程很短的一段是时间（不一定是均分），然后在每个线程内部，程序代码自己处理该进程内部线程的时间分配，多个线程之间相互的切换去执行，这个切换时间也是非常短的。因此多任务、多进程、多线程都是操作系统给人的一种宏观感受，从微观角度看，程序的运行是异步执行的。<br />
&nbsp;<br />
用一句话做总结：虽然操作系统是多线程的，但CPU每一时刻只能做一件事，和人的大脑是一样的，呵呵。<br />
&nbsp;<br />
&nbsp;<br />
二、Java与多线程<br />
&nbsp;<br />
Java语言的多线程需要操作系统的支持。<br />
&nbsp;<br />
Java&nbsp;虚拟机允许应用程序并发地运行多个执行线程。Java语言提供了多线程编程的扩展点，并给出了功能强大的线程控制API。<br />
&nbsp;<br />
在Java中，多线程的实现有两种方式：<br />
扩展java.lang.Thread类<br />
实现java.lang.Runnable接口<br />
&nbsp;<br />
&nbsp;<br />
每个线程都有一个优先级，高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新&nbsp;Thread&nbsp;对象时，该新线程的初始优先级被设定为创建线程的优先级，并且当且仅当创建线程是守护线程时，新线程才是守护程序。<br />
&nbsp;<br />
当&nbsp;Java&nbsp;虚拟机启动时，通常都会有单个非守护线程（它通常会调用某个指定类的&nbsp;main&nbsp;方法）。Java&nbsp;虚拟机会继续执行线程，直到下列任一情况出现时为止：<br />
&nbsp;<br />
调用了&nbsp;Runtime&nbsp;类的&nbsp;exit&nbsp;方法，并且安全管理器允许退出操作发生。<br />
非守护线程的所有线程都已停止运行，无论是通过从对&nbsp;run&nbsp;方法的调用中返回，还是通过抛出一个传播到&nbsp;run&nbsp;方法之外的异常。<br />
&nbsp;<br />
&nbsp;<br />
三、扩展java.lang.Thread类<br />
&nbsp;<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;File&nbsp;Name:&nbsp;&nbsp;&nbsp;TestMitiThread.java<br />
&nbsp;*&nbsp;Created&nbsp;by:&nbsp;&nbsp;IntelliJ&nbsp;IDEA.<br />
&nbsp;*&nbsp;Copyright:&nbsp;&nbsp;&nbsp;Copyright&nbsp;(c)&nbsp;2003-2006<br />
&nbsp;*&nbsp;Company:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lavasoft(&nbsp;[url]</span><span style="color: #008000; text-decoration: underline;">http://lavasoft.blog.51cto.com/</span><span style="color: #008000;">[/url])<br />
&nbsp;*&nbsp;Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leizhimin<br />
&nbsp;*&nbsp;Modifier:&nbsp;&nbsp;&nbsp;&nbsp;leizhimin<br />
&nbsp;*&nbsp;Date&nbsp;Time:&nbsp;&nbsp;&nbsp;2007-5-17&nbsp;10:03:12<br />
&nbsp;*&nbsp;Readme:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过扩展Thread类实现多线程<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;TestMitiThread&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;rags)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Thread.currentThread().getName()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;线程运行开始!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;MitiSay(</span><span style="color: #000000;">"</span><span style="color: #000000;">A</span><span style="color: #000000;">"</span><span style="color: #000000;">).start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;MitiSay(</span><span style="color: #000000;">"</span><span style="color: #000000;">B</span><span style="color: #000000;">"</span><span style="color: #000000;">).start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Thread.currentThread().getName()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;线程运行结束!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
&nbsp;<br />
</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;MitiSay&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;Thread&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;MitiSay(String&nbsp;threadName)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">super</span><span style="color: #000000;">(threadName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;run()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(getName()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;线程运行开始!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep((</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)&nbsp;Math.random()&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(getName()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;线程运行结束!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
&nbsp;<br />
运行结果：<br />
&nbsp;<br />
main&nbsp;线程运行开始</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
main&nbsp;线程运行结束</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
A&nbsp;线程运行开始</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;A<br />
</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;A<br />
B&nbsp;线程运行开始</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;A<br />
</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;B<br />
</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;A<br />
</span><span style="color: #000000;">4</span><span style="color: #000000;">&nbsp;A<br />
</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;B<br />
</span><span style="color: #000000;">5</span><span style="color: #000000;">&nbsp;A<br />
</span><span style="color: #000000;">6</span><span style="color: #000000;">&nbsp;A<br />
</span><span style="color: #000000;">7</span><span style="color: #000000;">&nbsp;A<br />
</span><span style="color: #000000;">8</span><span style="color: #000000;">&nbsp;A<br />
</span><span style="color: #000000;">9</span><span style="color: #000000;">&nbsp;A<br />
A&nbsp;线程运行结束</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;B<br />
</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;B<br />
</span><span style="color: #000000;">4</span><span style="color: #000000;">&nbsp;B<br />
</span><span style="color: #000000;">5</span><span style="color: #000000;">&nbsp;B<br />
</span><span style="color: #000000;">6</span><span style="color: #000000;">&nbsp;B<br />
</span><span style="color: #000000;">7</span><span style="color: #000000;">&nbsp;B<br />
</span><span style="color: #000000;">8</span><span style="color: #000000;">&nbsp;B<br />
</span><span style="color: #000000;">9</span><span style="color: #000000;">&nbsp;B<br />
B&nbsp;线程运行结束</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
&nbsp;<br />
说明：<br />
程序启动运行main时候，java虚拟机启动一个进程，主线程main在main()调用时候被创建。随着调用MitiSay的两个对象的start方法，另外两个线程也启动了，这样，整个应用就在多线程下运行。<br />
&nbsp;<br />
在一个方法中调用Thread.currentThread().getName()方法，可以获取当前线程的名字。在mian方法中调用该方法，获取的是主线程的名字。<br />
&nbsp;<br />
注意：start()方法的调用后并不是立即执行多线程代码，而是使得该线程变为可运行态（Runnable），什么时候运行是由操作系统决定的。<br />
从程序运行的结果可以发现，多线程程序是乱序执行。因此，只有乱序执行的代码才有必要设计为多线程。<br />
Thread.sleep()方法调用目的是不让当前线程独自霸占该进程所获取的CPU资源，以留出一定时间给其他线程执行的机会。<br />
实际上所有的多线程代码执行顺序都是不确定的，每次执行的结果都是随机的。<br />
&nbsp;<br />
&nbsp;<br />
四、实现java.lang.Runnable接口<br />
&nbsp;<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;通过实现&nbsp;Runnable&nbsp;接口实现多线程<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;TestMitiThread1&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;Runnable&nbsp;{<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Thread.currentThread().getName()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;线程运行开始!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestMitiThread1&nbsp;test&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;TestMitiThread1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;thread1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Thread(test);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;thread2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Thread(test);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thread1.start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thread2.start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Thread.currentThread().getName()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;线程运行结束!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;run()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Thread.currentThread().getName()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;线程运行开始!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;Thread.currentThread().getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep((</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)&nbsp;Math.random()&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Thread.currentThread().getName()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;线程运行结束!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
&nbsp;<br />
运行结果：<br />
&nbsp;<br />
main&nbsp;线程运行开始</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;线程运行开始</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
main&nbsp;线程运行结束</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;线程运行开始</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">4</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">4</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">5</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">6</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">5</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">7</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">8</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">6</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">9</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">7</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;线程运行结束</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">8</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">9</span><span style="color: #000000;">&nbsp;Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
Thread</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;线程运行结束</span><span style="color: #000000;">!</span><span style="color: #000000;"><br />
&nbsp;<br />
说明：<br />
TestMitiThread1类通过实现Runnable接口，使得该类有了多线程类的特征。run（）方法是多线程程序的一个约定。所有的多线程代码都在run方法里面。Thread类实际上也是实现了Runnable接口的类。<br />
在启动的多线程的时候，需要先通过Thread类的构造方法Thread(Runnable&nbsp;target)&nbsp;构造出对象，然后调用Thread对象的start()方法来运行多线程代码。<br />
实际上所有的多线程代码都是通过运行Thread的start()方法来运行的。因此，不管是扩展Thread类还是实现Runnable接口来实现多线程，最终还是通过Thread的对象的API来控制线程的，熟悉Thread类的API是进行多线程编程的基础。<br />
&nbsp;<br />
五、读解Thread类API<br />
&nbsp;<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;MAX_PRIORITY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;线程可以具有的最高优先级。<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;MIN_PRIORITY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;线程可以具有的最低优先级。<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;NORM_PRIORITY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分配给线程的默认优先级。<br />
&nbsp;<br />
构造方法摘要<br />
Thread(Runnable&nbsp;target)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分配新的&nbsp;Thread&nbsp;对象。<br />
Thread(String&nbsp;name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分配新的&nbsp;Thread&nbsp;对象。<br />
&nbsp;<br />
&nbsp;<br />
方法摘要<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;Thread&nbsp;currentThread()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回对当前正在执行的线程对象的引用。<br />
&nbsp;ClassLoader&nbsp;getContextClassLoader()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回该线程的上下文&nbsp;ClassLoader。<br />
&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;getId()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回该线程的标识符。<br />
&nbsp;String&nbsp;getName()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回该线程的名称。<br />
&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;getPriority()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回线程的优先级。<br />
&nbsp;Thread.State&nbsp;getState()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回该线程的状态。<br />
&nbsp;ThreadGroup&nbsp;getThreadGroup()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回该线程所属的线程组。<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;holdsLock(Object&nbsp;obj)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当且仅当当前线程在指定的对象上保持监视器锁时，才返回&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;interrupt()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中断线程。<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;interrupted()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试当前线程是否已经中断。<br />
&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;isAlive()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试线程是否处于活动状态。<br />
&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;isDaemon()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试该线程是否为守护线程。<br />
&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;isInterrupted()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试线程是否已经中断。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;join()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;等待该线程终止。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;join(</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;millis)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;等待该线程终止的时间最长为&nbsp;millis&nbsp;毫秒。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;join(</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;millis,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nanos)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;等待该线程终止的时间最长为&nbsp;millis&nbsp;毫秒&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;nanos&nbsp;纳秒。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;resume()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已过时。&nbsp;该方法只与&nbsp;suspend()&nbsp;一起使用，但&nbsp;suspend()&nbsp;已经遭到反对，因为它具有死锁倾向。有关更多信息，请参阅为何&nbsp;Thread.stop、Thread.suspend&nbsp;和&nbsp;Thread.resume&nbsp;遭到反对？。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;run()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果该线程是使用独立的&nbsp;Runnable&nbsp;运行对象构造的，则调用该&nbsp;Runnable&nbsp;对象的&nbsp;run&nbsp;方法；否则，该方法不执行任何操作并返回。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setContextClassLoader(ClassLoader&nbsp;cl)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置该线程的上下文&nbsp;ClassLoader。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setDaemon(</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将该线程标记为守护线程或用户线程。<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler&nbsp;eh)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置当线程由于未捕获到异常而突然终止，并且没有为该线程定义其他处理程序时所调用的默认处理程序。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setName(String&nbsp;name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;改变线程名称，使之与参数&nbsp;name&nbsp;相同。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setPriority(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;newPriority)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;更改线程的优先级。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler&nbsp;eh)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置该线程由于未捕获到异常而突然终止时调用的处理程序。<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;sleep(</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;millis)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在指定的毫秒数内让当前正在执行的线程休眠（暂停执行）。<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;sleep(</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;millis,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nanos)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠（暂停执行）。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;start()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使该线程开始执行；Java&nbsp;虚拟机调用该线程的&nbsp;run&nbsp;方法。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;stop()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已过时。&nbsp;该方法具有固有的不安全性。用&nbsp;Thread.stop&nbsp;来终止线程将释放它已经锁定的所有监视器（作为沿堆栈向上传播的未检查&nbsp;ThreadDeath&nbsp;异常的一个自然后果）。如果以前受这些监视器保护的任何对象都处于一种不一致的状态，则损坏的对象将对其他线程可见，这有可能导致任意的行为。stop&nbsp;的许多使用都应由只修改某些变量以指示目标线程应该停止运行的代码来取代。目标线程应定期检查该变量，并且如果该变量指示它要停止运行，则从其运行方法依次返回。如果目标线程等待很长时间（例如基于一个条件变量），则应使用&nbsp;interrupt&nbsp;方法来中断该等待。有关更多信息，请参阅《为何不赞成使用&nbsp;Thread.stop、Thread.suspend&nbsp;和&nbsp;Thread.resume？》。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;stop(Throwable&nbsp;obj)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已过时。&nbsp;该方法具有固有的不安全性。请参阅&nbsp;stop()&nbsp;以获得详细信息。该方法的附加危险是它可用于生成目标线程未准备处理的异常（包括若没有该方法该线程不太可能抛出的已检查的异常）。有关更多信息，请参阅为何&nbsp;Thread.stop、Thread.suspend&nbsp;和&nbsp;Thread.resume&nbsp;遭到反对？。<br />
&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;suspend()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已过时。该方法已经遭到反对，因为它具有固有的死锁倾向。如果目标线程挂起时在保护关键系统资源的监视器上保持有锁，则在目标线程重新开始以前任何线程都不能访问该资源。如果重新开始目标线程的线程想在调用&nbsp;resume&nbsp;之前锁定该监视器，则会发生死锁。这类死锁通常会证明自己是&#8220;冻结&#8221;的进程。有关更多信息，请参阅为何&nbsp;Thread.stop、Thread.suspend&nbsp;和&nbsp;Thread.resume&nbsp;遭到反对？。<br />
&nbsp;String&nbsp;toString()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回该线程的字符串表示形式，包括线程名称、优先级和线程组。<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;yield()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;暂停当前正在执行的线程对象，并执行其他线程。<br />
&nbsp;<br />
&nbsp;<br />
六、线程的状态转换图<br />
&nbsp;<br />
线程在一定条件下，状态会发生变化。线程变化的状态转换图如下：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/zh-qi/d.jpg" width="612" height="383" /><br />
&nbsp;<br />
</span><span style="color: #000000;">1</span><span style="color: #000000;">、新建状态（New）：新创建了一个线程对象。<br />
</span><span style="color: #000000;">2</span><span style="color: #000000;">、就绪状态（Runnable）：线程对象创建后，其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中，变得可运行，等待获取CPU的使用权。<br />
</span><span style="color: #000000;">3</span><span style="color: #000000;">、运行状态（Running）：就绪状态的线程获取了CPU，执行程序代码。<br />
</span><span style="color: #000000;">4</span><span style="color: #000000;">、阻塞状态（Blocked）：阻塞状态是线程因为某种原因放弃CPU使用权，暂时停止运行。直到线程进入就绪状态，才有机会转到运行状态。阻塞的情况分三种：<br />
（一）、等待阻塞：运行的线程执行wait()方法，JVM会把该线程放入等待池中。<br />
（二）、同步阻塞：运行的线程在获取对象的同步锁时，若该同步锁被别的线程占用，则JVM会把该线程放入锁池中。<br />
（三）、其他阻塞：运行的线程执行sleep()或join()方法，或者发出了I</span><span style="color: #000000;">/</span><span style="color: #000000;">O请求时，JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I</span><span style="color: #000000;">/</span><span style="color: #000000;">O处理完毕时，线程重新转入就绪状态。<br />
</span><span style="color: #000000;">5</span><span style="color: #000000;">、死亡状态（Dead）：线程执行完了或者因异常退出了run()方法，该线程结束生命周期。<br />
&nbsp;<br />
&nbsp;<br />
七、线程的调度<br />
</span><span style="color: #000000;">1</span><span style="color: #000000;">、调整线程优先级：Java线程有优先级，优先级高的线程会获得较多的运行机会。<br />
&nbsp;<br />
Java线程的优先级用整数表示，取值范围是1</span><span style="color: #000000;">~</span><span style="color: #000000;">10</span><span style="color: #000000;">，Thread类有以下三个静态常量：<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;MAX_PRIORITY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;线程可以具有的最高优先级，取值为10。<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;MIN_PRIORITY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;线程可以具有的最低优先级，取值为1。<br />
</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;NORM_PRIORITY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分配给线程的默认优先级，取值为5。<br />
&nbsp;<br />
Thread类的setPriority()和getPriority()方法分别用来设置和获取线程的优先级。<br />
&nbsp;<br />
每个线程都有默认的优先级。主线程的默认优先级为Thread.NORM_PRIORITY。<br />
线程的优先级有继承关系，比如A线程中创建了B线程，那么B将和A具有相同的优先级。<br />
JVM提供了10个线程优先级，但与常见的操作系统都不能很好的映射。如果希望程序能移植到各个操作系统中，应该仅仅使用Thread类有以下三个静态常量作为优先级，这样能保证同样的优先级采用了同样的调度方式。<br />
&nbsp;<br />
</span><span style="color: #000000;">2</span><span style="color: #000000;">、线程睡眠：Thread.sleep(</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;millis)方法，使线程转到阻塞状态。millis参数设定睡眠的时间，以毫秒为单位。当睡眠结束后，就转为就绪（Runnable）状态。sleep()平台移植性好。<br />
&nbsp;<br />
</span><span style="color: #000000;">3</span><span style="color: #000000;">、线程等待：Object类中的wait()方法，导致当前的线程等待，直到其他线程调用此对象的&nbsp;notify()&nbsp;方法或&nbsp;notifyAll()&nbsp;唤醒方法。这个两个唤醒方法也是Object类中的方法，行为等价于调用&nbsp;wait(</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;一样。<br />
&nbsp;<br />
</span><span style="color: #000000;">4</span><span style="color: #000000;">、线程让步：Thread.yield()&nbsp;方法，暂停当前正在执行的线程对象，把执行机会让给相同或者更高优先级的线程。<br />
&nbsp;<br />
</span><span style="color: #000000;">5</span><span style="color: #000000;">、线程加入：join()方法，等待其他线程终止。在当前线程中调用另一个线程的join()方法，则当前线程转入阻塞状态，直到另一个进程运行结束，当前线程再由阻塞转为就绪状态。<br />
&nbsp;<br />
</span><span style="color: #000000;">6</span><span style="color: #000000;">、线程唤醒：Object类中的notify()方法，唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待，则会选择唤醒其中一个线程。选择是任意性的，并在对实现做出决定时发生。线程通过调用其中一个&nbsp;wait&nbsp;方法，在对象的监视器上等待。直到当前的线程放弃此对象上的锁定，才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争；例如，唤醒的线程在作为锁定此对象的下一个线程方面没有可靠的特权或劣势。类似的方法还有一个notifyAll()，唤醒在此对象监视器上等待的所有线程。<br />
&nbsp;<br />
注意：Thread中suspend()和resume()两个方法在JDK1.5中已经废除，不再介绍。因为有死锁倾向。<br />
&nbsp;<br />
</span><span style="color: #000000;">7</span><span style="color: #000000;">、常见线程名词解释<br />
主线程：JVM调用程序mian()所产生的线程。<br />
当前线程：这个是容易混淆的概念。一般指通过Thread.currentThread()来获取的进程。<br />
后台线程：指为其他线程提供服务的线程，也称为守护线程。JVM的垃圾回收线程就是一个后台线程。<br />
前台线程：是指接受后台线程服务的线程，其实前台后台线程是联系在一起，就像傀儡和幕后操纵者一样的关系。傀儡是前台线程、幕后操纵者是后台线程。由前台线程创建的线程默认也是前台线程。可以通过isDaemon()和setDaemon()方法来判断和设置一个线程是否为后台线程。<br />
<br />
转自:http://lavasoft.blog.51cto.com/62575/27069<br />
</span></div>
<img src ="http://www.blogjava.net/zh-qi/aggbug/271351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2009-05-18 15:43 <a href="http://www.blogjava.net/zh-qi/archive/2009/05/18/271351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Web应用中的任务调度</title><link>http://www.blogjava.net/zh-qi/archive/2009/05/08/269644.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Fri, 08 May 2009 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2009/05/08/269644.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/269644.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2009/05/08/269644.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/269644.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/269644.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 任务调度是大型J2EE&nbsp;web应用中常见的工作。开发者希望以指定的间隔时间执行各类操作，并完成一些无需用户输入的任务。Java中可有无数方法来做到这一点，但是在web应用中却并没有这方面的统一标准。当许多开发人员参与同一个项目，并且以各自不同的方式来实现任务调度时，就可能产生很大问题。内存和同步问题就是必须首先考虑的两件事。事实上，一些开发者试图调用操作系统层面的任务调度机制，如Unix...&nbsp;&nbsp;<a href='http://www.blogjava.net/zh-qi/archive/2009/05/08/269644.html'>阅读全文</a><img src ="http://www.blogjava.net/zh-qi/aggbug/269644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2009-05-08 16:47 <a href="http://www.blogjava.net/zh-qi/archive/2009/05/08/269644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse 快捷键大全</title><link>http://www.blogjava.net/zh-qi/archive/2009/04/24/267362.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Fri, 24 Apr 2009 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2009/04/24/267362.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/267362.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2009/04/24/267362.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/267362.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/267362.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">MyEclipse&nbsp;快捷键大全<br />
（</span><span style="color: #000000">1</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">M切换窗口的大小<br />
（</span><span style="color: #000000">2</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Q跳到最后一次的编辑处<br />
（</span><span style="color: #000000">3</span><span style="color: #000000">）F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show&nbsp;Tooltip&nbsp;Description。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F3跳到声明或定义的地方。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F5单步调试进入函数内部。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F6单步调试不进入函数内部，如果装了金山词霸2006则要把&#8220;取词开关&#8221;的快捷键改成其他的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F7由函数内部返回到调用处。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F8一直执行到下一个断点。<br />
（</span><span style="color: #000000">4</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Pg</span><span style="color: #000000">~</span><span style="color: #000000">对于XML文件是切换代码和图示窗口<br />
（</span><span style="color: #000000">5</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Alt</span><span style="color: #000000">+</span><span style="color: #000000">I看Java文件中变量的相关信息<br />
（</span><span style="color: #000000">6</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">PgUp对于代码窗口是打开&#8220;Show&nbsp;List&#8221;下拉框，在此下拉框里显示有最近曾打开的文件<br />
（</span><span style="color: #000000">7</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+/</span><span style="color: #000000">&nbsp;在代码窗口中是这种</span><span style="color: #008000">//</span><span style="color: #008000">~注释。</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+/</span><span style="color: #000000">&nbsp;在代码窗口中是这种</span><span style="color: #008000">/**</span><span style="color: #008000">//*~</span><span style="color: #008000">*/</span><span style="color: #000000">注释，在JSP文件窗口中是</span><span style="color: #000000">&lt;!--~--&gt;</span><span style="color: #000000">。<br />
（</span><span style="color: #000000">8</span><span style="color: #000000">）Alt</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">O(或点击工具栏中的Toggle&nbsp;Mark&nbsp;Occurrences按钮)&nbsp;当点击某个标记时可使本页面中其他地方的此标记黄色凸显，并且窗口的右边框会出现白色的方块，点击此方块会跳到此标记处。<br />
（</span><span style="color: #000000">9</span><span style="color: #000000">）右击窗口的左边框即加断点的地方选Show&nbsp;Line&nbsp;Numbers可以加行号。<br />
（</span><span style="color: #000000">10</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">I格式化激活的元素Format&nbsp;Active&nbsp;Elements。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">F格式化文件Format&nbsp;Document。<br />
（</span><span style="color: #000000">11</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">S保存当前文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">S保存所有未保存的文件。<br />
（</span><span style="color: #000000">12</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">M(先把光标放在需导入包的类名上)&nbsp;作用是加Import语句。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">O作用是缺少的Import语句被加入，多余的Import语句被删除。<br />
（</span><span style="color: #000000">13</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Space提示键入内容即Content&nbsp;Assist，此时要将输入法中Chinese(Simplified)IME</span><span style="color: #000000">-</span><span style="color: #000000">Ime</span><span style="color: #000000">/</span><span style="color: #000000">Nonlme&nbsp;Toggle的快捷键（用于切换英文和其他文字）改成其他的如改成Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">Z，同时在&#8220;Text&nbsp;Service&nbsp;and&nbsp;Input&nbsp;Languages&#8221;对话框中删掉Chinese(PRC)下面的其他中文输入法只保留紫光输入法，此时按Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">Z将在英文和紫光中文之间切换。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">Space提示信息即Context&nbsp;Information。<br />
（</span><span style="color: #000000">14</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">D删除当前行。<br />
（</span><span style="color: #000000">15</span><span style="color: #000000">）双击窗口的左边框可以加断点。<br />
（</span><span style="color: #000000">16</span><span style="color: #000000">）在.jap.或.java等文件中右键选&#8220;Campare&nbsp;With&#8221;或&#8220;Replace&nbsp;With&#8221;可以找到所有操作的历史记录。<br />
（</span><span style="color: #000000">17</span><span style="color: #000000">）在菜单中选Window－Show&nbsp;View－Navigator可调出导航功能窗。<br />
（</span><span style="color: #000000">18</span><span style="color: #000000">）Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;快速修复(最经典的快捷键,就不用多说了)&nbsp;<br />
<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Alt</span><span style="color: #000000">+</span><span style="color: #000000">&#8595;&nbsp;复制当前行到下一行(复制增加)<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Alt</span><span style="color: #000000">+</span><span style="color: #000000">&#8593;&nbsp;复制当前行到上一行(复制增加)<br />
<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">&#8595;&nbsp;当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">&#8593;&nbsp;当前行和上面一行交互位置(同上)<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">&#8592;&nbsp;前一个编辑的页面<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">&#8594;&nbsp;下一个编辑的页面(当然是针对上面那条来说了)<br />
<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">Enter&nbsp;显示当前选择资源(工程,or&nbsp;文件&nbsp;or文件)的属性<br />
<br />
Shift</span><span style="color: #000000">+</span><span style="color: #000000">Enter&nbsp;在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)<br />
Shift</span><span style="color: #000000">+</span><span style="color: #000000">Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Enter&nbsp;在当前行插入空行(原理同上条)<br />
<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Q&nbsp;定位到最后编辑的地方<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">L&nbsp;定位在某行&nbsp;(对于程序超过100的人就有福音了)<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">M&nbsp;最大化当前的Edit或View&nbsp;(再按则反之)<br />
Ctrl</span><span style="color: #000000">+/</span><span style="color: #000000">&nbsp;注释当前行,再按则取消注释<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">O&nbsp;快速显示&nbsp;OutLine<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">T&nbsp;快速显示当前类的继承结构<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">W&nbsp;关闭当前Editer<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">K&nbsp;参照选中的Word快速定位到下一个<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">E&nbsp;快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)<br />
<br />
Ctrl</span><span style="color: #000000">+/</span><span style="color: #000000">(小键盘)&nbsp;折叠当前类中的所有代码<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">&#215;(小键盘)&nbsp;展开当前类中的所有代码<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Space&nbsp;代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt</span><span style="color: #000000">+/</span><span style="color: #000000">来代替)<br />
<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">E&nbsp;显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">J&nbsp;正向增量查找(按下Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes&nbsp;line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)<br />
<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">J&nbsp;反向增量查找(和上条相同,只不过是从后往前查)<br />
<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">F4&nbsp;关闭所有打开的Editer<br />
<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">X&nbsp;把当前选中的文本全部变味小写<br />
<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">Y&nbsp;把当前选中的文本全部变为小写<br />
<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">F&nbsp;格式化当前代码<br />
<br />
Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">P&nbsp;定位到对于的匹配符(譬如{})&nbsp;(从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)<br />
<br />
下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt</span><span style="color: #000000">+</span><span style="color: #000000">Shift开头的了)<br />
<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">R&nbsp;重命名&nbsp;(是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)<br />
<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">M&nbsp;抽取方法&nbsp;(这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)<br />
<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">C&nbsp;修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)<br />
<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">L&nbsp;抽取本地变量(&nbsp;可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)<br />
<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">F&nbsp;把Class中的local变量变为field变量&nbsp;(比较实用的功能)<br />
<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">I&nbsp;合并变量(可能这样说有点不妥Inline)<br />
<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">V&nbsp;移动函数和变量(不怎么常用)<br />
<br />
Alt</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">Z&nbsp;重构的后悔药(Undo)<br />
</span></div>
<img src ="http://www.blogjava.net/zh-qi/aggbug/267362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2009-04-24 15:08 <a href="http://www.blogjava.net/zh-qi/archive/2009/04/24/267362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件夹创建,文件夹删除,文件夹拷贝</title><link>http://www.blogjava.net/zh-qi/archive/2009/04/11/264957.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Fri, 10 Apr 2009 17:21:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2009/04/11/264957.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/264957.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2009/04/11/264957.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/264957.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/264957.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;1package&nbsp;test;&nbsp;&nbsp;2&nbsp;&nbsp;3import&nbsp;java.io.BufferedReader;&nbsp;&nbsp;4import&nbsp;java.io.File;&nbsp;&nbsp;5import&nbsp;java.io.FileInputStream;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/zh-qi/archive/2009/04/11/264957.html'>阅读全文</a><img src ="http://www.blogjava.net/zh-qi/aggbug/264957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2009-04-11 01:21 <a href="http://www.blogjava.net/zh-qi/archive/2009/04/11/264957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>native2ascii工具</title><link>http://www.blogjava.net/zh-qi/archive/2008/08/20/223249.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Wed, 20 Aug 2008 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2008/08/20/223249.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/223249.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2008/08/20/223249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/223249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/223249.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">背景：在做Java开发的时候，常常会出现一些乱码，或者无法正确识别或读取的文件，比如常见的validator验证用的消息资源（properties）文件就需要进行Unicode重新编码。原因是java默认的编码方式为Unicode，而我们的计算机系统编码常常是GBK等编码。需要将系统的编码转换为java正确识别的编码问题就解决了。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">1</span><span style="color: #000000">、native2ascii简介：native2ascii是sun&nbsp;java&nbsp;sdk提供的一个工具。用来将别的文本类文件（比如</span><span style="color: #000000">*</span><span style="color: #000000">.txt,</span><span style="color: #000000">*</span><span style="color: #000000">.ini,</span><span style="color: #000000">*</span><span style="color: #000000">.properties,</span><span style="color: #000000">*</span><span style="color: #000000">.java等等）编码转为Unicode编码。为什么要进行转码，原因在于程序的国际化。Unicode编码的定义：Unicode（统一码、万国码、单一码）是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码，以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发，1994年正式公布。随着计算机工作能力的增强，Unicode也在面世以来的十多年里得到普及。（声明：Unicode编码定义来自互联网）。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">2</span><span style="color: #000000">、获取native2ascii：安装了jdk后，假如你是在windows上安装，那么在jdk的安装目录下，会有一个bin目录，其中native2ascii.exe正是。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">3</span><span style="color: #000000">、native2ascii的命令行的命名格式：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />native2ascii&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">[options]&nbsp;[inputfile&nbsp;[outputfile]]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />说明：&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">-</span><span style="color: #000000">[options]：表示命令开关，有两个选项可供选择<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">-</span><span style="color: #000000">reverse：将Unicode编码转为本地或者指定编码，不指定编码情况下，将转为本地编码。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">-</span><span style="color: #000000">encoding&nbsp;encoding_name：转换为指定编码，encoding_name为编码名称。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />[inputfile&nbsp;[outputfile]]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />inputfile：表示输入文件全名。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />outputfile：输出文件名。如果缺少此参数，将输出到控制台。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">4</span><span style="color: #000000">、最佳实践：首先将JDK的bin目录加入系统变量path。在盘下建立一个test目录，在test目录里建立一个zh.txt文件，文件内容为：&#8220;熔岩&#8221;，打开&#8220;命令行提示符&#8221;，并进入C:\test目录下。下面就可以按照说明一步一步来操作，注意观察其中编码的变化。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />A：将zh.txt转换为Unicode编码，输出文件到u.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />native2ascii&nbsp;zh.txt&nbsp;u.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />打开u.txt，内容为&#8220;\u7194\u5ca9&#8221;。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />B：将zh.txt转换为Unicode编码，输出到控制台<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />C:\test</span><span style="color: #000000">&gt;</span><span style="color: #000000">native2ascii&nbsp;zh.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />\u7194\u5ca9<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />可以看到，控制台输出了&#8220;\u7194\u5ca9&#8221;。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />C：将zh.txt转换为ISO8859</span><span style="color: #000000">-</span><span style="color: #000000">1编码，输出文件到i.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />native2ascii&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">encoding&nbsp;ISO8859</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;zh.txt&nbsp;i.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />打开i.txt文件，内容为&#8220;\u00c8\u00db\u00d1\u00d2&#8221;。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />D：将u.txt转换为本地编码，输出到文件u_nv.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />native2ascii&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">reverse&nbsp;u.txt&nbsp;u_nv.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />打开u_nv.txt文件，内容为&#8220;熔岩&#8221;。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />E：将u.txt转换为本地编码，输出到控制台<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />C:\test</span><span style="color: #000000">&gt;</span><span style="color: #000000">native2ascii&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">reverse&nbsp;u.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />熔岩<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />可以看到，控制台输出了&#8220;熔岩&#8221;。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />F：将i.txt转换为本地编码，输出到i_nv.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />native2ascii&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">reverse&nbsp;i.txt&nbsp;i_nv.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />打开i_nv.txt文件，内容为&#8220;\u00c8\u00db\u00d1\u00d2&#8221;。发现转码前后完全一样的。也就是说，等于没有转，或者说思想糊涂，对命名没有理解。。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />G：将i.txt转换为GBK编码，输出到i_gbk.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />native2ascii&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">reverse&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">encoding&nbsp;GBK&nbsp;i.txt&nbsp;i_gbk.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />打开i_gbk.txt文件，内容为&#8220;\u00c8\u00db\u00d1\u00d2&#8221;。发现转码前后完全一样的。也就是说，等于没有转，或者说思想糊涂，对命名没有理解。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />H：将u_nv.txt转码到本地编码GBK，输出到控制台<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />C:\test</span><span style="color: #000000">&gt;</span><span style="color: #000000">native2ascii&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">reverse&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">encoding&nbsp;ISO8859</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;i.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />熔岩<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />从这个结果看，目标达到到了，编码i.txt为ISO8859</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">，转为本地编码后内容为&#8220;熔岩&#8221;。从这里应该意识到，native2ascii&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">reverse命令中</span><span style="color: #000000">-</span><span style="color: #000000">encoding指定的编码为源文件的编码格式。而在native2ascii&nbsp;命令中</span><span style="color: #000000">-</span><span style="color: #000000">encoding指定的编码为（生成的）目标文件的编码格式。这一点非常的重要！切记！！<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />继续探索，新建文件12a.txt，内容&#8220;12axyz&#8221;。看看纯字母数字的编码又如何。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />I：将纯字母数字的文本文件12a.txt转换为Unicode编码<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />native2ascii&nbsp;12a.txt&nbsp;12a_nv.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />打开12a_nv.txt文件，内容为&#8220;12axyz&#8221;。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />继续测试，转为ISO8859</span><span style="color: #000000">-</span><span style="color: #000000">1编码看看<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />C:\test</span><span style="color: #000000">&gt;</span><span style="color: #000000">native2ascii&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">encoding&nbsp;ISO8859</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;12a.txt<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />12axyz<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />结果还是没有转码。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />从结果可以得出结论：对于纯数字和字母的文本类型件，转码前后的内容是一样的。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">5</span><span style="color: #000000">、总结：native2ascii是一个非常的好转码工具，并且转码是可逆的！而其真正的含义并非本地编码——</span><span style="color: #000000">&gt;</span><span style="color: #000000">转码为ASCII码，而是一个通用的文本文件编码转换工具。在做编码转换的时候有两类指定编码的情形，分别指输出文件编码和输入文件编码，具体可以看看最佳实践部分。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />实际应用中：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />比如可以这样利用native2ascii：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />native2ascii&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">encoding&nbsp;gbk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.properties&nbsp;&nbsp;&nbsp;&nbsp;application_zh_CN.properties<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;这里将根据一个临时文件temp.properties输出了application_zh_CN.properties，然后把application_zh_CN.properties中的文件内容替换这个临时文件的内容就可以了。</span></div>
引用地址:http://tmsoft.lsxy.com/index.php?load=read&amp;id=393
 <img src ="http://www.blogjava.net/zh-qi/aggbug/223249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2008-08-20 14:17 <a href="http://www.blogjava.net/zh-qi/archive/2008/08/20/223249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>List Map Set</title><link>http://www.blogjava.net/zh-qi/archive/2008/07/21/216455.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Mon, 21 Jul 2008 14:01:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2008/07/21/216455.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/216455.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2008/07/21/216455.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/216455.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/216455.html</trackback:ping><description><![CDATA[<div id="art" style="margin: 15px">
<div id="art" style="margin: 15px">
<div>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">JAVA</span><span style="font-size: 10pt; font-family: 宋体">的容器---List,Map,Set <br />
Collection<br />
├List<br />
│├LinkedList<br />
│├ArrayList<br />
│└Vector<br />
│　└Stack<br />
└Set<br />
Map<br />
├Hashtable<br />
├HashMap<br />
└WeakHashMap</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><br />
</p>
<h3><span style="font-size: 10pt; color: rgb(102,1,2); font-family: 宋体">Collection</span><span style="font-size: 10pt; font-family: 宋体"><span style="color: rgb(102,1,2)">接口</span></span></h3>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　Collection是最基本的集合接口，<span style="color: rgb(0,153,2)">一个Collection代表一组Object，即Collection的元素（Elements）。</span>一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类，Java SDK提供的类都是继承自Collection的&#8220;子接口&#8221;如List和Set。<br />
　　<span style="color: rgb(0,153,153)">所有实现Collection接口的类都必须提供两个标准的构造函数：无参数的构造函数用于创建一个空的Collection，有一个 Collection参数的构造函数用于创建一个新的Collection</span>，这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。<br />
　　如何遍历Collection中的每一个元素？不论Collection的实际类型如何，它都支持一个iterator()的方法，该方法返回一个迭代子，使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下：<br />
</span></p>
</div>
</div>
<table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1">
    <tbody>
        <tr>
            <td>
            <p style="margin: 5px; line-height: 150%"><code><span style="color: rgb(0,0,0)"><span style="color: rgb(255,0,0)">Iterator</span> it <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(255,0,0)">collection</span><span style="color: rgb(0,0,204)">.</span><span style="color: rgb(255,0,0)">iterator</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span> <span style="color: rgb(255,153,0)">// 获得一个迭代子<br />
            </span><br />
            　　　　while<span style="color: rgb(0,0,204)">(</span>it<span style="color: rgb(0,0,204)">.</span><span style="color: rgb(255,0,0)">hasNext</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">)</span> <span style="color: rgb(0,0,204)">{</span><br />
            　　　　　　Object obj <span style="color: rgb(0,0,204)">=</span> it<span style="color: rgb(0,0,204)">.</span><span style="color: rgb(255,0,0)">next</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span> <span style="color: rgb(255,153,0)">// 得到下一个元素<br />
            </span><br />
            　　　　<span style="color: rgb(0,0,204)">}</span></span></code></p>
            </td>
        </tr>
    </tbody>
</table>
<span style="font-size: 10pt; font-family: 宋体">　&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 由Collection接口派生的两个接口是List和Set。</span>
<h3><span style="font-size: 10pt; font-family: 宋体">List</span><span style="font-size: 10pt; font-family: 宋体">接口</span></h3>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　List是有序的Collection，使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引（元素在List中的位置，类似于数组下标）来访问List中的元素，这类似于Java的数组。<br />
和下面要提到的Set不同，List允许有相同的元素。<br />
　　除了具有Collection接口必备的iterator()方法外，List还提供一个listIterator()方法，返回一个 ListIterator接口，和标准的Iterator接口相比，ListIterator多了一些add()之类的方法，允许添加，删除，设定元素，还能向前或向后遍历。<br />
　　<span style="color: rgb(0,153,2)">实现List接口的常用类有LinkedList，ArrayList，Vector和Stack。</span></span></p>
<h4><span style="font-size: 10pt; font-family: 宋体">LinkedList</span><span style="font-size: 10pt; font-family: 宋体">类</span></h4>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　LinkedList实现了List接口，允许null元素。此外LinkedList提供额外的get，remove，insert方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈（stack），队列（queue）或双向队列（deque）。<br />
　　注意LinkedList没有同步方法。如果多个线程同时访问一个List，则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List：<br />
　　　　List list = Collections.synchronizedList(new LinkedList(...));</span></p>
<h4><span style="font-size: 10pt; font-family: 宋体">ArrayList</span><span style="font-size: 10pt; font-family: 宋体">类</span></h4>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　ArrayList实现了可变大小的数组。它允许所有元素，包括null。ArrayList没有同步。<br />
size，isEmpty，get，set方法运行时间为常数。但是add方法开销为分摊的常数，添加n个元素需要O(n)的时间。其他的方法运行时间为线性。<br />
　　每个ArrayList实例都有一个容量（Capacity），即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加，但是增长算法并没有定义。当需要插入大量元素时，在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。<br />
　　和LinkedList一样，ArrayList也是非同步的（unsynchronized）。</span></p>
<h4><span style="font-size: 10pt; font-family: 宋体">Vector</span><span style="font-size: 10pt; font-family: 宋体">类</span></h4>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　<span style="color: rgb(0,153,2)">Vector非常类似ArrayList，但是Vector是同步的。</span>由Vector创建的Iterator，虽然和ArrayList创建的 Iterator是同一接口，但是，因为Vector是同步的，当一个Iterator被创建而且正在被使用，另一个线程改变了Vector的状态（例如，添加或删除了一些元素），这时调用Iterator的方法时将抛出ConcurrentModificationException，因此必须捕获该异常。</span></p>
<h4><span style="font-size: 10pt; font-family: 宋体">Stack </span><span style="font-size: 10pt; font-family: 宋体">类</span></h4>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　Stack继承自Vector，实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop 方法，还有peek方法得到栈顶的元素，empty方法测试堆栈是否为空，search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。</span></p>
<h4><span style="font-size: 10pt; font-family: 宋体">Set</span><span style="font-size: 10pt; font-family: 宋体">接口</span></h4>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　<span style="color: rgb(0,153,2)">Set是一种不包含重复的元素的Collection，即任意的两个元素e1和e2都有e1.equals(e2)=false，Set最多有一个null元素。</span><br />
　　很明显，Set的构造函数有一个约束条件，传入的Collection参数不能包含重复的元素。<br />
　　请注意：必须小心操作可变对象（Mutable Object）。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。</span></p>
<h2><span style="font-size: 10pt; color: rgb(102,1,2); font-family: 宋体">Map</span><span style="font-size: 10pt; font-family: 宋体"><span style="color: rgb(102,1,2)">接口</span></span></h2>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　请注意，Map没有继承Collection接口，<span style="color: rgb(0,153,2)">Map提供key到value的映射。一个Map中不能包含相同的key，每个key只能映射一个 value。</span>Map接口提供3种集合的视图，Map的内容可以被当作一组key集合，一组value集合，或者一组key-value映射。</span></p>
<h4><span style="font-size: 10pt; font-family: 宋体">Hashtable</span><span style="font-size: 10pt; font-family: 宋体">类</span></h4>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　Hashtable继承Map接口，<span style="color: rgb(0,153,2)">实现一个key-value映射的哈希表。任何非空（non-null）的对象都可作为key或者value。</span><br />
　　添加数据使用put(key, value)，取出数据使用get(key)，这两个基本操作的时间开销为常数。<br />
Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大，这会影响像get和put这样的操作。<br />
使用Hashtable的简单示例如下，将1，2，3放到Hashtable中，他们的key分别是&#8221;one&#8221;，&#8221;two&#8221;，&#8221;three&#8221;：<br />
　　　　Hashtable numbers = new Hashtable();<br />
　　　　numbers.put(&#8220;one&#8221;, new Integer(1));<br />
　　　　numbers.put(&#8220;two&#8221;, new Integer(2));<br />
　　　　numbers.put(&#8220;three&#8221;, new Integer(3));<br />
　　要取出一个数，比如2，用相应的key：<br />
　　　　Integer n = (Integer)numbers.get(&#8220;two&#8221;);<br />
　　　　System.out.println(&#8220;two = &#8221; + n);<br />
　　由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置，因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object，如果你用自定义的类当作key的话，要相当小心，按照散列函数的定义，如果两个对象相同，即obj1.equals(obj2)=true，则它们的hashCode必须相同，但如果两个对象不同，则它们的hashCode不一定不同，如果两个不同对象的hashCode相同，这种现象称为冲突，冲突会导致操作哈希表的时间开销增大，所以尽量定义好的hashCode()方法，能加快哈希表的操作。<br />
　　如果相同的对象有不同的hashCode，对哈希表的操作会出现意想不到的结果（期待的get方法返回null），要避免这种问题，只需要牢记一条：要同时复写equals方法和hashCode方法，而不要只写其中一个。<br />
　<span style="color: rgb(0,153,2)">　Hashtable是同步的。</span></span></p>
<h4><span style="font-size: 10pt; font-family: 宋体">HashMap</span><span style="font-size: 10pt; font-family: 宋体">类</span></h4>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　<span style="color: rgb(0,153,2)">HashMap和Hashtable类似，不同之处在于HashMap是非同步的，并且允许null，即null value和null key。</span>但是将HashMap视为Collection时（values()方法可返回Collection），其迭代子操作时间开销和HashMap 的容量成比例。因此，如果迭代操作的性能相当重要的话，不要将HashMap的初始化容量设得过高，或者load factor过低。</span></p>
<h4><span style="font-size: 10pt; font-family: 宋体">WeakHashMap</span><span style="font-size: 10pt; font-family: 宋体">类</span></h4>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　<span style="color: rgb(0,153,2)">WeakHashMap是一种改进的HashMap，它对key实行&#8220;弱引用&#8221;，如果一个key不再被外部所引用，那么该key可以被GC回收。</span></span></p>
<h2><span style="font-size: 10pt; font-family: 宋体"><span style="color: rgb(102,1,2)">总结</span></span></h2>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">　　如果涉及到堆栈，队列等操作，应该考虑用List，对于需要快速插入，删除元素，应该使用LinkedList，如果需要快速随机访问元素，应该使用ArrayList。<br />
　　如果程序在单线程环境中，或者访问仅仅在一个线程中进行，考虑非同步的类，其效率较高，如果多个线程可能同时操作一个类，应该使用同步的类。<br />
　　要特别注意对哈希表的操作，作为key的对象要正确复写equals和hashCode方法。<br />
　　尽量返回接口而非实际的类型，如返回List而非ArrayList，这样如果以后需要将ArrayList换成LinkedList时，客户端代码不用改变。这就是针对抽象编程。</span></p>
</div>
<font color="#000099"><strong>原文地址</strong></font> <a href="http://blog.chinaunix.net/u/26256/showart.php?id=199898" target="_blank">http://blog.chinaunix.net/u/26256/showart.php?id=199898</a>
 <img src ="http://www.blogjava.net/zh-qi/aggbug/216455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2008-07-21 22:01 <a href="http://www.blogjava.net/zh-qi/archive/2008/07/21/216455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Criteria  查询</title><link>http://www.blogjava.net/zh-qi/archive/2008/07/21/216454.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Mon, 21 Jul 2008 13:59:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2008/07/21/216454.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/216454.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2008/07/21/216454.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/216454.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/216454.html</trackback:ping><description><![CDATA[<font size="2">Criteria对SQL进行封装，让开发人员可以用物件的方式来对资料库进行操作，例如下面的查询User表格中的所有资料：<br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria criteria = session.createCriteria(User.class);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">// 查询user所有栏位</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List users = criteria.list();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">Iterator iterator =&nbsp; users.iterator();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">System.out.println("id \t name/age");</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">while(iterator.hasNext()) {</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp;&nbsp;&nbsp; User user = (User) iterator.next(); </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp;&nbsp;&nbsp; System.out.println(user.getId() +</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " \t " + user.getName() +</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/" + user.getAge());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">}</span><br />
</font></div>
<font size="2"><br />
Hibernate实际上使用以下的SQL来查询资料库：<br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">select this_.id as id0_, this_.name as name0_0_, this_.age as age0_0_ from user this_</span><br />
</font></div>
<font size="2"><br />
Criteria实际上只是个容器，如果想要设定查询条件，则要使用add()方法加入Restrictions的条件限制，例如查询age大于20且小于40的资料：<br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria criteria = session.createCriteria(User.class);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.add(Restrictions.gt("age", new Integer(20)));</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.add(Restrictions.lt("age", new Integer(40)));</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List users = criteria.list();</span><br />
</font></div>
<font size="2"><br />
您也可以使用逻辑组合来进行查询，例如结合age等于（eq）20或（or）age为空（isNull）的条件： <br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria criteria = session.createCriteria(User.class);</span><br style="font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.add(Restrictions.or( </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Restrictions.eq("age", new Integer(20)), </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Restrictions.isNull("age") </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;)); </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List users = criteria.list();</span><br />
</font></div>
<font size="2"><br />
也可以使用sqlRestriction()方法来提供SQL语法作限定查询，例如查询name以cater开头的资料：<br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria criteria = session.createCriteria(User.class);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.add(Restrictions.sqlRestriction("{alias}.name LIKE (?)", "cater%", Hibernate.STRING));</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List users = criteria.list();</span><br />
</font></div>
<font size="2"><br />
其中alias将被替换为与User类别相关的名称，而?将被替换为cater%，也就是第二个参数所提供的值，在SQL撰写时，不必再写WHERE，如果有多个查询条件，例如BETWEEN子句的查询，则可以如下：<br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria criteria = session.createCriteria(User.class);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">Integer[] ages = {new Integer(20), new Integer(40)};</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.add(Restrictions.sqlRestriction("{alias}.age BETWEEN (?) AND (?)", ages, types));</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List users = criteria.list();</span><br />
</font></div>
<font size="2"><br />
Restrictions的几个常用限定查询方法如下表所示：<br />
</font>
<table style="width: 100%; text-align: left" cellspacing="2" cellpadding="2" border="1">
    <tbody>
        <tr>
            <td style="background-color: rgb(204,204,204)"><font size="2">方法</font></td>
            <td style="background-color: rgb(204,204,204)"><font size="2">说明</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.eq</font></td>
            <td><font size="2">等于</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.allEq</font></td>
            <td><font size="2">使用Map，使用key/value进行多个等于的比对</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.gt</font></td>
            <td><font size="2">大于 &gt;</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.ge</font></td>
            <td><font size="2">大于等于 &gt;=</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.lt</font></td>
            <td><font size="2">小于 &lt;</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.le</font></td>
            <td><font size="2">小于等于 &lt;=</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.between</font></td>
            <td><font size="2">对应SQL的BETWEEN子句</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.like</font></td>
            <td><font size="2">对应SQL的LIKE子句</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.in</font></td>
            <td><font size="2">对应SQL的in子句</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.and</font></td>
            <td><font size="2">and关系</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.or</font></td>
            <td><font size="2">or关系</font></td>
        </tr>
        <tr>
            <td><font size="2">Restrictions.sqlRestriction</font></td>
            <td><font size="2">SQL限定查询</font></td>
        </tr>
    </tbody>
</table>
<font size="2"><br />
*******************************************************************************************************************************************<br />
<font size="2">您可以使用Criteria进行查询，并使用Order对结果进行排序，例如使用Oder.asc()由小到大排序（反之则使用desc()）：<br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria criteria = session.createCriteria(User.class);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.addOrder(Order.asc("age"));</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List users = criteria.list();</span><br />
</font></div>
<font size="2"><br />
setMaxResults()方法可以限定查询回来的笔数，如果配合setFirstResult()设定传回查询结果第一笔资料的位置，就可以实现简单的分页，例如传回第51笔之后的50笔资料（如果有的话）： <br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria criteria = session.createCriteria(User.class); </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.setFirstResult(51); </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.setMaxResult(50); </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List users = criteria.list();</span><br />
</font></div>
<font size="2"><br />
您可以对查询结果进行统计动作，使用Projections的avg()、rowCount()、count()、max()、min()、 countDistinct()等方法，例如对查询结果的"age"作平均：<br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria criteria = session.createCriteria(User.class);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.setProjection(Projections.avg("age"));</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List users = criteria.list();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">Iterator iterator =&nbsp; users.iterator();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">while(iterator.hasNext()) {</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp; &nbsp; System.out.println(iterator.next()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">}</span><br />
</font></div>
<font size="2"><br />
还可以配合Projections的groupProperty()来对结果进行分组，例如以"age"进行分组，也就是如果资料中"age"如果有 20、20、25、30，则以下会显示20、25、30：<br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria criteria = session.createCriteria(User.class);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.setProjection(Projections.groupProperty("age"));</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List users = criteria.list();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">Iterator iterator =&nbsp; users.iterator();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">while(iterator.hasNext()) {</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp; &nbsp; System.out.println(iterator.next()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">}</span><br />
</font></div>
<font size="2"><br />
如果想结合统计与分组功能，则可以使用ProjectionList，例如下面的程式会计算每个年龄各有多少个人：<br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">ProjectionList projectionList = Projections.projectionList();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">projectionList.add(Projections.groupProperty("age"));</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">projectionList.add(Projections.rowCount());</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria criteria = session.createCriteria(User.class);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.setProjection(projectionList);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List users = criteria.list();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">Iterator iterator =&nbsp; users.iterator();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">while(iterator.hasNext()) {</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp; &nbsp; Object[] o = (Object[]) iterator.next();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(o[0] + "\t" + o[1]);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">}</span><br />
</font></div>
<font size="2"><br />
如果有一个已知的物件，则可以根据这个物件作为查询的依据，看看是否有属性与之类似的物件，例如：<br />
</font>
<div style="margin-left: 40px"><font size="2"><span style="font-weight: bold; font-family: Courier New,Courier,monospace">User user = new User();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">user.setAge(new Integer(30));<br />
<br style="font-weight: bold" />
Criteria criteria = session.createCriteria(User.class);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">criteria.add(Example.create(user));<br />
<br style="font-weight: bold" />
List users = criteria.list();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">Iterator iterator =&nbsp; users.iterator();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">System.out.println("id \t name/age");</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">while(iterator.hasNext()) {</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp; &nbsp; User ur = (User) iterator.next();</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp; &nbsp; System.out.println(ur.getId() +</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; " \t " + ur.getName() +</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;"/" + ur.getAge());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">}</span><br />
</font></div>
<font size="2"><br />
在这个例子中，user物件中有已知的属性"age"为30，使用Example会自动过滤掉user的空属性，并以之作为查询的依据，也就是找出 "age"同为30的资料。<br />
<br />
Criteria可以进行复合查询，即在原有的查询基础上再进行查询，例如在Room对User的一对多关联中，在查询出所有的Room资料之后，希望再查询users中"age"为30的user资料：<br />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria roomCriteria = session.createCriteria(Room.class);</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">Criteria userCriteria = roomCriteria.createCriteria("users");</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">userCriteria.add(Restrictions.eq("age", new Integer(30)));</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">List rooms = roomCriteria.list(); // 只列出users属性中有user之"age"为30的Room<br />
Iterator iterator = rooms.iterator();<br />
<br />
<font color="#000099"><strong>原文地址</strong></font> <a href="http://www.caterpillar.onlyfun.net/GossipCN/HibernateGossip/CriteriaAdvanced.html" target="_blank">http://www.caterpillar.onlyfun.net/GossipCN/HibernateGossip/CriteriaAdvanced.html</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.caterpillar.onlyfun.net/GossipCN/HibernateGossip/CriteriaBasic.html" target="_blank">http://www.caterpillar.onlyfun.net/GossipCN/HibernateGossip/CriteriaBasic.html</a></span></font></font>
<img src ="http://www.blogjava.net/zh-qi/aggbug/216454.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2008-07-21 21:59 <a href="http://www.blogjava.net/zh-qi/archive/2008/07/21/216454.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Class.forName 介绍</title><link>http://www.blogjava.net/zh-qi/archive/2008/07/21/216450.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Mon, 21 Jul 2008 13:38:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2008/07/21/216450.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/216450.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2008/07/21/216450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/216450.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/216450.html</trackback:ping><description><![CDATA[<table style="border-collapse: collapse" cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td>
            <div id="art" style="margin: 15px">
            <p><font size="2">Class.forName(xxx.xx.xx)&nbsp;返回的是一个类</font></p>
            <p><font size="2">首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new&nbsp;不一样，要分清楚)。&nbsp;<br />
            <br />
            至于什么时候用，你可以考虑一下这个问题，给你一个字符串变量，它代表一个类的包名和类名，你怎么实例化它？只有你提到的这个方法了，不过要再加一点。&nbsp;<br />
            A&nbsp;a&nbsp;=&nbsp;(A)Class.forName("pacage.A").newInstance();&nbsp;<br />
            这和你&nbsp;<br />
            A&nbsp;a&nbsp;=&nbsp;new&nbsp;A()；&nbsp;<br />
            是一样的效果。&nbsp;<br />
            <br />
            关于补充的问题&nbsp;<br />
            答案是肯定的，<span style="color: rgb(0,102,102)">jvm会执行静态代码段，你要记住一个概念，静态代码是和class绑定的，class装载成功就表示执行了你的静态代码了。而且以后不会再走这段静态代码了。</span></font> </p>
            <p><font size="2">Class.forName(xxx.xx.xx)&nbsp;返回的是一个类&nbsp;<br />
            Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类，也就是说JVM会执行该类的静态代码段</font></p>
            <p><font size="2">动态加载和创建Class&nbsp;对象，比如想根据用户输入的字符串来创建对象&nbsp;<br />
            String&nbsp;str&nbsp;=&nbsp;用户输入的字符串&nbsp;<br />
            Class&nbsp;t&nbsp;=&nbsp;Class.forName(str);&nbsp;<br />
            t.newInstance();</font></p>
            <font size="2">&nbsp;在初始化一个类，生成一个实例的时候，newInstance()方法和new关键字除了一个是方法，一个是关键字外，最主要有什么区别？它们的区别在于创建对象的方式不一样，前者是使用类加载机制，后者是创建一个新类。那么为什么会有两种创建对象方式？这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。&nbsp;<br />
            <br />
            Java中工厂模式经常使用newInstance()方法来创建对象，因此从为什么要使用工厂模式上可以找到具体答案。&nbsp;例如：&nbsp;<br />
            class&nbsp;c&nbsp;=&nbsp;Class.forName(&#8220;Example&#8221;);&nbsp;<br />
            factory&nbsp;=&nbsp;(ExampleInterface)c.newInstance();&nbsp;<br />
            <br />
            其中ExampleInterface是Example的接口，可以写成如下形式：&nbsp;<br />
            String&nbsp;className&nbsp;=&nbsp;"Example";&nbsp;<br />
            class&nbsp;c&nbsp;=&nbsp;Class.forName(className);&nbsp;<br />
            factory&nbsp;=&nbsp;(ExampleInterface)c.newInstance();&nbsp;<br />
            <br />
            进一步可以写成如下形式：&nbsp;<br />
            String&nbsp;className&nbsp;=&nbsp;readfromXMlConfig;//从xml&nbsp;配置文件中获得字符串&nbsp;<br />
            class&nbsp;c&nbsp;=&nbsp;Class.forName(className);&nbsp;<br />
            factory&nbsp;=&nbsp;(ExampleInterface)c.newInstance();&nbsp;<br />
            <br />
            上面代码已经不存在Example的类名称，它的优点是，无论Example类怎么变化，上述代码不变，甚至可以更换Example的兄弟类Example2&nbsp;,&nbsp;Example3&nbsp;,&nbsp;Example4&#8230;&#8230;，只要他们继承ExampleInterface就可以。&nbsp;<br />
            <br />
            从JVM的角度看，我们使用关键字<span style="color: rgb(0,102,102)">new创建一个类的时候，这个类可以没有被加载</span>。但是使用newInstance()方法的时候，就必须保证：<span style="color: rgb(0,102,102)">1、这个类已经加载；2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的，这个静态方法调用了启动类加载器</span>，即加载 java&nbsp;API的那个加载器。&nbsp;<br />
            <br />
            现在可以看出，newInstance()实际上是把new这个方式分解为两步，即首先调用Class加载方法加载某个类，然后实例化。&nbsp;这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性，提供给了一种降耦的手段。&nbsp;<br />
            <br />
            最后用最简单的描述来区分new关键字和newInstance()方法的区别：&nbsp;<br />
            newInstance:&nbsp;弱类型。低效率。只能调用无参构造。&nbsp;<br />
            new:&nbsp;强类型。相对高效。能调用任何public构造。<br />
            <br />
            下面内容转自<br />
            http://blog.csdn.net/iceman1952/archive/2007/03/07/1523025.aspx<br />
            介绍的是 forName() 和 ClassLoader 的 loadClass 方法。<br />
            现在终于知道了为什么</font><font size="2"> forName()是会执行 static 语句，因为</font><font size="2">默认情况它<span style="color: rgb(0,102,102)">总是初始化这个被装载的类。</span></font>
            <p><font size="2">关于forName()方法<br />
            这个方法总是返回要加载的类的Class类的实例<br />
            1、forName(String className)单参数时, initialize=true<br />
            &nbsp;&nbsp;&nbsp; a.总是使用当前类装载器(也就是装载执行forName()请求的类&nbsp; 的类装载器)<br />
            &nbsp;&nbsp;&nbsp; b.总是初始化这个被装载的类(当然也包括：装载、连接、<span style="color: rgb(0,102,102)">初始化</span>)<br />
            2、forName(String className, boolean initialize, ClassLoader loader)<br />
            &nbsp;&nbsp;&nbsp; a.loader指定装载参数类所用的类装载器，如果null则用bootstrp装载器。<br />
            &nbsp;&nbsp;&nbsp; b.initialize=true时，肯定连接，而且初始化了；<br />
            &nbsp;&nbsp;&nbsp; c.false时，绝对不会初始化，但是可能被连接了，但是这里有个例外，如果在调用这个forName()前，已经被初始化了，那么返回的类型也肯定是被初始化的(当然，这里也暗含着：被同一个loader所装载的，而且这个类被初始化了)</font></p>
            <p><font size="2">关于用户自定义的类装载器的loadClass()方法<br />
            1、loadClass(String name)单参数时, resolve=false<br />
            &nbsp;&nbsp;&nbsp; a.如果这个类已经被这个类装载器所装载，那么，返回这个已经被装载的类型的Class的实例，否则，就用这个自定义的类装载器来装载这个class，这时不知道是否被连接。绝对不会被初始化<br />
            &nbsp;&nbsp;&nbsp; b.这时唯一可以保证的是，这个类被装载了。但是不知道这个类是不是被连接和初始化了<br />
            2、loadClass(String name, boolean resolve)<br />
            &nbsp;&nbsp;&nbsp; a.resolve=true时，则保证已经装载，而且已经连接了。resolve=falses时，则仅仅是去装载这个类，不关心是否连接了，所以此时可能被连接了，也可能没有被连接</font></p>
            <br />
            </div>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin: 5px; line-height: 150%"></p>
</td>
</tr>
<tr>
    <td height="25">&nbsp;<font color="#000099"><strong>原文地址</strong></font> <a href="http://hi.baidu.com/zhengguobest/blog/item/13adc2fcdd422082b901a086.html" target="_blank">http://hi.baidu.com/zhengguobest/blog/item/13adc2fcdd422082b901a086.html</a></td>
</tr>
 <img src ="http://www.blogjava.net/zh-qi/aggbug/216450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2008-07-21 21:38 <a href="http://www.blogjava.net/zh-qi/archive/2008/07/21/216450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把数字转换成中文货币表示</title><link>http://www.blogjava.net/zh-qi/archive/2008/07/10/214096.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Thu, 10 Jul 2008 11:43:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2008/07/10/214096.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/214096.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2008/07/10/214096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/214096.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/214096.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最近在做开发的时候，有一部分功能要实现把数字转换成中文货币表示并显示给客户端，想了好久不知道如何写，到google上搜了一下，结果这方面的资料还比较多，看了一下别人写的，感觉很不错，就把它复制过来，根据实际需要改了一下，已经测试成功了．代码如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.math.BigDecimal;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_74_2391_Open_Image" onclick="this.style.display='none'; Codehighlighter1_74_2391_Open_Text.style.display='none'; Codehighlighter1_74_2391_Closed_Image.style.display='inline'; Codehighlighter1_74_2391_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_74_2391_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_74_2391_Closed_Text.style.display='none'; Codehighlighter1_74_2391_Open_Image.style.display='inline'; Codehighlighter1_74_2391_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;StrangeCurrency&nbsp;</span><span id="Codehighlighter1_74_2391_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_74_2391_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_76_111_Open_Image" onclick="this.style.display='none'; Codehighlighter1_76_111_Open_Text.style.display='none'; Codehighlighter1_76_111_Closed_Image.style.display='inline'; Codehighlighter1_76_111_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_76_111_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_76_111_Closed_Text.style.display='none'; Codehighlighter1_76_111_Open_Image.style.display='inline'; Codehighlighter1_76_111_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_76_111_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_76_111_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />*&nbsp;Description&nbsp;将数字金额转换为中文金额<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;DoNumberCurrencyToChineseCurrency(<br />
<img id="Codehighlighter1_197_2388_Open_Image" onclick="this.style.display='none'; Codehighlighter1_197_2388_Open_Text.style.display='none'; Codehighlighter1_197_2388_Closed_Image.style.display='inline'; Codehighlighter1_197_2388_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_197_2388_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_197_2388_Closed_Text.style.display='none'; Codehighlighter1_197_2388_Open_Image.style.display='inline'; Codehighlighter1_197_2388_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;bigdMoneyNumber)&nbsp;</span><span id="Codehighlighter1_197_2388_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_197_2388_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;中文金额单位数组</span><span style="color: #008000"><br />
<img id="Codehighlighter1_244_320_Open_Image" onclick="this.style.display='none'; Codehighlighter1_244_320_Open_Text.style.display='none'; Codehighlighter1_244_320_Closed_Image.style.display='inline'; Codehighlighter1_244_320_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_244_320_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_244_320_Closed_Text.style.display='none'; Codehighlighter1_244_320_Open_Image.style.display='inline'; Codehighlighter1_244_320_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;String[]&nbsp;straChineseUnit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_244_320_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_244_320_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">分</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">角</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">圆</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">拾</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">佰</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">仟</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">万</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">拾</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">佰</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">仟</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">亿</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">拾</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">佰</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">仟</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;中文数字字符数组</span><span style="color: #008000"><br />
<img id="Codehighlighter1_370_426_Open_Image" onclick="this.style.display='none'; Codehighlighter1_370_426_Open_Text.style.display='none'; Codehighlighter1_370_426_Closed_Image.style.display='inline'; Codehighlighter1_370_426_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_370_426_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_370_426_Closed_Text.style.display='none'; Codehighlighter1_370_426_Open_Image.style.display='inline'; Codehighlighter1_370_426_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;String[]&nbsp;straChineseNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_370_426_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_370_426_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">零</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">壹</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">贰</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">叁</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">肆</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">伍</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">陆</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">柒</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">捌</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">玖</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;String&nbsp;strChineseCurrency&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;零数位标记</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;bZero&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;中文金额单位下标</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;ChineseUnitIndex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;DoPrintMessage("Calling&nbsp;Method&nbsp;DoNumberCurrencyToChineseCurrency");</span><span style="color: #008000"><br />
<img id="Codehighlighter1_626_2121_Open_Image" onclick="this.style.display='none'; Codehighlighter1_626_2121_Open_Text.style.display='none'; Codehighlighter1_626_2121_Closed_Image.style.display='inline'; Codehighlighter1_626_2121_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_626_2121_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_626_2121_Closed_Text.style.display='none'; Codehighlighter1_626_2121_Open_Image.style.display='inline'; Codehighlighter1_626_2121_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_626_2121_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_626_2121_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(bigdMoneyNumber&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">零圆整</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;处理小数部分，四舍五入</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;doubMoneyNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Math.round(bigdMoneyNumber&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;是否负数</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;bNegative&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;doubMoneyNumber&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;取绝对值</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;doubMoneyNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Math.abs(doubMoneyNumber);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;循环处理转换操作</span><span style="color: #008000"><br />
<img id="Codehighlighter1_926_2032_Open_Image" onclick="this.style.display='none'; Codehighlighter1_926_2032_Open_Text.style.display='none'; Codehighlighter1_926_2032_Closed_Image.style.display='inline'; Codehighlighter1_926_2032_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_926_2032_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_926_2032_Closed_Text.style.display='none'; Codehighlighter1_926_2032_Open_Image.style.display='inline'; Codehighlighter1_926_2032_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(doubMoneyNumber&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_926_2032_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_926_2032_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;整的处理(无小数位)</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ChineseUnitIndex&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;strChineseCurrency.length()&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strChineseCurrency&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strChineseCurrency&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">整</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;非零数位的处理</span><span style="color: #008000"><br />
<img id="Codehighlighter1_1119_1294_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1119_1294_Open_Text.style.display='none'; Codehighlighter1_1119_1294_Closed_Image.style.display='inline'; Codehighlighter1_1119_1294_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1119_1294_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1119_1294_Closed_Text.style.display='none'; Codehighlighter1_1119_1294_Open_Image.style.display='inline'; Codehighlighter1_1119_1294_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(doubMoneyNumber&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1119_1294_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1119_1294_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strChineseCurrency&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;straChineseNumber[(</span><span style="color: #0000ff">int</span><span style="color: #000000">)&nbsp;doubMoneyNumber&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;straChineseUnit[ChineseUnitIndex]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;strChineseCurrency;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bZero&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;零数位的处理</span><span style="color: #008000"><br />
<img id="Codehighlighter1_1321_1944_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1321_1944_Open_Text.style.display='none'; Codehighlighter1_1321_1944_Closed_Image.style.display='inline'; Codehighlighter1_1321_1944_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1321_1944_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1321_1944_Closed_Text.style.display='none'; Codehighlighter1_1321_1944_Open_Image.style.display='inline'; Codehighlighter1_1321_1944_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1321_1944_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1321_1944_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;元的处理(个位)</span><span style="color: #008000"><br />
<img id="Codehighlighter1_1374_1558_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1374_1558_Open_Text.style.display='none'; Codehighlighter1_1374_1558_Closed_Image.style.display='inline'; Codehighlighter1_1374_1558_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1374_1558_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1374_1558_Closed_Text.style.display='none'; Codehighlighter1_1374_1558_Open_Image.style.display='inline'; Codehighlighter1_1374_1558_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ChineseUnitIndex&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1374_1558_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1374_1558_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;段中有数字</span><span style="color: #008000"><br />
<img id="Codehighlighter1_1424_1550_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1424_1550_Open_Text.style.display='none'; Codehighlighter1_1424_1550_Closed_Image.style.display='inline'; Codehighlighter1_1424_1550_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1424_1550_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1424_1550_Closed_Text.style.display='none'; Codehighlighter1_1424_1550_Open_Image.style.display='inline'; Codehighlighter1_1424_1550_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(doubMoneyNumber&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1424_1550_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1424_1550_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strChineseCurrency&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;straChineseUnit[ChineseUnitIndex]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;strChineseCurrency;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bZero&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;万、亿数位的处理</span><span style="color: #008000"><br />
<img id="Codehighlighter1_1642_1800_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1642_1800_Open_Text.style.display='none'; Codehighlighter1_1642_1800_Closed_Image.style.display='inline'; Codehighlighter1_1642_1800_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1642_1800_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1642_1800_Closed_Text.style.display='none'; Codehighlighter1_1642_1800_Open_Image.style.display='inline'; Codehighlighter1_1642_1800_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ChineseUnitIndex&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">6</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;ChineseUnitIndex&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1642_1800_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1642_1800_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;段中有数字</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(doubMoneyNumber&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1000</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strChineseCurrency&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;straChineseUnit[ChineseUnitIndex]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;strChineseCurrency;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;前一数位非零的处理</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">bZero)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strChineseCurrency&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;straChineseNumber[</span><span style="color: #000000">0</span><span style="color: #000000">]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;strChineseCurrency;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bZero&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doubMoneyNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Math.floor(doubMoneyNumber&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChineseUnitIndex</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;负数的处理</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(bNegative)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strChineseCurrency&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">负</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;strChineseCurrency;<br />
<img id="Codehighlighter1_2143_2356_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2143_2356_Open_Text.style.display='none'; Codehighlighter1_2143_2356_Closed_Image.style.display='inline'; Codehighlighter1_2143_2356_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2143_2356_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2143_2356_Closed_Text.style.display='none'; Codehighlighter1_2143_2356_Open_Image.style.display='inline'; Codehighlighter1_2143_2356_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</span><span id="Codehighlighter1_2143_2356_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2143_2356_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;DoPrintMessage("Exception&nbsp;Reason&nbsp;:&nbsp;Call&nbsp;Method<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;DoNumberCurrencyToChineseCurrency&nbsp;Error");<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;DoPrintMessage("Exception&nbsp;Message&nbsp;:&nbsp;"&nbsp;+&nbsp;e.getMessage());</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;strChineseCurrency;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span></div>
<br />
<p><font size="2">/**<br />
* @param args<br />
*/<br />
//测试代码<br />
public static void main(String[] args) {<br />
&nbsp;&nbsp; double rmb=23434.89;<br />
&nbsp;&nbsp; StrangeCurrency sc=new StrangeCurrency();<br />
&nbsp;&nbsp; String s=sc.DoNumberCurrencyToChineseCurrency(rmb);<br />
&nbsp;&nbsp;&nbsp; System.out.println(s);<br />
&nbsp;&nbsp; }</font></p>
<p><font size="2">}<br />
</font></p>
</span>
<img src ="http://www.blogjava.net/zh-qi/aggbug/214096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2008-07-10 19:43 <a href="http://www.blogjava.net/zh-qi/archive/2008/07/10/214096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP隐藏对象</title><link>http://www.blogjava.net/zh-qi/archive/2008/07/03/212442.html</link><dc:creator>笑看风云</dc:creator><author>笑看风云</author><pubDate>Thu, 03 Jul 2008 13:51:00 GMT</pubDate><guid>http://www.blogjava.net/zh-qi/archive/2008/07/03/212442.html</guid><wfw:comment>http://www.blogjava.net/zh-qi/comments/212442.html</wfw:comment><comments>http://www.blogjava.net/zh-qi/archive/2008/07/03/212442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zh-qi/comments/commentRss/212442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zh-qi/services/trackbacks/212442.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;">
<span style="font-size: 36pt;"><span style="font-size: 14pt;"><span style="font-size: 12pt;"><span style="font-size: 8pt;"><span style="font-size: 10pt;"><span style="font-family: 宋体;"><span style="font-family: Courier;"><font size="3"><span style="font-size: 10pt;"><span style="font-size: 8pt;"><span style="font-size: 10pt;">一、page 对象<br />
&nbsp;&nbsp;&nbsp;&nbsp; page对象代表JSP本身，更准确地说它代表JSP被转译后的Servlet，它可以调用Servlet类所定义的方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
二、config 对象<br />
&nbsp;&nbsp;&nbsp;&nbsp; config 对象里存放着一些Servlet 初始的数据结构。<br />
&nbsp;&nbsp;&nbsp;&nbsp; config 对象实现于javax.servlet.ServletConfig 接口，它共有下列四种方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getInitParameter(name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public java.util.Enumeration getInitParameterNames( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public ServletContext getServletContext( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Sring getServletName( )<br />
<br />
三、request 对象<br />
&nbsp;&nbsp;&nbsp;&nbsp; request 对象包含所有请求的信息，如：请求的来源、标头、cookies和请求相关的参数值等等。<br />
&nbsp;&nbsp;&nbsp;&nbsp; request 对象实现javax.servlet.http.HttpServletRequest接口的，所提供的方法可以将它分为四大类：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.储存和取得属性方法；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void setAttribute(String name, Object value)&nbsp;&nbsp;&nbsp; 设定name属性的值为value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enumeration getAttributeNamesInScope(int scope)&nbsp;&nbsp;&nbsp; 取得所有scope 范围的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object getAttribute(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得name 属性的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void removeAttribute(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移除name 属性的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.取得请求参数的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getParameter(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得name 的参数值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enumeration getParameterNames( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得所有的参数名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String [] getParameterValues(String name)&nbsp;&nbsp;&nbsp;&nbsp; 取得所有name 的参数值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map getParameterMap( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得一个要求参数的Map<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.能够取得请求HTTP 标头的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getHeader(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得name 的标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enumeration getHeaderNames()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得所有的标头名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enumeration getHeaders(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得所有name 的标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int getIntHeader(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得整数类型name 的标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long getDateHeader(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得日期类型name 的标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cookie [] getCookies( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得与请求有关的cookies<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.其他的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getContextPath( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得Context 路径(即站台名称)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getMethod( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得HTTP 的方法(GET、POST)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getProtocol( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得使用的协议 (HTTP/1.1、HTTP/1.0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getQueryString( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得请求的参数字符串，不过，HTTP的方法必须为GET<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getRequestedSessionId( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得用户端的Session ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getRequestURI( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得请求的URL，但是不包括请求的参数字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getRemoteAddr( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得用户的IP 地址<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getRemoteHost( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得用户的主机名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int getRemotePort( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得用户的主机端口<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getRemoteUser( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得用户的名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void etCharacterEncoding(String encoding)&nbsp; 设定编码格式，用来解决窗体传递中文的问题<br />
<br />
四、response 对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response 对象主要将JSP 处理数据后的结果传回到客户端。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response 对象是实现javax.servlet.http.HttpServletResponse 接口。response对象所提供的方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.设定表头的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void addCookie(Cookie cookie)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新增cookie<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void addDateHeader(String name, long date)&nbsp;&nbsp;&nbsp;&nbsp; 新增long类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void addHeader(String name, String value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新增String类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void addIntHeader(String name, int value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新增int类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void setDateHeader(String name, long date)&nbsp;&nbsp;&nbsp;&nbsp; 指定long类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void setHeader(String name, String value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定String类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void setIntHeader(String name, int value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定int类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.设定响应状态码的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void sendError(int sc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 传送状态码(status code)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void sendError(int sc, String msg)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 传送状态码和错误信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void setStatus(int sc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设定状态码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.用来URL 重写(rewriting)的方法&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String encodeRedirectURL(String url)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对使用sendRedirect( )方法的URL予以编码<br />
<br />
五、out 对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out 对象能把结果输出到网页上。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out主要是用来控制管理输出的缓冲区(buffer)和输出流(output stream)。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void clear( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 清除输出缓冲区的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void clearBuffer( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 清除输出缓冲区的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void close( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭输出流，清除所有的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int getBufferSize( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得目前缓冲区的大小(KB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int getRemaining( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得目前使用后还剩下的缓冲区大小(KB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean isAutoFlush( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传true表示缓冲区满时会自动清除；false表示不会自动清除并且产生异常处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
六、session 对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session对象表示目前个别用户的会话(session)状况。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session对象实现javax.servlet.http.HttpSession接口，HttpSession接口所提供的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long getCreationTime()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得session产生的时间，单位是毫秒<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getId()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得session 的ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long getLastAccessedTime()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得用户最后通过这个session送出请求的时间<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long getMaxInactiveInterval()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得最大session不活动的时间，若超过这时间，session 将会失效<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void invalidate()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取消session 对象，并将对象存放的内容完全抛弃<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean isNew()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 判断session 是否为"新"的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void setMaxInactiveInterval(int interval) 设定最大session不活动的时间，若超过这时间，session 将会失效<br />
<br />
七、application对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; application对象最常被使用在存取环境的信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为环境的信息通常都储存在ServletContext中，所以常利用application对象来存取ServletContext中的信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; application 对象实现javax.servlet.ServletContext 接口，ServletContext接口容器所提供的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int getMajorVersion( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得Container主要的Servlet API版本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int getMinorVersion( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得Container次要的Servlet API 版本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getServerInfo( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得Container的名称和版本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getMimeType(String file)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得指定文件的MIME 类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletContext getContext(String uripath)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得指定Local URL的Application context<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getRealPath(String path)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得本地端path的绝对路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void log(String message)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将信息写入log文件中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void log(String message, Throwable throwable)&nbsp;&nbsp; 将stack trace 所产生的异常信息写入log文件中<br />
<br />
八、pageContext对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageContext对象能够存取其他隐含对象。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.pageContext对象存取其他隐含对象属性的方法，此时需要指定范围的参数。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object getAttribute(String name, int scope)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enumeration getAttributeNamesInScope(int scope)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void removeAttribute(String name, int scope)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void setAttribute(String name, Object value, int scope)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 范围参数有四个，分别代表四种范围：PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.PageContext对象取得其他隐含对象的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exception getException( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传目前网页的异常，不过此网页要为error page，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JspWriter getOut( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传目前网页的输出流，例如：out <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object getPage( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传目前网页的Servlet 实体(instance)，例如：page<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletRequest getRequest( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传目前网页的请求，例如：request<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletResponse getResponse( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传目前网页的响应，例如：response<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletConfig getServletConfig( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传目前此网页的ServletConfig 对象，例如：config<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletContext getServletContext( )&nbsp;&nbsp;&nbsp;&nbsp; 回传目前此网页的执行环境(context)，例如：application<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpSession getSession( )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传和目前网页有联系的会话(session)，例如：session<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.PageContext对象提供取得属性的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object getAttribute(String name, int scope)&nbsp; 回传name 属性，范围为scope的属性对象，回传类型为Object<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enumeration getAttributeNamesInScope(int scope) 回传所有属性范围为scope 的属性名称，回传类型为Enumeration<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int getAttributesScope(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传属性名称为name 的属性范围<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void removeAttribute(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移除属性名称为name 的属性对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void removeAttribute(String name, int scope) 移除属性名称为name，范围为scope 的属性对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void setAttribute(String name,Object value,int scope)指定属性对象的名称为name、值为value、范围为scope<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object findAttribute(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 寻找在所有范围中属性名称为name 的属性对象<br />
<br />
九、exception对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若要使用exception 对象时，必须在page 指令中设定。&lt;%@ page isErrorPage="true" %&gt;才能使用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exception提供的三个方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getMessage( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getLocalizedMessage( )、<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printStackTrace(new java.io.PrintWriter(out)) </span></span></span></font>
</span></span></span></span></span></span></span>
</span>
<img src ="http://www.blogjava.net/zh-qi/aggbug/212442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zh-qi/" target="_blank">笑看风云</a> 2008-07-03 21:51 <a href="http://www.blogjava.net/zh-qi/archive/2008/07/03/212442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>