??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩一区中文字幕,国产精品久久久久久一区二区 ,亚洲一区国产视频http://www.aygfsteel.com/zh-qi/category/32742.html一切从头开?/description>zh-cnWed, 23 Sep 2009 01:07:17 GMTWed, 23 Sep 2009 01:07:17 GMT60如何制作 MyEclipse 5.5/6.0 l色?/title><link>http://www.aygfsteel.com/zh-qi/archive/2009/09/08/294246.html</link><dc:creator>W看风云</dc:creator><author>W看风云</author><pubDate>Tue, 08 Sep 2009 01:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/zh-qi/archive/2009/09/08/294246.html</guid><wfw:comment>http://www.aygfsteel.com/zh-qi/comments/294246.html</wfw:comment><comments>http://www.aygfsteel.com/zh-qi/archive/2009/09/08/294246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zh-qi/comments/commentRss/294246.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zh-qi/services/trackbacks/294246.html</trackback:ping><description><![CDATA[<p>另一U解x法是: <a class="entrylistItemTitle" id="CategoryEntryList1_EntryStoryList_Entries_ctl02_TitleUrl" href="http://www.aygfsteel.com/beansoft/archive/2006/11/27/83884.html"><strong><font color="#1a8bc8">Portable Java IDE 2.1 打包下蝲(12.7.2006更新)</font></strong></a>   <br /> <br /> 我们知道 Eclipse 工具的最大缺? 是安装插g极其费劲, W一是需要手工复制安? W二呢如果插件版本和 Eclipse 版本不配? Ҏq不了, W三呢如果插件Aq依赖于插gB(?Eclipse 官方|站众多插g的下载和安装, 例如 Visual Editor), 你还得去再把插gB下蝲一? 所以网上出C众多 Eclipse 插g的管理方? 例如 Link 目录安装? EasyEclipse ?<a title="EasyEclipse Free, open source, easy-to-use Eclipse distributions" >EasyEclipse Free, open source, easy-to-use Eclipse distributions</a>), EasyEclipse q个是用 NSIS 来做单个插g的安装和卸蝲?  商业的解x? 集成了各U各L插g? 首推行?MyEclipse. 但是随着 MyEclipse 安装包的肥大, 安装一ơ也是相当的耗时, 其最后一步执?ANT 脚本?unpack200 解压~的q程, 如果电脑ơ一点的? d半天没反? 重则q程挂掉, 重新安装. 虽然?Eclipse 本n我没啥说? 但是 Eclipse 装插件的是对初学者来说是个折?  废话说.首先? 我们需要去 MyEclipse ?All In ONE 版本, q样做绿色版好做一? 如果你不知道如何下蝲和安? 请参考本站视? <a href="http://www.aygfsteel.com/beansoft/archive/2007/09/24/147651.html">MyEclipse 6 实战开发讲解视频入?0: 下蝲 安装 q行 HelloWorld</a> </p> <p><a href="http://www.aygfsteel.com/beansoft/archive/2007/08/12/136164.html">MyEclipse 5.5 + Tomcat 开发视? 下蝲,安装,配置,开发ƈq行Web目</a> </p> <p>安装完毕后得C个完整的目录, 那么我们要做的就是修改一个配|文? 创徏一个启?BAT 文g后就可以实现 MyEclipse 6 的免安装q行? 换句话说我们可以攑֜Ud盘上启?当然注册码自己想办法搞定). </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.aygfsteel.com/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.56.0_7DCB/image_1.png" width="220" border="0" /> </p> <p>我们先在q个目录下新Z个文? MyEclipse 6.0.bat , 文g内容如下: </p> <blockquote> <p>start eclipse\eclipse.exe -vm jre\bin\javaw.exe</p> </blockquote> <p>接下来只需要改一个Eclipse插g的配|文件就可以实现l色版运行了, 我们用记事本{文本编辑器打开下面的这个文?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.aygfsteel.com/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.56.0_7DCB/image_3.png" width="284" border="0" /> </p> <p>文g原始内容如下所C? </p> <p>path=d:\\Java\\MyEclipse6.0\\myeclipse </p> <p>q个是指?myeclipse q个插g目录的位|的, 我们把它Ҏ相对路径卛_:</p> <p>path=..\\myeclipse</p> <p>OK, 完工? 把MyEclipse 6.0 整个目录复制C的移动硬盘上或者刻成光? 以后当你的系l重做后或者拿着Ud盘C一个根本没装过 Java 工具的电脑上? 双击批处理文件即可立卛_?MyEclipse 来工? 复制到硬盘上的Q何目?注意路径不要带空格或者汉?, 也可以同样启? 免去我们安装和配|之?</p> <img src ="http://www.aygfsteel.com/zh-qi/aggbug/294246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zh-qi/" target="_blank">W看风云</a> 2009-09-08 09:13 <a href="http://www.aygfsteel.com/zh-qi/archive/2009/09/08/294246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java多线E编Eȝhttp://www.aygfsteel.com/zh-qi/archive/2009/05/18/271351.htmlW看风云W看风云Mon, 18 May 2009 07:43:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2009/05/18/271351.htmlhttp://www.aygfsteel.com/zh-qi/comments/271351.htmlhttp://www.aygfsteel.com/zh-qi/archive/2009/05/18/271351.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/271351.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/271351.html一、认识多d、多q程、单U程、多U程
要认识多U程p从操作系l的原理说v?br />  
以前古老的DOS操作pȝQV 
6.22Q是单Q务的Q还没有U程的概念,pȝ在每ơ只能做一件事情。比如你在copy东西的时候不能rename文g名。ؓ了提高系l的利用效率Q采用批处理来批量执行Q务?br />  
现在的操作系l都是多d操作pȝQ每个运行的d是操作pȝ所做的一件事情,比如你在听歌的同时还在用MSN和好友聊天。听歌和聊天是两个dQ这个两个Q务是“同时”q行的。一个Q务一般对应一个进E,也可能包含好几个q程。比如运行的MSN对应一个MSN的进E,如果你用的是 windowspȝQ你可以在d理器中看到操作pȝ正在q行的进E信息?br />  
一般来_当运行一个应用程序的时候,启动了一个进E,当然有些会启动多个进E。启动进E的时候,操作pȝ会ؓq程分配资源Q其中最主要的资源是内存I间Q因为程序是在内存中q行的。在q程中,有些E序程块是可以乱序执行的,q且q个代码块可以同时被多次执行。实际上Q这L代码块就是线E体。线E是q程中ؕ序执行的代码程。当多个U程同时q行的时候,q样的执行模式成为ƈ发执行?br />  
多线E的目的是ؓ了最大限度的利用CPU资源?br />  
Java~写E序都运行在在Java虚拟机(JVMQ中Q在JVM的内部,E序的多d是通过U程来实现的。每用java命o启动一个java 应用E序Q就会启动一个JVMq程。在同一个JVMq程中,有且只有一个进E,是它自己。在q个JVM环境中,所有程序代码的q行都是以线E来q行?br />  
一般常见的Java应用E序都是单线E的。比如,用java命oq行一个最单的HelloWorld的Java应用E序Ӟ启动了一?nbsp;JVMq程QJVM扑ֈE序E序的入口点main()Q然后运行main()ҎQ这样就产生了一个线E,q个U程UCZU程。当mainҎl束后,ȝE运行完成。JVMq程也随即退?nbsp;?br />  
对于一个进E中的多个线E来_多个U程׃nq程的内存块Q当有新的线E生的时候,操作pȝ不分配新的内存,而是让新U程׃n原有的进E块的内存。因此,U程间的通信很容易,速度也很快。不同的q程因ؓ处于不同的内存块Q因此进E之间的通信相对困难?br />  
实际上,操作的系l的多进E实C多Q务ƈ发执行,E序的多U程实现了进E的q发执行。多d、多q程、多U程的前提都是要求操作系l提供多d、多q程、多U程的支持?br />  
在JavaE序中,JVM负责U程的调度。线E调度是值按照特定的机制为多个线E分配CPU的用权?br /> 调度的模式有两种Q分时调度和抢占式调度。分时调度是所有线E轮获得CPU使用权,q^均分配每个线E占用CPU的时_抢占式调度是ҎU程的优先别来获取CPU的用权。JVM的线E调度模式采用了抢占式模式?br />  
所谓的“q发执行”?#8220;同时”其实都不是真正意义上?#8220;同时”。众所周知QCPU都有个时钟频率,表示每秒中能执行cpu指o的次数。在每个旉周期内,CPU实际上只能去执行一条(也有可能多条Q指令。操作系l将q程U程q行理Q轮(没有固定的顺序)分配每个q程很短的一D|旉Q不一定是均分Q,然后在每个线E内部,E序代码自己处理该进E内部线E的旉分配Q多个线E之间相互的切换L行,q个切换旉也是非常短的。因此多d、多q程、多U程都是操作pȝlh的一U宏观感受,从微观角度看Q程序的q行是异步执行的?br />  
用一句话做ȝQ虽然操作系l是多线E的Q但CPU每一时刻只能做一件事Q和人的大脑是一LQ呵c?br />  
 
二、Java与多U程
 
Java语言的多U程需要操作系l的支持?br />  
Java 虚拟机允许应用程序ƈ发地q行多个执行U程。Java语言提供了多U程~程的扩展点Qƈl出了功能强大的U程控制API?br />  
在Java中,多线E的实现有两U方式:
扩展java.lang.Threadc?br /> 实现java.lang.Runnable接口
 
 
每个U程都有一个优先Q高优先U线E的执行优先于低优先U线E。每个线E都可以或不可以标记Z个守护程序。当某个U程中运行的代码创徏一个新 Thread 对象Ӟ该新U程的初始优先被设定ؓ创徏U程的优先Qƈ且当且仅当创建线E是守护U程Ӟ新线E才是守护程序?br />  
?nbsp;Java 虚拟机启动时Q通常都会有单个非守护U程Q它通常会调用某个指定类?nbsp;main ҎQ。Java 虚拟Zl箋执行U程Q直C列Q一情况出现时ؓ止:
 
调用?nbsp;Runtime cȝ exit ҎQƈ且安全管理器允许退出操作发生?br /> 非守护线E的所有线E都已停止运行,无论是通过从对 run Ҏ的调用中q回Q还是通过抛出一个传播到 run Ҏ之外的异常?br />  
 
三、扩展java.lang.Threadc?br />  
/**
 * File Name:   TestMitiThread.java
 * Created by:  IntelliJ IDEA.
 * Copyright:   Copyright (c) 2003-2006
 * Company:     Lavasoft( [url]
http://lavasoft.blog.51cto.com/[/url])
 * Author:      leizhimin
 * Modifier:    leizhimin
 * Date Time:   2007-5-17 10:03:12
 * Readme:      通过扩展Threadcd现多U程
 
*/
public class TestMitiThread {
    
public static void main(String[] rags) {
        System.out.println(Thread.currentThread().getName() 
+ " U程q行开?");
        
new MitiSay("A").start();
        
new MitiSay("B").start();
        System.out.println(Thread.currentThread().getName() 
+ " U程q行l束!");
    }
}
 
class MitiSay extends Thread {
    
public MitiSay(String threadName) {
        
super(threadName);
    }
 
    
public void run() {
        System.out.println(getName() 
+ " U程q行开?");
        
for (int i = 0; i < 10; i++) {
            System.out.println(i 
+ " " + getName());
            
try {
                sleep((
int) Math.random() * 10);
            } 
catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(getName() 
+ " U程q行l束!");
    }
}
 
q行l果Q?br />  
main U程q行开?/span>!
main U程q行l束
!
A U程q行开?/span>!
0 A
1 A
B U程q行开?/span>!
2 A
0 B
3 A
4 A
1 B
5 A
6 A
7 A
8 A
9 A
A U程q行l束
!
2 B
3 B
4 B
5 B
6 B
7 B
8 B
9 B
B U程q行l束
!
 
说明Q?br /> E序启动q行main时候,java虚拟机启动一个进E,ȝEmain在main()调用时候被创徏。随着调用MitiSay的两个对象的startҎQ另外两个线E也启动了,q样Q整个应用就在多U程下运行?br />  
在一个方法中调用Thread.currentThread().getName()ҎQ可以获取当前线E的名字。在mianҎ中调用该ҎQ获取的是主U程的名字?br />  
注意Qstart()Ҏ的调用后q不是立x行多U程代码Q而是使得该线E变为可q行态(RunnableQ,什么时候运行是由操作系l决定的?br /> 从程序运行的l果可以发现Q多U程E序是ؕ序执行。因此,只有乱序执行的代码才有必要设计ؓ多线E?br /> Thread.sleep()Ҏ调用目的是不让当前线E独自霸占该q程所获取的CPU资源Q以留出一定时间给其他U程执行的机会?br /> 实际上所有的多线E代码执行顺序都是不定的,每次执行的结果都是随机的?br />  
 
四、实现java.lang.Runnable接口
 
/**
 * 通过实现 Runnable 接口实现多线E?br />  
*/
public class TestMitiThread1 implements Runnable {
 
    
public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName() 
+ " U程q行开?");
        TestMitiThread1 test 
= new TestMitiThread1();
        Thread thread1 
= new Thread(test);
        Thread thread2 
= new Thread(test);
        thread1.start();
        thread2.start();
        System.out.println(Thread.currentThread().getName() 
+ " U程q行l束!");
    }
 
    
public void run() {
        System.out.println(Thread.currentThread().getName() 
+ " U程q行开?");
        
for (int i = 0; i < 10; i++) {
            System.out.println(i 
+ " " + Thread.currentThread().getName());
            
try {
                Thread.sleep((
int) Math.random() * 10);
            } 
catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(Thread.currentThread().getName() 
+ " U程q行l束!");
    }
}
 
q行l果Q?br />  
main U程q行开?/span>!
Thread
-0 U程q行开?/span>!
main U程q行l束
!
0 Thread-0
Thread
-1 U程q行开?/span>!
0 Thread-1
1 Thread-1
1 Thread-0
2 Thread-0
2 Thread-1
3 Thread-0
3 Thread-1
4 Thread-0
4 Thread-1
5 Thread-0
6 Thread-0
5 Thread-1
7 Thread-0
8 Thread-0
6 Thread-1
9 Thread-0
7 Thread-1
Thread
-0 U程q行l束!
8 Thread-1
9 Thread-1
Thread
-1 U程q行l束!
 
说明Q?br /> TestMitiThread1c通过实现Runnable接口Q得该cL了多U程cȝ特征。runQ)Ҏ是多U程E序的一个约定。所有的多线E代码都在runҎ里面。Threadcd际上也是实现了Runnable接口的类?br /> 在启动的多线E的时候,需要先通过Threadcȝ构造方法Thread(Runnable target) 构造出对象Q然后调用Thread对象的start()Ҏ来运行多U程代码?br /> 实际上所有的多线E代码都是通过q行Thread的start()Ҏ来运行的。因此,不管是扩展Threadc还是实现Runnable接口来实现多U程Q最l还是通过Thread的对象的API来控制线E的Q熟悉ThreadcȝAPI是进行多U程~程的基?br />  
五、读解ThreadcAPI
 
static int MAX_PRIORITY
          U程可以h的最高优先?br />
static int MIN_PRIORITY
          U程可以h的最低优先?br />
static int NORM_PRIORITY
          分配l线E的默认优先U?br />  
构造方法摘?br /> Thread(Runnable target)
          分配新的 Thread 对象?br /> Thread(String name)
          分配新的 Thread 对象?br />  
 
Ҏ摘要
static Thread currentThread()
          q回对当前正在执行的U程对象的引用?br />  ClassLoader getContextClassLoader()
          q回该线E的上下?nbsp;ClassLoader?br />  
long getId()
          q回该线E的标识W?br />  String getName()
          q回该线E的名称?br />  
int getPriority()
          q回U程的优先?br />  Thread.State getState()
          q回该线E的状态?br />  ThreadGroup getThreadGroup()
          q回该线E所属的U程l?br />
static boolean holdsLock(Object obj)
          当且仅当当前U程在指定的对象上保持监视器锁时Q才q回 
true?br />  void interrupt()
          中断U程?br />
static boolean interrupted()
          试当前U程是否已经中断?br />  
boolean isAlive()
          试U程是否处于zd状态?br />  
boolean isDaemon()
          试该线E是否ؓ守护U程?br />  
boolean isInterrupted()
          试U程是否已经中断?br />  
void join()
          {待该线E终止?br />  
void join(long millis)
          {待该线E终止的旉最长ؓ millis 毫秒?br />  
void join(long millis, int nanos)
          {待该线E终止的旉最长ؓ millis 毫秒 
+ nanos U秒?br />  void resume()
          已过时?nbsp;该方法只?nbsp;suspend() 一起用,?nbsp;suspend() 已经遭到反对Q因为它h死锁們֐。有x多信息,请参阅ؓ?nbsp;Thread.stop、Thread.suspend ?nbsp;Thread.resume 遭到反对Q?br />  
void run()
          如果该线E是使用独立?nbsp;Runnable q行对象构造的Q则调用?nbsp;Runnable 对象?nbsp;run ҎQ否则,该方法不执行M操作q返回?br />  
void setContextClassLoader(ClassLoader cl)
          讄该线E的上下?nbsp;ClassLoader?br />  
void setDaemon(boolean on)
          该U程标记为守护线E或用户U程?br />
static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
          讄当线E由于未捕获到异常而突然终止,q且没有U程定义其他处理E序时所调用的默认处理程序?br />  
void setName(String name)
          改变U程名称Q之与参数 name 相同?br />  
void setPriority(int newPriority)
          更改U程的优先?br />  
void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
          讄该线E由于未捕获到异常而突然终止时调用的处理程序?br />
static void sleep(long millis)
          在指定的毫秒数内让当前正在执行的U程休眠Q暂停执行)?br />
static void sleep(long millis, int nanos)
          在指定的毫秒数加指定的纳U数内让当前正在执行的线E休眠(暂停执行Q?br />  
void start()
          使该U程开始执行;Java 虚拟用该U程?nbsp;run Ҏ?br />  
void stop()
          已过时?nbsp;该方法具有固有的不安全性。用 Thread.stop 来终止线E将释放它已l锁定的所有监视器Q作为沿堆栈向上传播的未?nbsp;ThreadDeath 异常的一个自然后果)。如果以前受q些监视器保护的M对象都处于一U不一致的状态,则损坏的对象对其他U程可见Q这有可能导致Q意的行ؓ。stop 的许多用都应由只修Ҏ些变量以指示目标U程应该停止q行的代码来取代。目标线E应定期查该变量Qƈ且如果该变量指示它要停止q行Q则从其q行Ҏ依次q回。如果目标线E等待很长时_例如Z一个条件变量)Q则应?nbsp;interrupt Ҏ来中断该{待。有x多信息,请参阅《ؓ何不赞成使用 Thread.stop、Thread.suspend ?nbsp;Thread.resumeQ》?br />  
void stop(Throwable obj)
          已过时?nbsp;该方法具有固有的不安全性。请参阅 stop() 以获得详l信息。该Ҏ的附加危险是它可用于生成目标U程未准备处理的异常Q包括若没有该方法该U程不太可能抛出的已查的异常Q。有x多信息,请参阅ؓ?nbsp;Thread.stop、Thread.suspend ?nbsp;Thread.resume 遭到反对Q?br />  
void suspend()
          已过时。该Ҏ已经遭到反对Q因为它h固有的死锁們֐。如果目标线E挂h在保护关键系l资源的监视器上保持有锁Q则在目标线E重新开始以前Q何线E都不能讉K该资源。如果重新开始目标线E的U程惛_调用 resume 之前锁定该监视器Q则会发生死锁。这cL锁通常会证明自己是“ȝ”的进E。有x多信息,请参阅ؓ?nbsp;Thread.stop、Thread.suspend ?nbsp;Thread.resume 遭到反对Q?br />  String toString()
          q回该线E的字符串表CŞ式,包括U程名称、优先和线E组?br />
static void yield()
          暂停当前正在执行的线E对象,q执行其他线E?br />  
 
六、线E的状态{换图
 
U程在一定条件下Q状态会发生变化。线E变化的状态{换图如下Q?br />
 
1、新建状态(NewQ:新创Z一个线E对象?br /> 2、就l状态(RunnableQ:U程对象创徏后,其他U程调用了该对象的start()Ҏ。该状态的U程位于可运行线E池中,变得可运行,{待获取CPU的用权?br /> 3、运行状态(RunningQ:qA状态的U程获取了CPUQ执行程序代码?br /> 4、阻塞状态(BlockedQ:d状态是U程因ؓ某种原因攑ּCPU使用权,暂时停止q行。直到线E进入就l状态,才有Z转到q行状态。阻塞的情况分三U:
Q一Q、等待阻塞:q行的线E执行wait()ҎQJVM会把该线E放入等待池中?br /> Q二Q、同步阻塞:q行的线E在获取对象的同步锁Ӟ若该同步锁被别的U程占用Q则JVM会把该线E放入锁池中?br /> Q三Q、其他阻塞:q行的线E执行sleep()或join()ҎQ或者发ZI
/OhӞJVM会把该线E置为阻塞状态。当sleep()状态超时、join(){待U程l止或者超时、或者I/O处理完毕ӞU程重新转入qA状态?br /> 5、死亡状态(DeadQ:U程执行完了或者因异常退Zrun()ҎQ该U程l束生命周期?br />  
 
七、线E的调度
1、调整线E优先QJavaU程有优先Q优先高的U程会获得较多的q行Z?br />  
JavaU程的优先用整数表C,取D围是1
~10QThreadcL以下三个静态常量:
static int MAX_PRIORITY
          U程可以h的最高优先Q取gؓ10?br />
static int MIN_PRIORITY
          U程可以h的最低优先Q取gؓ1?br />
static int NORM_PRIORITY
          分配l线E的默认优先U,取gؓ5?br />  
ThreadcȝsetPriority()和getPriority()Ҏ分别用来讄和获取线E的优先U?br />  
每个U程都有默认的优先。主U程的默认优先为Thread.NORM_PRIORITY?br /> U程的优先有承关p,比如AU程中创ZBU程Q那么B和Ah相同的优先?br /> JVM提供?0个线E优先Q但与常见的操作pȝ都不能很好的映射。如果希望程序能UL到各个操作系l中Q应该仅仅用ThreadcL以下三个静态常量作Z先Q这栯保证同样的优先采用了同L调度方式?br />  
2、线E睡眠:Thread.sleep(long millis)ҎQɾU程转到d状态。millis参数讑֮睡眠的时_以毫Uؓ单位。当睡眠l束后,p{为就l(RunnableQ状态。sleep()q_UL性好?br />  
3、线E等待:ObjectcM的wait()ҎQ导致当前的U程{待Q直到其他线E调用此对象?nbsp;notify() Ҏ?nbsp;notifyAll() 唤醒Ҏ。这个两个唤醒方法也是ObjectcM的方法,行ؓ{h于调?nbsp;wait(0) 一栗?br />  
4、线E让步:Thread.yield() ҎQ暂停当前正在执行的U程对象Q把执行Z让给相同或者更高优先的线E?br />  
5、线E加入:join()ҎQ等待其他线E终止。在当前U程中调用另一个线E的join()ҎQ则当前U程转入d状态,直到另一个进E运行结束,当前U程再由d转ؓqA状态?br />  
6、线E唤醒:ObjectcM的notify()ҎQ唤醒在此对象监视器上等待的单个U程。如果所有线E都在此对象上等待,则会选择唤醒其中一个线E。选择是Q意性的Qƈ在对实现做出军_时发生。线E通过调用其中一?nbsp;wait ҎQ在对象的监视器上等待。直到当前的U程攑ּ此对象上的锁定,才能l箋执行被唤醒的U程。被唤醒的线E将以常规方式与在该对象上主动同步的其他所有线E进行竞争;例如Q唤醒的U程在作为锁定此对象的下一个线E方面没有可靠的Ҏ或劣ѝ类似的Ҏq有一个notifyAll()Q唤醒在此对象监视器上等待的所有线E?br />  
注意QThread中suspend()和resume()两个Ҏ在JDK1.5中已l废除,不再介绍。因为有死锁們֐?br />  
7、常见线E名词解?br /> ȝE:JVM调用E序mian()所产生的线E?br /> 当前U程Q这个是Ҏh的概c一般指通过Thread.currentThread()来获取的q程?br /> 后台U程Q指为其他线E提供服务的U程Q也UCؓ守护U程。JVM的垃圑֛收线E就是一个后台线E?br /> 前台U程Q是指接受后台线E服务的U程Q其实前台后台线E是联系在一P像傀儡和q后操纵者一L关系。傀儡是前台U程、幕后操U者是后台U程。由前台U程创徏的线E默认也是前台线E。可以通过isDaemon()和setDaemon()Ҏ来判断和讄一个线E是否ؓ后台U程?br />
转自:http://lavasoft.blog.51cto.com/62575/27069


W看风云 2009-05-18 15:43 发表评论
]]>
Java Web应用中的d调度http://www.aygfsteel.com/zh-qi/archive/2009/05/08/269644.htmlW看风云W看风云Fri, 08 May 2009 08:47:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2009/05/08/269644.htmlhttp://www.aygfsteel.com/zh-qi/comments/269644.htmlhttp://www.aygfsteel.com/zh-qi/archive/2009/05/08/269644.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/269644.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/269644.html阅读全文

W看风云 2009-05-08 16:47 发表评论
]]>
MyEclipse 快捷键大?/title><link>http://www.aygfsteel.com/zh-qi/archive/2009/04/24/267362.html</link><dc:creator>W看风云</dc:creator><author>W看风云</author><pubDate>Fri, 24 Apr 2009 07:08:00 GMT</pubDate><guid>http://www.aygfsteel.com/zh-qi/archive/2009/04/24/267362.html</guid><wfw:comment>http://www.aygfsteel.com/zh-qi/comments/267362.html</wfw:comment><comments>http://www.aygfsteel.com/zh-qi/archive/2009/04/24/267362.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zh-qi/comments/commentRss/267362.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zh-qi/services/trackbacks/267362.html</trackback:ping><description><![CDATA[<p> </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 快捷键大?br /> Q?/span><span style="color: #000000">1</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">M切换H口的大?br /> Q?/span><span style="color: #000000">2</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">Q跛_最后一ơ的~辑?br /> Q?/span><span style="color: #000000">3</span><span style="color: #000000">QF2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标Ud时Tooltipq会昄即Show Tooltip Description?br />           F3跛_声明或定义的地方?br />           F5单步调试q入函数内部?br />           F6单步调试不进入函数内部,如果装了金山词霸2006则要?#8220;取词开?#8221;的快捷键Ҏ其他的?br />           F7由函数内部返回到调用处?br />           F8一直执行到下一个断炏V?br /> Q?/span><span style="color: #000000">4</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">Pg</span><span style="color: #000000">~</span><span style="color: #000000">对于XML文g是切换代码和囄H口<br /> Q?/span><span style="color: #000000">5</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">Alt</span><span style="color: #000000">+</span><span style="color: #000000">I看Java文g中变量的相关信息<br /> Q?/span><span style="color: #000000">6</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">PgUp对于代码H口是打开“Show List”下拉框,在此下拉框里昄有最q曾打开的文?br /> Q?/span><span style="color: #000000">7</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+/</span><span style="color: #000000"> 在代码窗口中是这U?/span><span style="color: #008000">//</span><span style="color: #008000">~注释?/span><span style="color: #008000"><br /> </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"> 在代码窗口中是这U?/span><span style="color: #008000">/**</span><span style="color: #008000">//*~</span><span style="color: #008000">*/</span><span style="color: #000000">注释Q在JSP文gH口中是</span><span style="color: #000000"><!--~--></span><span style="color: #000000">?br /> Q?/span><span style="color: #000000">8</span><span style="color: #000000">QAlt</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">O(或点dh中的Toggle Mark Occurrences按钮) 当点L个标记时可本页面中其他地方的此标记黄色凸显Qƈ且窗口的双框会出现白色的方块,点击此方块会跛_此标记处?br /> Q?/span><span style="color: #000000">9</span><span style="color: #000000">Q右ȝ口的左边框即加断点的地方选Show Line Numbers可以加行受?br /> Q?/span><span style="color: #000000">10</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">I格式化激zȝ元素Format Active Elements?br />             Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">F格式化文件Format Document?br /> Q?/span><span style="color: #000000">11</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">S保存当前文g?br />             Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">S保存所有未保存的文件?br /> Q?/span><span style="color: #000000">12</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">M(先把光标攑֜需导入包的cd? 作用是加Import语句?br />             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 /> Q?/span><span style="color: #000000">13</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">Space提示键入内容即Content AssistQ此时要输入法中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 Toggle的快捷键Q用于切换英文和其他文字Q改成其他的如改成Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">ZQ同时在“Text Service and Input Languages”对话框中删掉Chinese(PRC)下面的其他中文输入法只保留光输入法Q此时按Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">Z在英文和光中文之间切换?br />             Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Shift</span><span style="color: #000000">+</span><span style="color: #000000">Space提示信息即Context Information?br /> Q?/span><span style="color: #000000">14</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">D删除当前行?br /> Q?/span><span style="color: #000000">15</span><span style="color: #000000">Q双ȝ口的左边框可以加断点?br /> Q?/span><span style="color: #000000">16</span><span style="color: #000000">Q在.jap.?java{文件中右键?#8220;Campare With”?#8220;Replace With”可以扑ֈ所有操作的历史记录?br /> Q?/span><span style="color: #000000">17</span><span style="color: #000000">Q在菜单中选WindowQShow ViewQNavigator可调出导航功能窗?br /> Q?/span><span style="color: #000000">18</span><span style="color: #000000">QCtrl</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000"> 快速修?最l典的快捷键,׃用多说了) <br /> <br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Alt</span><span style="color: #000000">+</span><span style="color: #000000">↓ 复制当前行到下一?复制增加)<br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Alt</span><span style="color: #000000">+</span><span style="color: #000000">↑ 复制当前行到上一?复制增加)<br /> <br /> Alt</span><span style="color: #000000">+</span><span style="color: #000000">↓ 当前行和下面一行交互位|?特别实用,可以省去先剪?再粘贴了)<br /> Alt</span><span style="color: #000000">+</span><span style="color: #000000">↑ 当前行和上面一行交互位|?同上)<br /> Alt</span><span style="color: #000000">+</span><span style="color: #000000">← 前一个编辑的面<br /> Alt</span><span style="color: #000000">+</span><span style="color: #000000">→ 下一个编辑的面(当然是针对上面那条来说了)<br /> <br /> Alt</span><span style="color: #000000">+</span><span style="color: #000000">Enter 昄当前选择资源(工程,or 文g or文g)的属?br /> <br /> Shift</span><span style="color: #000000">+</span><span style="color: #000000">Enter 在当前行的下一行插入空?q时鼠标可以在当前行的Q一位置,不一定是最?<br /> Shift</span><span style="color: #000000">+</span><span style="color: #000000">Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Enter 在当前行插入I(原理同上?<br /> <br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Q 定位到最后编辑的地方<br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">L 定位在某?nbsp;(对于E序过100的h有音?<br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">M 最大化当前的Edit或View (再按则反?<br /> Ctrl</span><span style="color: #000000">+/</span><span style="color: #000000"> 注释当前?再按则取消注?br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">O 快速显C?nbsp;OutLine<br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">T 快速显C当前类的承结?br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">W 关闭当前Editer<br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">K 参照选中的Word快速定位到下一?br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">E 快速显C当前Editer的下拉列?如果当前面没有昄的用黑体表示)<br /> <br /> Ctrl</span><span style="color: #000000">+/</span><span style="color: #000000">(键? 折叠当前cM的所有代?br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">×(键? 展开当前cM的所有代?br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用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 昄理当前打开的所有的View的管理器(可以选择关闭,Ȁzȝ操作)<br /> Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">J 正向增量查找(按下Ctrl</span><span style="color: #000000">+</span><span style="color: #000000">J?你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显C没有找C,查一个单词时,特别实用,q个功能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 反向增量查找(和上条相?只不q是从后往前查)<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 关闭所有打开的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 把当前选中的文本全部变呛_?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 把当前选中的文本全部变为小?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 格式化当前代?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 定位到对于的匚wW?譬如{}) (从前面定位后面时,光标要在匚wW里?后面到前?则反?<br /> <br /> 下面的快捷键是重构里面常用的,本hp己喜Ƣ且常用的整理一??一般重构的快捷键都是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;(是我自己最q的一个了,其是变量和cȝ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 抽取Ҏ (q是重构里面最常用的方法之一?其是对一大堆泥团代码有用)<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 修改函数l构(比较实用,有N个函数调用了q个Ҏ,修改一ơ搞?<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 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变?其是多处调用的时?<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 把Class中的local变量变ؓfield变量 (比较实用的功?<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 合ƈ变量(可能q样说有点不妥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 Ud函数和变?不怎么常用)<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 重构的后悔药(Undo)<br /> </span></div> <img src ="http://www.aygfsteel.com/zh-qi/aggbug/267362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zh-qi/" target="_blank">W看风云</a> 2009-04-24 15:08 <a href="http://www.aygfsteel.com/zh-qi/archive/2009/04/24/267362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文g夹创?文g夹删?文gҎ?/title><link>http://www.aygfsteel.com/zh-qi/archive/2009/04/11/264957.html</link><dc:creator>W看风云</dc:creator><author>W看风云</author><pubDate>Fri, 10 Apr 2009 17:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/zh-qi/archive/2009/04/11/264957.html</guid><wfw:comment>http://www.aygfsteel.com/zh-qi/comments/264957.html</wfw:comment><comments>http://www.aygfsteel.com/zh-qi/archive/2009/04/11/264957.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zh-qi/comments/commentRss/264957.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zh-qi/services/trackbacks/264957.html</trackback:ping><description><![CDATA[     摘要:     1package test;   2   3import java.io.BufferedReader;   4import java.io.File;   5import java.io.FileInputStream; &nb...  <a href='http://www.aygfsteel.com/zh-qi/archive/2009/04/11/264957.html'>阅读全文</a><img src ="http://www.aygfsteel.com/zh-qi/aggbug/264957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zh-qi/" target="_blank">W看风云</a> 2009-04-11 01:21 <a href="http://www.aygfsteel.com/zh-qi/archive/2009/04/11/264957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>native2ascii工具http://www.aygfsteel.com/zh-qi/archive/2008/08/20/223249.htmlW看风云W看风云Wed, 20 Aug 2008 06:17:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2008/08/20/223249.htmlhttp://www.aygfsteel.com/zh-qi/comments/223249.htmlhttp://www.aygfsteel.com/zh-qi/archive/2008/08/20/223249.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/223249.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/223249.html背景Q在做Java开发的时候,常常会出C些ؕ码,或者无法正识别或d的文Ӟ比如常见的validator验证用的消息资源QpropertiesQ文件就需要进行Unicode重新~码。原因是java默认的编码方式ؓUnicodeQ而我们的计算机系l编码常常是GBK{编码。需要将pȝ的编码{换ؓjava正确识别的编码问题就解决了?br />
1、native2ascii介:native2ascii是sun java sdk提供的一个工兗用来将别的文本cLӞ比如*.txt,*.ini,*.properties,*.java{等Q编码{为Unicode~码。ؓ什么要q行转码Q原因在于程序的国际化。Unicode~码的定义:UnicodeQ统一码、万国码、单一码)是一U在计算Z使用的字W编码。它为每U语a中的每个字符讑֮了统一q且唯一的二q制~码Q以满跨语a、跨q_q行文本转换、处理的要求?990q开始研发,1994q正式公布。随着计算机工作能力的增强QUnicode也在面世以来的十多年里得到普及。(声明QUnicode~码定义来自互联|)?br />
2、获取native2asciiQ安装了jdk后,假如你是在windows上安装,那么在jdk的安装目录下Q会有一个bin目录Q其中native2ascii.exe正是?br />
3、native2ascii的命令行的命名格式:
native2ascii 
-[options] [inputfile [outputfile]]

说明Q?nbsp;
-[options]Q表C命令开养I有两个选项可供选择
-reverseQ将Unicode~码转ؓ本地或者指定编码,不指定编码情况下Q将转ؓ本地~码?br /> -encoding encoding_nameQ{换ؓ指定~码Qencoding_name为编码名U?br /> [inputfile [outputfile]]
inputfileQ表C入文件全名?br /> outputfileQ输出文件名。如果缺此参数Q将输出到控制台?br />
4、最佛_践:首先JDK的bin目录加入pȝ变量path。在盘下建立一个test目录Q在test目录里徏立一个zh.txt文gQ文件内容ؓQ?#8220;熔岩”Q打开“命o行提C符”Qƈq入C:\test目录下。下面就可以按照说明一步一步来操作Q注意观察其中编码的变化?br />
AQ将zh.txt转换为Unicode~码Q输出文件到u.txt
native2ascii zh.txt u.txt
打开u.txtQ内容ؓ“\u7194\u5ca9”?br /> BQ将zh.txt转换为Unicode~码Q输出到控制?br /> C:\test
>native2ascii zh.txt
\u7194\u5ca9
可以看到Q控制台输出?#8220;\u7194\u5ca9”?br /> CQ将zh.txt转换为ISO8859
-1~码Q输出文件到i.txt
native2ascii 
-encoding ISO8859-1 zh.txt i.txt
打开i.txt文gQ内容ؓ“\u00c8\u00db\u00d1\u00d2”?br /> DQ将u.txt转换为本地编码,输出到文件u_nv.txt
native2ascii 
-reverse u.txt u_nv.txt
打开u_nv.txt文gQ内容ؓ“熔岩”?br /> EQ将u.txt转换为本地编码,输出到控制台
C:\test
>native2ascii -reverse u.txt
熔岩
可以看到Q控制台输出?#8220;熔岩”?br /> FQ将i.txt转换为本地编码,输出到i_nv.txt
native2ascii 
-reverse i.txt i_nv.txt
打开i_nv.txt文gQ内容ؓ“\u00c8\u00db\u00d1\u00d2”。发现{码前后完全一L。也是_{于没有转,或者说思想p涂Q对命名没有理解。?br />
GQ将i.txt转换为GBK~码Q输出到i_gbk.txt
native2ascii 
-reverse -encoding GBK i.txt i_gbk.txt
打开i_gbk.txt文gQ内容ؓ“\u00c8\u00db\u00d1\u00d2”。发现{码前后完全一L。也是_{于没有转,或者说思想p涂Q对命名没有理解?br />
HQ将u_nv.txt转码到本地编码GBKQ输出到控制?br /> C:\test
>native2ascii -reverse -encoding ISO8859-1 i.txt
熔岩
从这个结果看Q目标达到到了,~码i.txt为ISO8859
-1Q{为本地编码后内容?#8220;熔岩”。从q里应该意识刎ͼnative2ascii -reverse命o?/span>-encoding指定的编码ؓ源文件的~码格式。而在native2ascii 命o?/span>-encoding指定的编码ؓQ生成的Q目标文件的~码格式。这一炚w常的重要Q切讎ͼQ?br />
l箋探烦Q新建文?2a.txtQ内?#8220;12axyz”。看看纯字母数字的编码又如何?br />
IQ将U字母数字的文本文g12a.txt转换为Unicode~码
native2ascii 12a.txt 12a_nv.txt
打开12a_nv.txt文gQ内容ؓ“12axyz”?br /> l箋试Q{为ISO8859
-1~码看看
C:\test
>native2ascii -encoding ISO8859-1 12a.txt
12axyz
l果q是没有转码?br /> 从结果可以得出结论:对于U数字和字母的文本类型gQ{码前后的内容是一L?br />
5、ȝQnative2ascii是一个非常的好{码工Pq且转码是可逆的Q而其真正的含义ƈ非本地编码—?/span>>转码为ASCII码,而是一个通用的文本文件编码{换工兗在做编码{换的时候有两类指定~码的情形,分别指输出文件编码和输入文g~码Q具体可以看看最佛_践部分?br /> 实际应用中:
比如可以q样利用native2asciiQ?br /> native2ascii 
-encoding gbk     temp.properties    application_zh_CN.properties
    q里根据一个时文件temp.properties输出了application_zh_CN.propertiesQ然后把application_zh_CN.properties中的文g内容替换q个临时文g的内容就可以了?/span> 引用地址:http://tmsoft.lsxy.com/index.php?load=read&id=393

W看风云 2008-08-20 14:17 发表评论
]]>
List Map Sethttp://www.aygfsteel.com/zh-qi/archive/2008/07/21/216455.htmlW看风云W看风云Mon, 21 Jul 2008 14:01:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2008/07/21/216455.htmlhttp://www.aygfsteel.com/zh-qi/comments/216455.htmlhttp://www.aygfsteel.com/zh-qi/archive/2008/07/21/216455.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/216455.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/216455.html

JAVA的容?--List,Map,Set
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap


Collection接口

  Collection是最基本的集合接口,一个Collection代表一lObjectQ即Collection的元素(ElementsQ?/span>一?Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接承自Collection的类QJava SDK提供的类都是l承自Collection?#8220;子接?#8221;如List和Set?br />   所有实现Collection接口的类都必L供两个标准的构造函敎ͼ无参数的构造函数用于创Z个空的CollectionQ有一?Collection参数的构造函数用于创Z个新的CollectionQ这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection?br />   如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个P代子Q用该q代子即可逐一讉KCollection中每一个元素。典型的用法如下Q?br />

Iterator it = collection.iterator(); // 获得一个P代子

    while(it.hasNext()) {
      Object obj = it.next(); // 得到下一个元?br />
    }

    
       由Collection接口z的两个接口是List和Set?/span>

List接口

  List是有序的CollectionQ用此接口能够_的控制每个元素插入的位置。用戯够用烦引(元素在List中的位置Q类g数组下标Q来讉KList中的元素Q这cM于Java的数l?br /> 和下面要提到的Set不同QList允许有相同的元素?br />   除了hCollection接口必备的iterator()Ҏ外,Listq提供一个listIterator()ҎQ返回一?ListIterator接口Q和标准的Iterator接口相比QListIterator多了一些add()之类的方法,允许dQ删除,讑֮元素Q还能向前或向后遍历?br />   实现List接口的常用类有LinkedListQArrayListQVector和Stack?/span>

LinkedListc?/span>

  LinkedList实现了List接口Q允许null元素。此外LinkedList提供额外的getQremoveQinsertҎ?LinkedList的首部或N。这些操作LinkedList可被用作堆栈QstackQ,队列QqueueQ或双向队列QdequeQ?br />   注意LinkedList没有同步Ҏ。如果多个线E同时访问一个ListQ则必须自己实现讉K同步。一U解x法是在创建List时构造一个同步的ListQ?br />     List list = Collections.synchronizedList(new LinkedList(...));

ArrayListc?/span>

  ArrayList实现了可变大的数组。它允许所有元素,包括null。ArrayList没有同步?br /> sizeQisEmptyQgetQsetҎq行旉为常数。但是addҎ开销为分摊的常数Q添加n个元素需要O(n)的时间。其他的Ҏq行旉为线性?br />   每个ArrayList实例都有一个容量(CapacityQ,即用于存储元素的数组的大。这个容量可随着不断d新元素而自动增加,但是增长法q没有定义。当需要插入大量元素时Q在插入前可以调用ensureCapacityҎ来增加ArrayList的容量以提高插入效率?br />   和LinkedList一PArrayList也是非同步的QunsynchronizedQ?/span>

Vectorc?/span>

  Vector非常cMArrayListQ但是Vector是同步的?/span>由Vector创徏的IteratorQ虽然和ArrayList创徏?Iterator是同一接口Q但是,因ؓVector是同步的Q当一个Iterator被创且正在被用,另一个线E改变了Vector的状态(例如Q添加或删除了一些元素)Q这时调用Iterator的方法时抛出ConcurrentModificationExceptionQ因此必L莯异常?/span>

Stack c?/span>

  Stackl承自VectorQ实C个后q先出的堆栈。Stack提供5个额外的Ҏ使得Vector得以被当作堆栈用。基本的push和pop ҎQ还有peekҎ得到栈顶的元素,emptyҎ试堆栈是否为空QsearchҎ一个元素在堆栈中的位置。Stack刚创建后是空栈?/span>

Set接口

  Set是一U不包含重复的元素的CollectionQ即L的两个元素e1和e2都有e1.equals(e2)=falseQSet最多有一个null元素?/span>
  很明显,Set的构造函数有一个约束条Ӟ传入的Collection参数不能包含重复的元素?br />   h意:必须心操作可变对象QMutable ObjectQ。如果一个Set中的可变元素改变了自w状态导致Object.equals(Object)=true导致一些问题?/span>

Map接口

  h意,Map没有l承Collection接口Q?span style="color: rgb(0,153,2)">Map提供key到value的映。一个Map中不能包含相同的keyQ每个key只能映射一?value?/span>Map接口提供3U集合的视图QMap的内容可以被当作一lkey集合Q一lvalue集合Q或者一lkey-value映射?/span>

Hashtablec?/span>

  Hashtablel承Map接口Q?span style="color: rgb(0,153,2)">实现一个key-value映射的哈希表。Q何非I(non-nullQ的对象都可作ؓkey或者value?/span>
  d数据使用put(key, value)Q取出数据用get(key)Q这两个基本操作的时间开销为常数?br /> Hashtable通过initial capacity和load factor两个参数调整性能。通常~省的load factor 0.75较好地实C旉和空间的均衡。增大load factor可以节省I间但相应的查找旉增大,q会影响像get和putq样的操作?br /> 使用Hashtable的简单示例如下,?Q?Q?攑ֈHashtable中,他们的key分别?#8221;one”Q?#8221;two”Q?#8221;three”Q?br />     Hashtable numbers = new Hashtable();
    numbers.put(“one”, new Integer(1));
    numbers.put(“two”, new Integer(2));
    numbers.put(“three”, new Integer(3));
  要取Z个数Q比?Q用相应的keyQ?br />     Integer n = (Integer)numbers.get(“two”);
    System.out.println(“two = ” + n);
  ׃作ؓkey的对象将通过计算其散列函数来定与之对应的value的位|,因此M作ؓkey的对象都必须实现hashCode和equalsҎ。hashCode和equalsҎl承自根cObjectQ如果你用自定义的类当作key的话Q要相当心Q按照散列函数的定义Q如果两个对象相同,即obj1.equals(obj2)=trueQ则它们的hashCode必须相同Q但如果两个对象不同Q则它们的hashCode不一定不同,如果两个不同对象的hashCode相同Q这U现象称为冲H,冲突会导致操作哈希表的时间开销增大Q所以尽量定义好的hashCode()ҎQ能加快哈希表的操作?br />   如果相同的对象有不同的hashCodeQ对哈希表的操作会出现意想不到的l果Q期待的getҎq回nullQ,要避免这U问题,只需要牢C条:要同时复写equalsҎ和hashCodeҎQ而不要只写其中一个?br />   Hashtable是同步的?/span>

HashMapc?/span>

  HashMap和HashtablecMQ不同之处在于HashMap是非同步的,q且允许nullQ即null value和null key?/span>但是HashMap视ؓCollectionӞvalues()Ҏ可返回CollectionQ,其P代子操作旉开销和HashMap 的容量成比例。因此,如果q代操作的性能相当重要的话Q不要将HashMap的初始化定w讑־q高Q或者load factorq低?/span>

WeakHashMapc?/span>

  WeakHashMap是一U改q的HashMapQ它对key实行“弱引?#8221;Q如果一个key不再被外部所引用Q那么该key可以被GC回收?/span>

ȝ

  如果涉及到堆栈,队列{操作,应该考虑用ListQ对于需要快速插入,删除元素Q应该用LinkedListQ如果需要快速随问元素,应该使用ArrayList?br />   如果E序在单U程环境中,或者访问仅仅在一个线E中q行Q考虑非同步的c,其效率较高,如果多个U程可能同时操作一个类Q应该用同步的cR?br />   要特别注意对哈希表的操作Q作为key的对象要正确复写equals和hashCodeҎ?br />   量q回接口而非实际的类型,如返回List而非ArrayListQ这样如果以后需要将ArrayList换成LinkedListӞ客户端代码不用改变。这是针对抽象~程?/span>

原文地址 http://blog.chinaunix.net/u/26256/showart.php?id=199898

W看风云 2008-07-21 22:01 发表评论
]]>
Criteria 查询http://www.aygfsteel.com/zh-qi/archive/2008/07/21/216454.htmlW看风云W看风云Mon, 21 Jul 2008 13:59:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2008/07/21/216454.htmlhttp://www.aygfsteel.com/zh-qi/comments/216454.htmlhttp://www.aygfsteel.com/zh-qi/archive/2008/07/21/216454.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/216454.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/216454.htmlCriteria对SQLq行装Q让开发h员可以用物g的方式来对资料库q行操作Q例如下面的查询User表格中的所有资料:
Criteria criteria = session.createCriteria(User.class);
// 查询user所有栏?/span>
List users = criteria.list();
Iterator iterator =  users.iterator();
System.out.println("id \t name/age");
while(iterator.hasNext()) {
    User user = (User) iterator.next();
    System.out.println(user.getId() +
                               " \t " + user.getName() +
                               "/" + user.getAge());           
}

Hibernate实际上用以下的SQL来查询资料库Q?br />
select this_.id as id0_, this_.name as name0_0_, this_.age as age0_0_ from user this_

Criteria实际上只是个容器Q如果想要设定查询条Ӟ则要使用add()Ҏ加入Restrictions的条仉Ӟ例如查询age大于20且小?0的资料:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.gt("age", new Integer(20)));
criteria.add(Restrictions.lt("age", new Integer(40)));
List users = criteria.list();

您也可以使用逻辑l合来进行查询,例如l合age{于QeqQ?0或(orQage为空QisNullQ的条gQ?
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.or(
                   Restrictions.eq("age", new Integer(20)),
                   Restrictions.isNull("age")
               ));
List users = criteria.list();

也可以用sqlRestriction()Ҏ来提供SQL语法作限定查询,例如查询name以cater开头的资料Q?br />
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.sqlRestriction("{alias}.name LIKE (?)", "cater%", Hibernate.STRING));
List users = criteria.list();

其中alias被替换ZUsercd相关的名Uͼ?被替换为cater%Q也是W二个参数所提供的|在SQL撰写Ӟ不必再写WHEREQ如果有多个查询条gQ例如BETWEEN子句的查询,则可以如下:
Criteria criteria = session.createCriteria(User.class);
Integer[] ages = {new Integer(20), new Integer(40)};
Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};
criteria.add(Restrictions.sqlRestriction("{alias}.age BETWEEN (?) AND (?)", ages, types));
List users = criteria.list();

Restrictions的几个常用限定查询方法如下表所C:
Ҏ 说明
Restrictions.eq {于
Restrictions.allEq 使用MapQ用key/valueq行多个{于的比?/font>
Restrictions.gt 大于 >
Restrictions.ge 大于{于 >=
Restrictions.lt 于 <
Restrictions.le 于{于 <=
Restrictions.between 对应SQL的BETWEEN子句
Restrictions.like 对应SQL的LIKE子句
Restrictions.in 对应SQL的in子句
Restrictions.and and关系
Restrictions.or or关系
Restrictions.sqlRestriction SQL限定查询

*******************************************************************************************************************************************
您可以用Criteriaq行查询Qƈ使用Order对结果进行排序,例如使用Oder.asc()由小到大排序Q反之则使用desc()Q:
Criteria criteria = session.createCriteria(User.class);
criteria.addOrder(Order.asc("age"));
List users = criteria.list();

setMaxResults()Ҏ可以限定查询回来的笔敎ͼ如果配合setFirstResult()讑֮传回查询l果W一W资料的位置Q就可以实现单的分页Q例如传回第51W之后的50W资料(如果有的话)Q?
Criteria criteria = session.createCriteria(User.class);
criteria.setFirstResult(51);
criteria.setMaxResult(50);
List users = criteria.list();

您可以对查询l果q行l计动作Q用Projections的avg()、rowCount()、count()、max()、min()?countDistinct(){方法,例如Ҏ询结果的"age"作^均:
Criteria criteria = session.createCriteria(User.class);
criteria.setProjection(Projections.avg("age"));
List users = criteria.list();
Iterator iterator =  users.iterator();
while(iterator.hasNext()) {
    System.out.println(iterator.next());      
}

q可以配合Projections的groupProperty()来对l果q行分组Q例如以"age"q行分组Q也是如果资料?age"如果?20?0?5?0Q则以下会显C?0?5?0Q?br />
Criteria criteria = session.createCriteria(User.class);
criteria.setProjection(Projections.groupProperty("age"));
List users = criteria.list();
Iterator iterator =  users.iterator();
while(iterator.hasNext()) {
    System.out.println(iterator.next());      
}

如果想结合统计与分组功能Q则可以使用ProjectionListQ例如下面的E式会计每个年龄各有多个人:
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.groupProperty("age"));
projectionList.add(Projections.rowCount());

Criteria criteria = session.createCriteria(User.class);
criteria.setProjection(projectionList);
List users = criteria.list();
Iterator iterator =  users.iterator();
while(iterator.hasNext()) {
    Object[] o = (Object[]) iterator.next();
    System.out.println(o[0] + "\t" + o[1]);
}

如果有一个已知的物gQ则可以Ҏq个物g作ؓ查询的依据,看看是否有属性与之类似的物gQ例如:
User user = new User();
user.setAge(new Integer(30));

Criteria criteria = session.createCriteria(User.class);

criteria.add(Example.create(user));

List users = criteria.list();

Iterator iterator =  users.iterator();
System.out.println("id \t name/age");
while(iterator.hasNext()) {
    User ur = (User) iterator.next();
    System.out.println(ur.getId() +
                                " \t " + ur.getName() +
                                "/" + ur.getAge());           
}

在这个例子中Quser物g中有已知的属?age"?0Q用Example会自动过滤掉user的空属性,q以之作为查询的依据Q也是扑և "age"同ؓ30的资料?br />
Criteria可以q行复合查询Q即在原有的查询基础上再q行查询Q例如在Room对User的一对多兌中,在查询出所有的Room资料之后Q希望再查询users?age"?0的user资料Q?br /> Criteria roomCriteria = session.createCriteria(Room.class);
Criteria userCriteria = roomCriteria.createCriteria("users");
userCriteria.add(Restrictions.eq("age", new Integer(30)));
List rooms = roomCriteria.list(); // 只列出users属性中有user?age"?0的Room
Iterator iterator = rooms.iterator();

原文地址 http://www.caterpillar.onlyfun.net/GossipCN/HibernateGossip/CriteriaAdvanced.html
         http://www.caterpillar.onlyfun.net/GossipCN/HibernateGossip/CriteriaBasic.html


W看风云 2008-07-21 21:59 发表评论
]]>
Class.forName 介绍http://www.aygfsteel.com/zh-qi/archive/2008/07/21/216450.htmlW看风云W看风云Mon, 21 Jul 2008 13:38:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2008/07/21/216450.htmlhttp://www.aygfsteel.com/zh-qi/comments/216450.htmlhttp://www.aygfsteel.com/zh-qi/archive/2008/07/21/216450.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/216450.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/216450.html

Class.forName(xxx.xx.xx) q回的是一个类

首先你要明白在java里面Mclass都要装蝲在虚拟机上才能运行。这句话是装蝲cȝ?和new 不一P要分清楚)?nbsp;

至于什么时候用Q你可以考虑一下这个问题,l你一个字W串变量Q它代表一个类的包名和cdQ你怎么实例化它Q只有你提到的这个方法了Q不q要再加一炏V?nbsp;
A a = (A)Class.forName("pacage.A").newInstance(); 
q和?nbsp;
A a = new A()Q?nbsp;
是一L效果?nbsp;

关于补充的问?nbsp;
{案是肯定的Q?span style="color: rgb(0,102,102)">jvm会执行静态代码段Q你要记住一个概念,静态代码是和classl定的,class装蝲成功pC执行了你的静态代码了。而且以后不会再走q段静态代码了?/span>

Class.forName(xxx.xx.xx) q回的是一个类 
Class.forName(xxx.xx.xx);的作用是要求JVM查找q加载指定的c,也就是说JVM会执行该cȝ静态代码段

动态加载和创徏Class 对象Q比如想Ҏ用户输入的字W串来创建对?nbsp;
String str = 用户输入的字W串 
Class t = Class.forName(str); 
t.newInstance();

 在初始化一个类Q生成一个实例的时候,newInstance()Ҏ和new关键字除了一个是ҎQ一个是关键字外Q最主要有什么区别?它们的区别在于创建对象的方式不一P前者是使用cd载机Ӟ后者是创徏一个新cR那么ؓ什么会有两U创建对象方式?q主要考虑到Y件的可׾~、可扩展和可重用{Y件设计思想?nbsp;

Java中工厂模式经怋用newInstance()Ҏ来创建对象,因此从ؓ什么要使用工厂模式上可以找到具体答案?nbsp;例如Q?nbsp;
class c = Class.forName(“Example”); 
factory = (ExampleInterface)c.newInstance(); 

其中ExampleInterface是Example的接口,可以写成如下形式Q?nbsp;
String className = "Example"; 
class c = Class.forName(className); 
factory = (ExampleInterface)c.newInstance(); 

q一步可以写成如下Ş式: 
String className = readfromXMlConfig;//从xml 配置文g中获得字W串 
class c = Class.forName(className); 
factory = (ExampleInterface)c.newInstance(); 

上面代码已经不存在Example的类名称Q它的优ҎQ无论ExamplecL么变化Q上qC码不变,甚至可以更换Example的兄弟类Example2 , Example3 , Example4……Q只要他们承ExampleInterface可以?nbsp;

从JVM的角度看Q我们用关键字new创徏一个类的时候,q个cd以没有被加蝲。但是用newInstance()Ҏ的时候,必M证:1、这个类已经加蝲Q?、这个类已经q接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,q个静态方法调用了启动cd载器Q即加蝲 java API的那个加载器?nbsp;

现在可以看出QnewInstance()实际上是把newq个方式分解Z步,即首先调用Class加蝲Ҏ加蝲某个c,然后实例化?nbsp;q样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灉|性,提供l了一U降耦的手段?nbsp;

最后用最单的描述来区分new关键字和newInstance()Ҏ的区别: 
newInstance: q型。低效率。只能调用无参构造?nbsp;
new: 强类型。相寚w效。能调用Mpublic构造?br />
下面内容转自
http://blog.csdn.net/iceman1952/archive/2007/03/07/1523025.aspx
介绍的是 forName() ?ClassLoader ?loadClass Ҏ?br /> 现在l于知道了ؓ什?/font> forName()是会执行 static 语句Q因?/font>默认情况?span style="color: rgb(0,102,102)">L初始化这个被装蝲的类?/span>

关于forName()Ҏ
q个ҎLq回要加载的cȝClasscȝ实例
1、forName(String className)单参数时, initialize=true
    a.L使用当前c装载器(也就是装载执行forName()h的类  的类装蝲?
    b.L初始化这个被装蝲的类(当然也包括:装蝲、连接?span style="color: rgb(0,102,102)">初始?/span>)
2、forName(String className, boolean initialize, ClassLoader loader)
    a.loader指定装蝲参数cL用的c装载器Q如果null则用bootstrp装蝲器?br />     b.initialize=trueӞ肯定q接Q而且初始化了Q?br />     c.falseӞl对不会初始化,但是可能被连接了Q但是这里有个例外,如果在调用这个forName()前,已经被初始化了,那么q回的类型也肯定是被初始化的(当然Q这里也暗含着Q被同一个loader所装蝲的,而且q个c被初始化了)

关于用户自定义的c装载器的loadClass()Ҏ
1、loadClass(String name)单参数时, resolve=false
    a.如果q个cdl被q个c装载器所装蝲Q那么,q回q个已经被装载的cd的Class的实例,否则Q就用这个自定义的类装蝲器来装蝲q个classQ这时不知道是否被连接。绝对不会被初始?br />     b.q时唯一可以保证的是Q这个类被装载了。但是不知道q个cL不是被连接和初始化了
2、loadClass(String name, boolean resolve)
    a.resolve=trueӞ则保证已l装载,而且已经q接了。resolve=falsesӞ则仅仅是去装载这个类Q不兛_是否q接了,所以此时可能被q接了,也可能没有被q接


 原文地址 http://hi.baidu.com/zhengguobest/blog/item/13adc2fcdd422082b901a086.html

W看风云 2008-07-21 21:38 发表评论
]]>
把数字{换成中文货币表示http://www.aygfsteel.com/zh-qi/archive/2008/07/10/214096.htmlW看风云W看风云Thu, 10 Jul 2008 11:43:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2008/07/10/214096.htmlhttp://www.aygfsteel.com/zh-qi/comments/214096.htmlhttp://www.aygfsteel.com/zh-qi/archive/2008/07/10/214096.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/214096.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/214096.html
package test;

import java.math.BigDecimal;

public class StrangeCurrency {
/**
* Description 数字金额{换ؓ中文金额

*/

public static String DoNumberCurrencyToChineseCurrency(
    
double bigdMoneyNumber) {
   
// 中文金额单位数组
   String[] straChineseUnit = "?/span>""?/span>""?/span>""?/span>""?/span>""?/span>""?/span>""?/span>",
     
"?/span>""?/span>""?/span>""?/span>""?/span>""?/span>" };
   
// 中文数字字符数组
   String[] straChineseNumber = "?/span>""?/span>""?/span>""?/span>""?/span>""?/span>""?/span>""?/span>",
     
"?/span>""?/span>" };
   String strChineseCurrency 
= "";
   
// 零数位标?/span>
   boolean bZero = true;
   
// 中文金额单位下标
   int ChineseUnitIndex = 0;
   
// DoPrintMessage("Calling Method DoNumberCurrencyToChineseCurrency");
   try {
    
if (bigdMoneyNumber == 0)
     
return "零圆?/span>";
    
// 处理数部分Q四舍五?/span>
    double doubMoneyNumber = Math.round(bigdMoneyNumber * 100);
    
// 是否负数
    boolean bNegative = doubMoneyNumber < 0;
    
// 取绝对?/span>
    doubMoneyNumber = Math.abs(doubMoneyNumber);
    
// 循环处理转换操作
    while (doubMoneyNumber > 0{
     
// 整的处理(无小C)
     if (ChineseUnitIndex == 2 && strChineseCurrency.length() == 0)
      strChineseCurrency 
= strChineseCurrency + "?/span>";
     
// 非零C的处?/span>
     if (doubMoneyNumber % 10 > 0{
      strChineseCurrency 
= straChineseNumber[(int) doubMoneyNumber % 10]
        
+ straChineseUnit[ChineseUnitIndex]
        
+ strChineseCurrency;
      bZero 
= false;
     }

     
// 零数位的处理
     else {
      
// 元的处理(个位)
      if (ChineseUnitIndex == 2{
       
// D中有数?/span>
       if (doubMoneyNumber > 0{
        strChineseCurrency 
= straChineseUnit[ChineseUnitIndex]
          
+ strChineseCurrency;
        bZero 
= true;
       }

      }

      
// 万、亿C的处?/span>
      else if (ChineseUnitIndex == 6 || ChineseUnitIndex == 10{
       
// D中有数?/span>
       if (doubMoneyNumber % 1000 > 0)
        strChineseCurrency 
= straChineseUnit[ChineseUnitIndex]
          
+ strChineseCurrency;
      }

      
// 前一C非零的处?/span>
      if (!bZero)
       strChineseCurrency 
= straChineseNumber[0]
         
+ strChineseCurrency;
      bZero 
= true;
     }

     doubMoneyNumber 
= Math.floor(doubMoneyNumber / 10);
     ChineseUnitIndex
++;
    }

    
// 负数的处?/span>
    if (bNegative)
     strChineseCurrency 
= "?/span>" + strChineseCurrency;
   }
 catch (Exception e) {
    
// DoPrintMessage("Exception Reason : Call Method
    
// DoNumberCurrencyToChineseCurrency Error");
    
// DoPrintMessage("Exception Message : " + e.getMessage());
    e.printStackTrace();
    
return "";
   }

   
return strChineseCurrency;
}



/**
* @param args
*/
//试代码
public static void main(String[] args) {
   double rmb=23434.89;
   StrangeCurrency sc=new StrangeCurrency();
   String s=sc.DoNumberCurrencyToChineseCurrency(rmb);
    System.out.println(s);
   }

}



W看风云 2008-07-10 19:43 发表评论
]]>
JSP隐藏对象http://www.aygfsteel.com/zh-qi/archive/2008/07/03/212442.htmlW看风云W看风云Thu, 03 Jul 2008 13:51:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2008/07/03/212442.htmlhttp://www.aygfsteel.com/zh-qi/comments/212442.htmlhttp://www.aygfsteel.com/zh-qi/archive/2008/07/03/212442.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/212442.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/212442.html 一、page 对象
     page对象代表JSP本nQ更准确地说它代表JSP被{译后的ServletQ它可以调用ServletcL定义的方法?br />         
二、config 对象
     config 对象里存攄一些Servlet 初始的数据结构?br />      config 对象实现于javax.servlet.ServletConfig 接口Q它共有下列四种ҎQ?br />           public String getInitParameter(name)
          public java.util.Enumeration getInitParameterNames( )
          public ServletContext getServletContext( )
          public Sring getServletName( )

三、request 对象
     request 对象包含所有请求的信息Q如Q请求的来源、标头、cookies和请求相关的参数值等{?br />      request 对象实现javax.servlet.http.HttpServletRequest接口的,所提供的方法可以将它分为四大类Q?br />        1.储存和取得属性方法;
         void setAttribute(String name, Object value)    讑֮name属性的gؓvalue
         Enumeration getAttributeNamesInScope(int scope)    取得所有scope 范围的属?br />          Object getAttribute(String name)           取得name 属性的?br />          void removeAttribute(String name)           U除name 属性的?br />        2.取得h参数的方?br />            String getParameter(String name)          取得name 的参数?br />            Enumeration getParameterNames( )          取得所有的参数名称
           String [] getParameterValues(String name)     取得所有name 的参数?br />            Map getParameterMap( )               取得一个要求参数的Map
       3.能够取得hHTTP 标头的方?br />            String getHeader(String name)            取得name 的标?br />            Enumeration getHeaderNames()             取得所有的标头名称
           Enumeration getHeaders(String name)         取得所有name 的标?br />            int getIntHeader(String name)            取得整数cdname 的标?br />            long getDateHeader(String name)           取得日期cdname 的标?br />            Cookie [] getCookies( )               取得与请求有关的cookies
       4.其他的方?br />            String getContextPath( )               取得Context 路径(即站台名U?
           String getMethod( )                  取得HTTP 的方?GET、POST)
           String getProtocol( )           取得使用的协?(HTTP/1.1、HTTP/1.0 )
           String getQueryString( )          取得h的参数字W串Q不q,HTTP的方法必MؓGET
           String getRequestedSessionId( )      取得用户端的Session ID
           String getRequestURI( )          取得h的URLQ但是不包括h的参数字W串
           String getRemoteAddr( )          取得用户的IP 地址
           String getRemoteHost( )          取得用户的主机名U?br />            int getRemotePort( )            取得用户的主机端?br />            String getRemoteUser( )            取得用户的名U?br />            void etCharacterEncoding(String encoding)  讑֮~码格式Q用来解决窗体传递中文的问题

四、response 对象
       response 对象主要JSP 处理数据后的l果传回到客L?br />        response 对象是实现javax.servlet.http.HttpServletResponse 接口。response对象所提供的方法?br />        1.讑֮表头的方?br />            void addCookie(Cookie cookie)             新增cookie
           void addDateHeader(String name, long date)     新增longcd的值到name标头
           void addHeader(String name, String value)      新增Stringcd的值到name标头
           void addIntHeader(String name, int value)      新增intcd的值到name标头
           void setDateHeader(String name, long date)     指定longcd的值到name标头
           void setHeader(String name, String value)      指定Stringcd的值到name标头
           void setIntHeader(String name, int value)      指定intcd的值到name标头
       2.讑֮响应状态码的方?br />            void sendError(int sc)               传送状态码(status code)
           void sendError(int sc, String msg)        传送状态码和错误信?br />            void setStatus(int sc)               讑֮状态码
       3.用来URL 重写(rewriting)的方?nbsp;   
           String encodeRedirectURL(String url)       对用sendRedirect( )Ҏ的URL予以~码

五、out 对象
       out 对象能把l果输出到网上?br />        out主要是用来控制管理输出的~冲?buffer)和输出流(output stream)?br />            void clear( )              清除输出~冲区的内容
           void clearBuffer( )           清除输出~冲区的内容
           void close( )              关闭输出,清除所有的内容
           int getBufferSize( )           取得目前~冲区的大小(KB)
           int getRemaining( )           取得目前使用后还剩下的缓冲区大小(KB)
           boolean isAutoFlush( )          回传true表示~冲区满时会自动清除Qfalse表示不会自动清除q且产生异常处理
        
六、session 对象
       session对象表示目前个别用户的会?session)状况?br />        session对象实现javax.servlet.http.HttpSession接口QHttpSession接口所提供的方?br />            long getCreationTime()         取得session产生的时_单位是毫U?br />            String getId()             取得session 的ID
           long getLastAccessedTime()       取得用户最后通过q个session送出h的时?br />            long getMaxInactiveInterval()      取得最大session不活动的旉Q若过q时_session 会失效
           void invalidate()            取消session 对象Qƈ对象存攄内容完全抛弃
           boolean isNew()             判断session 是否???br />            void setMaxInactiveInterval(int interval) 讑֮最大session不活动的旉Q若过q时_session 会失效

七、application对象
       application对象最常被使用在存取环境的信息?br />        因ؓ环境的信息通常都储存在ServletContext中,所以常利用application对象来存取ServletContext中的信息?br />        application 对象实现javax.servlet.ServletContext 接口QServletContext接口容器所提供的方?br />            int getMajorVersion( )                  取得Container主要的Servlet API版本
           int getMinorVersion( )                  取得Containerơ要的Servlet API 版本
           String getServerInfo( )                  取得Container的名U和版本
           String getMimeType(String file)             取得指定文g的MIME cd
           ServletContext getContext(String uripath)        取得指定Local URL的Application context
           String getRealPath(String path)             取得本地端path的绝对\?br />            void log(String message)                 信息写入log文g?br />            void log(String message, Throwable throwable)   stack trace 所产生的异怿息写入log文g?br />
八、pageContext对象
       pageContext对象能够存取其他隐含对象?br />        1.pageContext对象存取其他隐含对象属性的ҎQ此旉要指定范围的参数?br />            Object getAttribute(String name, int scope)
           Enumeration getAttributeNamesInScope(int scope)
           void removeAttribute(String name, int scope)
           void setAttribute(String name, Object value, int scope)
       范围参数有四个,分别代表四种范围QPAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE
       2.PageContext对象取得其他隐含对象的方?br />            Exception getException( )           回传目前|页的异常,不过此网要为error pageQ?br />            JspWriter getOut( )              回传目前|页的输出流Q例如:out
           Object getPage( )               回传目前|页的Servlet 实体(instance)Q例如:page
           ServletRequest getRequest( )         回传目前|页的请求,例如Qrequest
           ServletResponse getResponse( )        回传目前|页的响应,例如Qresponse
           ServletConfig getServletConfig( )      回传目前此网늚ServletConfig 对象Q例如:config
           ServletContext getServletContext( )     回传目前此网늚执行环境(context)Q例如:application
           HttpSession getSession( )          回传和目前网|联系的会?session)Q例如:session
       3.PageContext对象提供取得属性的Ҏ
           Object getAttribute(String name, int scope)  回传name 属性,范围为scope的属性对象,回传cd为Object
           Enumeration getAttributeNamesInScope(int scope) 回传所有属性范围ؓscope 的属性名Uͼ回传cd为Enumeration
           int getAttributesScope(String name)       回传属性名UCؓname 的属性范?br />            void removeAttribute(String name)        U除属性名UCؓname 的属性对?br />            void removeAttribute(String name, int scope) U除属性名UCؓnameQ范围ؓscope 的属性对?br />            void setAttribute(String name,Object value,int scope)指定属性对象的名称为name、gؓvalue、范围ؓscope
           Object findAttribute(String name)         L在所有范围中属性名UCؓname 的属性对?br />
九、exception对象
       若要使用exception 对象Ӟ必须在page 指o中设定?lt;%@ page isErrorPage="true" %>才能使用?br />        exception提供的三个方法:
           getMessage( )
           getLocalizedMessage( )?br />            printStackTrace(new java.io.PrintWriter(out))


W看风云 2008-07-03 21:51 发表评论
]]>
վ֩ģ壺 Ʊ| Ȫ| | ˮ| ƽ| ͨɽ| | | | ɽ| ͩ| | | | | | | | | | | | | | | ¸| Ϸ| Ӷ| ʯ| | | | Ͳ| | ̷| | | | | | |