??xml version="1.0" encoding="utf-8" standalone="yes"?>国产中文日韩欧美,日本一区二区三区dvd视频在线,亚洲免费av片http://www.aygfsteel.com/Crying/category/27216.html????????, ??????????握! zh-cnThu, 22 May 2008 18:43:55 GMTThu, 22 May 2008 18:43:55 GMT60利用servlet监听器实现jsp中在Uh数统计的Ҏhttp://www.aygfsteel.com/Crying/articles/195587.htmlCryingCryingThu, 24 Apr 2008 07:01:00 GMThttp://www.aygfsteel.com/Crying/articles/195587.htmlhttp://www.aygfsteel.com/Crying/comments/195587.htmlhttp://www.aygfsteel.com/Crying/articles/195587.html#Feedback0http://www.aygfsteel.com/Crying/comments/commentRss/195587.htmlhttp://www.aygfsteel.com/Crying/services/trackbacks/195587.html

在网站中l常需要进行在Uh数的l计。过ȝ一般做法是l合d和退出功能,卛_用户输入用户名密码进行登录的时候计数器?/font>1Q然后当用户点击退出按钮退出系l的时候计数器?/font>1。这U处理方式存在一些缺点,例如Q用h常登录后Q可能会忘记点击退出按钮,而直接关闭浏览器Q导致计数器?/font>1的操作没有及时执行;|站上还l常有一些内Ҏ不需要登录就可以讉K的,在这U情况下也无法用上面的Ҏq行在线人数l计?/font>
  我们可以利用Servlet规范中定义的事g监听器(ListenerQ来解决q个问题Q实现更准确的在Uh数统计功能。对每一个正在访问的用户Q?/font>J2EE应用服务器会为其建立一个对应的HttpSession对象。当一个浏览器W一ơ访问网站的时候,J2EE应用服务器会新徏一?/font>HttpSession对象Qƈ触发HttpSession创徏事gQ如果注册了HttpSessionListener事g监听器,则会调用HttpSessionListener事g监听器的sessionCreatedҎ。相反,当这个浏览器讉Kl束时的时候,J2EE应用服务器会销毁相应的HttpSession对象Q触?/font>HttpSession销毁事Ӟ同时调用所注册HttpSessionListener事g监听器的sessionDestroyedҎ?/font>
  可见Q对应于一个用戯问的开始和l束Q相应的?/font>sessionCreatedҎ?/font>sessionDestroyedҎ执行。这P我们只需要在HttpSessionListener实现cȝsessionCreatedҎ中让计数器加1Q在sessionDestroyedҎ中让计数器减1Q就L实现了网站在Uh数的l计功能?/font>
  下面是利用HttpSessionListener实现在线人数l计的一个例子,q个例子已经在中创Y件的J2EE应用服务?/font>InforWeb中测试通过?/font>
  首先Q编写一个简单的计数器,代码如下Q?/span>

1.    package accp.onlinecounter;

2.    public class OnlineCounter {

3.        private static long online = 0;    

4.        public static long getOnline() {

5.            return online;

6.        }    

7.        public static void raise(){

8.            online++;

9.        } 

10.       public static void reduce(){

11.           online--;

12.      }

13.   }


  然后Q编?/font>HttpSessionListener实现c,在这个实现类?/font>sessionCreatedҎ中调?/font>OnlineCounter?/font>raiseҎQ在sessionDestroyedҎ中调?/font>OnlineCounter?/font>reduceҎQ代码如下:

1.    package accp.onlinecounter;

2.    import javax.servlet.http.HttpSessionEvent;

3.    import javax.servlet.http.HttpSessionListener;

4.    public class OnlineCounterListener implements HttpSessionListener {

5.        public void sessionCreated(HttpSessionEvent hse) {

6.            OnlineCounter.raise();

7.        }

8.        public void sessionDestroyed(HttpSessionEvent hse) {

9.            OnlineCounter.reduce();

10.       }

11.   }


  再然后,把这?/font>HttpSessionListener实现cL册到|站应用中,也就是在|站应用?/font>web.xml中加入如下内容:

1.    <web-app>

2.        ……

3.        <listener>

4.            <listener-class>

5.                accp.OnlineCounterListener

6.            </listener-class>

7.        </listener>

8.        ……

9.    </web-app>


  OKQ在Uh数统计功能已l实玎ͼ只要?/font>JSP面中加入下面这L脚本p昄但前在线人数了:

1.    <%@ page language="java" pageEncoding="GB2312" %>

2.    <%@ page import="accp.OnlineCounter" %>

3.    <html>

4.        <head><title>On Line Counert</title></head>

5.        <body bgcolor="#FFFFFF">

6.            On line:<%=OnlineCounter.getOnline()%>

7.        </body>

8.    </html>



Crying 2008-04-24 15:01 发表评论
]]>
利用监听?定时执行 QServletContexListenerQ?/title><link>http://www.aygfsteel.com/Crying/articles/186636.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Sun, 16 Mar 2008 10:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/Crying/articles/186636.html</guid><wfw:comment>http://www.aygfsteel.com/Crying/comments/186636.html</wfw:comment><comments>http://www.aygfsteel.com/Crying/articles/186636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Crying/comments/commentRss/186636.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Crying/services/trackbacks/186636.html</trackback:ping><description><![CDATA[<p>Timer一U工PU程用其安排以后在后台线E中执行的Q务。可安排d执行一ơ,或者定期重复执行? <p>与每?<tt>Timer</tt> 对象相对应的是单个后台线E,用于序地执行所有计时器d。计时器d应该q速完成。如果完成某个计时器d的时间太长,那么它会“独占”计时器的d执行U程。因此,q就可能延迟后箋d的执行,而这些Q务就可能“堆在一?#8221;Qƈ且在上述不友好的d最l完成时才能够被快速连l地执行? <p>?<tt>Timer</tt> 对象最后的引用完成后,<em>q且</em> 所有未处理的Q务都已执行完成后Q计时器的Q务执行线E会正常l止Qƈ且成为垃圑֛收的对象Q。但是这可能要很长时间后才发生。默认情况下QQ务执行线Eƈ不作?em>守护U程</em> 来运行,所以它能够L应用E序l止。如果调用者想要快速终止计时器的Q务执行线E,那么调用者应该调用计时器?<tt>cancel</tt> Ҏ? <p>如果意外l止了计时器的Q务执行线E,例如调用了它?<tt>stop</tt> ҎQ那么所有以后对该计时器安排d的尝试都导?<tt>IllegalStateException</tt>Q就好像调用了计时器?<tt>cancel</tt> Ҏ一栗? <p>此类是线E安全的Q多个线E可以共享单?<tt>Timer</tt> 对象而无需q行外部同步? <p>此类<em>?/em> 提供实时保证Q它使用 <tt>Object.wait(long)</tt> Ҏ来安排Q务? <p>实现注意事项Q此cd扩展到大量同时安排的dQ存在数千个都没有问题)。在内部Q它使用二进制堆来表C其d队列Q所以安排Q务的开销?O(log n)Q其?n 是同时安排的d数? <p>实现注意事项Q所有构造方法都启动计时器线E?/p> <p><br /> import java.util.Timer;<br /> import javax.servlet.ServletContextEvent;<br /> import javax.servlet.ServletContextListener;</p> <p>public class MyListner implements ServletContextListener {<br />     private Timer timer=null;<br />     private long start=0;<br />     private long end=1000*60;</p> <p> public void contextInitialized(ServletContextEvent event1) {<br />      timer=new Timer(true);<br />      timer.schedule(new Str(),start,end);<br /> <table cellspacing="0" cellpadding="3" width="100%" summary="" border="1"> <tbody> <tr class="TableRowColor" bgcolor="white"> <td valign="top" align="right" width="1%"><font size="-1"><code>void</code></font></td> <td><code><strong><a href="mk:@MSITStore:C:\Documents%20and%20Settings\a\桌面\JDK_API_1_6_zh_CN.CHM::/java/util/Timer.html#schedule(java.util.TimerTask, java.util.Date)">schedule</a></strong>(<a title="java.util 中的c? href="mk:@MSITStore:C:\Documents%20and%20Settings\a\桌面\JDK_API_1_6_zh_CN.CHM::/java/util/TimerTask.html">TimerTask</a> task, <a title="java.util 中的c? href="mk:@MSITStore:C:\Documents%20and%20Settings\a\桌面\JDK_API_1_6_zh_CN.CHM::/java/util/Date.html">Date</a> time)</code> <br />           安排在指定的旉执行指定的Q务?/td> </tr> <tr class="TableRowColor" bgcolor="white"> <td valign="top" align="right" width="1%"><font size="-1"><code> void</code></font></td> <td><code><strong><a href="mk:@MSITStore:C:\Documents%20and%20Settings\a\桌面\JDK_API_1_6_zh_CN.CHM::/java/util/Timer.html#schedule(java.util.TimerTask, java.util.Date, long)">schedule</a></strong>(<a title="java.util 中的c? href="mk:@MSITStore:C:\Documents%20and%20Settings\a\桌面\JDK_API_1_6_zh_CN.CHM::/java/util/TimerTask.html">TimerTask</a> task, <a title="java.util 中的c? href="mk:@MSITStore:C:\Documents%20and%20Settings\a\桌面\JDK_API_1_6_zh_CN.CHM::/java/util/Date.html">Date</a> firstTime, long period)</code> <br />           安排指定的Q务在指定的时间开始进行重复的<em>固定延迟执行</em>?/td> </tr> <tr class="TableRowColor" bgcolor="white"> <td valign="top" align="right" width="1%"><font size="-1"><code> void</code></font></td> <td><code><strong><a href="mk:@MSITStore:C:\Documents%20and%20Settings\a\桌面\JDK_API_1_6_zh_CN.CHM::/java/util/Timer.html#schedule(java.util.TimerTask, long)">schedule</a></strong>(<a title="java.util 中的c? href="mk:@MSITStore:C:\Documents%20and%20Settings\a\桌面\JDK_API_1_6_zh_CN.CHM::/java/util/TimerTask.html">TimerTask</a> task, long delay)</code> <br />           安排在指定gq后执行指定的Q务?/td> </tr> <tr class="TableRowColor" bgcolor="white"> <td valign="top" align="right" width="1%"><font size="-1"><code> void</code></font></td> <td><code><strong><a href="mk:@MSITStore:C:\Documents%20and%20Settings\a\桌面\JDK_API_1_6_zh_CN.CHM::/java/util/Timer.html#schedule(java.util.TimerTask, long, long)">schedule</a></strong>(<a title="java.util 中的c? href="mk:@MSITStore:C:\Documents%20and%20Settings\a\桌面\JDK_API_1_6_zh_CN.CHM::/java/util/TimerTask.html">TimerTask</a> task, long delay, long period)</code> <br />           安排指定的Q务从指定的gq后开始进行重复的<em>固定延迟执行</em></td> </tr> </tbody> </table> <br />  }<br />  public void contextDestroyed(ServletContextEvent event0)  {<br />   timer.cancel();// l止此计时器Q丢弃所有当前已安排的Q务?br />  }</p> <p>}<br /> </p> <p>import java.util.Date;<br /> import java.util.TimerTask;</p> <p>public class Str extends TimerTask{<br /> <br />  public void run() {<br />     System.out.println("定时试成功Q?+(new Date()));<br /> }<br /> }<br /> <br /> web.xml加以配置</p> <p><?xml version="1.0" encoding="UTF-8"?><br /> <web-app version="2.5" <br />  xmlns="http://java.sun.com/xml/ns/javaee" <br />  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <br />  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee <br />  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><br />  <listener><br />     <listener-class> MyListner</listener-class> <br />  </listener><br /> <br /> <br /> ------------------------------------------------------------------------------------------------------------<br /> <br /> </p> <p style="margin-left: 21pt"><a >原文出处Q?br /> http://blog.csdn.net/feifniao/archive/2007/11/22/1897392.aspx</a></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">首先Q如果你?/span><span style="font-size: 10pt; font-family: Verdana">web.xml</span><span style="font-size: 10pt; font-family: 宋体">文g中的配置是这LQ?/span></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">  <context-param><br />         <param-name>contextConfigLocation</param-name><br />         <param-value><br />          /WEB-INF/classes/applicationContext-*.xml<br />         </param-value><br />  </context-param></span></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">那么需要在工程下创Z个以</span><span style="font-size: 10pt; font-family: Verdana">applicationContext- </span><span style="font-size: 10pt; font-family: 宋体">为开头的</span><span style="font-size: 10pt; font-family: Verdana">xml</span><span style="font-size: 10pt; font-family: 宋体">文g</span><span style="font-size: 10pt; font-family: Verdana">eg:applicationContext-jobconfig.xml</span></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">xml</span><span style="font-size: 10pt; font-family: 宋体">的头和结N分跟其他</span><span style="font-size: 10pt; font-family: Verdana">spring</span><span style="font-size: 10pt; font-family: 宋体">配置文g怼Q就不赘qͼ正文如下Q?/span></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana"> <bean id="youJobName(</span><span style="font-size: 10pt; font-family: 宋体">cd?/span><span style="font-size: 10pt; font-family: Verdana">)" class="com.******.YourJobClassLocation(</span><span style="font-size: 10pt; font-family: 宋体">cȝ定位</span><span style="font-size: 10pt; font-family: Verdana">)" /><br />  <bean id="doYourJob(</span><span style="font-size: 10pt; font-family: 宋体">别名</span><span style="font-size: 10pt; font-family: Verdana">)" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><br />      <property name="targetObject"><br />       <ref bean="youJobName(</span><span style="font-size: 10pt; font-family: 宋体">cd?/span><span style="font-size: 10pt; font-family: Verdana">)""/><br />      </property><br />      <property name="targetMethod"><br />       <value>runMethodName(</span><span style="font-size: 10pt; font-family: 宋体">定时执行的方法名</span><span style="font-size: 10pt; font-family: Verdana">)</value><br />      </property> <br />  </bean><br />  <br />  <bean id="youJobNameTrigger(</span><span style="font-size: 10pt; font-family: 宋体">触发器别?/span><span style="font-size: 10pt; font-family: Verdana">)" class="org.springframework.scheduling.quartz.CronTriggerBean"><br />    <property name="jobDetail"><br />      <ref bean="doYourJob(</span><span style="font-size: 10pt; font-family: 宋体">别名</span><span style="font-size: 10pt; font-family: Verdana">)""/><br />    </property><br />    <property name="cronExpression"><br />     <value>0 0/20 * * * ?(</span><span style="font-size: 10pt; color: red; font-family: 宋体">定时的时间配|?/span><span style="font-size: 10pt; font-family: Verdana">)</value><br />    </property><br />  </bean></span></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana"> <bean id="doScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><br />    <property name="triggers"><br />      <list><br />       <ref local="youJobNameTrigger(</span><span style="font-size: 10pt; font-family: 宋体">触发器别?/span><span style="font-size: 10pt; font-family: Verdana">)"/>  <br />      </list><br />    </property><br />  </bean></span></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">q样的配|几本就可以q{了,但是有一个地方可能是你需要根据你的需求来定的,那就是触发时间?/span></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">下面有一些关于时间配|的说明Q?/span></p> <p> <table cellspacing="8" cellpadding="0" border="0"> <tbody> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><strong><span style="font-size: 11pt; font-family: 宋体">字段序</span></strong></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><strong> </strong></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><strong><span style="font-size: 11pt; font-family: 宋体">允许?/span></strong></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><strong> </strong></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><strong><span style="font-size: 11pt; font-family: 宋体">允许的特D字W?/span></strong></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">U?/span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">0-59</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * /</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">?/span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">0-59</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * /</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">时</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">0-23</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * /</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">日期</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">1-31</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * ? / L W C</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">月䆾</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">1-12 </span><span style="font-family: 宋体">或?JAN-DEC</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * /</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">星期</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">1-7 </span><span style="font-family: 宋体">或?SUN-SAT</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * ? / L C #</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">q_可选)</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">留空, 1970-2099</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * /</span></p> </td> </tr> </tbody> </table> </p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana"><br /> The '*' character is used to specify all values. For example, "*" in the minute field means "every minute". <br /> “*”</span><span style="font-size: 10pt; font-family: 宋体">字符被用来指定所有的倹{如Q?/span><span style="font-size: 10pt; font-family: Verdana">”*“</span><span style="font-size: 10pt; font-family: 宋体">在分钟的字段域里表示</span><span style="font-size: 10pt; font-family: Verdana">“</span><span style="font-size: 10pt; font-family: 宋体">每分?/span><span style="font-size: 10pt; font-family: Verdana">”</span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify 'no specific value'. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification. <br /> “?”</span><span style="font-size: 10pt; font-family: 宋体">字符只在日期域和星期域中使用。它被用来指?/span><span style="font-size: 10pt; font-family: Verdana">“</span><span style="font-size: 10pt; font-family: 宋体">非明的?/span><span style="font-size: 10pt; font-family: Verdana">”</span><span style="font-size: 10pt; font-family: 宋体">。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你׃明白?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> </span><span style="font-size: 10pt; font-family: 宋体">月䆾中的日期和星期中的日期这两个元素时互斥的一起应该通过讄一个问?/span><span style="font-size: 10pt; font-family: Verdana">(?)</span><span style="font-size: 10pt; font-family: 宋体">来表明不惌|那个字D?/span><span style="font-size: 10pt; font-family: Verdana"><br /> <br /> The '-' character is used to specify ranges For example "10-12" in the hour field means "the hours 10, 11 and 12". <br /> “-”</span><span style="font-size: 10pt; font-family: 宋体">字符被用来指定一个范围。如Q?/span><span style="font-size: 10pt; font-family: Verdana">“10-12”</span><span style="font-size: 10pt; font-family: 宋体">在小时域意味着</span><span style="font-size: 10pt; font-family: Verdana">“10</span><span style="font-size: 10pt; font-family: 宋体">炏V?/span><span style="font-size: 10pt; font-family: Verdana">11</span><span style="font-size: 10pt; font-family: 宋体">炏V?/span><span style="font-size: 10pt; font-family: Verdana">12</span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana">”</span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> <br /> The ',' character is used to specify additional values. For example "MON,WED,FRI" in the day-of-week field means "the days Monday, Wednesday, and Friday". <br /> “,”</span><span style="font-size: 10pt; font-family: 宋体">字符被用来指定另外的倹{如Q?/span><span style="font-size: 10pt; font-family: Verdana">“MON,WED,FRI”</span><span style="font-size: 10pt; font-family: 宋体">在星期域里表C?/span><span style="font-size: 10pt; font-family: Verdana">”</span><span style="font-size: 10pt; font-family: 宋体">星期一、星期三、星期五</span><span style="font-size: 10pt; font-family: Verdana">”. <br /> <br /> The '/' character is used to specify increments. For example "0/15" in the seconds field means "the seconds 0, 15, 30, and 45". And "5/15" in the seconds field means "the seconds 5, 20, 35, and 50". Specifying '*' before the '/' is equivalent to specifying 0 is the value to start with. Essentially, for each field in the expression, there is a set of numbers that can be turned on or off. For seconds and minutes, the numbers range from 0 to 59. For hours 0 to 23, for days of the month 0 to 31, and for months 1 to 12. The "/" character simply helps you turn on every "nth" value in the given set. Thus "7/6" in the month field only turns on month "7", it does NOT mean every 6th month, please note that subtlety. </span></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">"/"</span><span style="font-size: 10pt; font-family: 宋体">字符用来指定渐增的倹{例?/span><span style="font-size: 10pt; font-family: Verdana">0/15</span><span style="font-size: 10pt; font-family: 宋体">出现在秒字段的时候意味着</span><span style="font-size: 10pt; font-family: Verdana">“</span><span style="font-size: 10pt; font-family: 宋体">在第</span><span style="font-size: 10pt; font-family: Verdana">0</span><span style="font-size: 10pt; font-family: 宋体">Q?/span><span style="font-size: 10pt; font-family: Verdana">15</span><span style="font-size: 10pt; font-family: 宋体">Q?/span><span style="font-size: 10pt; font-family: Verdana">30</span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana">45</span><span style="font-size: 10pt; font-family: 宋体">U?/span><span style="font-size: 10pt; font-family: Verdana">”</span><span style="font-size: 10pt; font-family: 宋体">Q的时候被触发Q。?/span><span style="font-size: 10pt; font-family: Verdana">5/15</span><span style="font-size: 10pt; font-family: 宋体">出现在秒字段的时候意味着</span><span style="font-size: 10pt; font-family: Verdana">“</span><span style="font-size: 10pt; font-family: 宋体">在第</span><span style="font-size: 10pt; font-family: Verdana">5</span><span style="font-size: 10pt; font-family: 宋体">Q?/span><span style="font-size: 10pt; font-family: Verdana">20</span><span style="font-size: 10pt; font-family: 宋体">Q?/span><span style="font-size: 10pt; font-family: Verdana">35</span><span style="font-size: 10pt; font-family: 宋体">和第</span><span style="font-size: 10pt; font-family: Verdana">50</span><span style="font-size: 10pt; font-family: 宋体">U?/span><span style="font-size: 10pt; font-family: Verdana">”</span><span style="font-size: 10pt; font-family: 宋体">Q的时候被触发Q?/span><span style="font-size: 10pt; font-family: Verdana">"*/"</span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana">"0/"</span><span style="font-size: 10pt; font-family: 宋体">的指定是{h的?/span></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">注:当分?/span><span style="font-size: 10pt; font-family: Verdana">+</span><span style="font-size: 10pt; font-family: 宋体">分母的值大于该字段的最大|如在U钟字段出现</span><span style="font-size: 10pt; font-family: Verdana">45/20</span><span style="font-size: 10pt; font-family: 宋体">的时候,表示在第</span><span style="font-size: 10pt; font-family: Verdana">45</span><span style="font-size: 10pt; font-family: 宋体">U以后的?/span><span style="font-size: 10pt; font-family: Verdana">20</span><span style="font-size: 10pt; font-family: 宋体">会触发一ơ,但是</span><span style="font-size: 10pt; font-family: Verdana">20</span><span style="font-size: 10pt; font-family: 宋体">U以后又做另外的时间段以内了,所以该字段?/span><span style="font-size: 10pt; font-family: Verdana">/20</span><span style="font-size: 10pt; font-family: 宋体">卛_效,如改?/span><span style="font-size: 10pt; font-family: Verdana">45/10 </span><span style="font-size: 10pt; font-family: 宋体">则只?/span><span style="font-size: 10pt; font-family: 宋体">W?/span><span style="font-size: 10pt; font-family: Verdana">45 </span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana">55</span><span style="font-size: 10pt; font-family: 宋体">U会执行一ơ?/span><span style="font-size: 10pt; font-family: Verdana"><br /> <br /> The 'L' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "last", but it has different meaning in each of the two fields. For example, the value "L" in the day-of-month field means "the last day of the month" - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means "7" or "SAT". But if used in the day-of-week field after another value, it means "the last xxx day of the month" - for example "6L" means "the last friday of the month". When using the 'L' option, it is important not to specify lists, or ranges of values, as you'll get confusing results. <br /> <br /> L</span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana">‘last’</span><span style="font-size: 10pt; font-family: 宋体">的省略写法可以表C?/span><span style="font-size: 10pt; font-family: Verdana">day-of-month</span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana">day-of-week</span><span style="font-size: 10pt; font-family: 宋体">域,但在两个字段中的意思不同,例如</span><span style="font-size: 10pt; font-family: Verdana">day-of-month</span><span style="font-size: 10pt; font-family: 宋体">域中表示一个月的最后一天,</span><span style="font-size: 10pt; font-family: Verdana"><br /> </span><span style="font-size: 10pt; font-family: 宋体">如果?/span><span style="font-size: 10pt; font-family: Verdana">day-of-week</span><span style="font-size: 10pt; font-family: 宋体">域表C?/span><span style="font-size: 10pt; font-family: Verdana">‘7’</span><span style="font-size: 10pt; font-family: 宋体">或?/span><span style="font-size: 10pt; font-family: Verdana">‘SAT’</span><span style="font-size: 10pt; font-family: 宋体">Q如果在</span><span style="font-size: 10pt; font-family: Verdana">day-of-week</span><span style="font-size: 10pt; font-family: 宋体">域中前面加上数字Q它表示一个月的最后几天,例如</span><span style="font-size: 10pt; font-family: Verdana">‘6L’</span><span style="font-size: 10pt; font-family: 宋体">pCZ个月的最后一?/span><span style="font-size: 10pt; font-family: Verdana"><br /> </span><span style="font-size: 10pt; font-family: 宋体">星期五,</span><span style="font-size: 10pt; font-family: Verdana"><br /> <br /> The 'W' character is allowed for the day-of-month field. This character is used to specify the weekday (Monday-Friday) nearest the given day. As an example, if you were to specify "15W" as the value for the day-of-month field, the meaning is: "the nearest weekday to the 15th of the month". So if the 15th is a Saturday, the trigger will fire on Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th. However if you specify "1W" as the value for day-of-month, and the 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not 'jump' over the boundary of a month's days. The 'W' character can only be specified when the day-of-month is a single day, not a range or list of days<br /> . <br /> The 'L' and 'W' characters can also be combined for the day-of-month expression to yield 'LW', which translates to "last weekday of the month". <br /> <br /> The '#' character is allowed for the day-of-week field. This character is used to specify "the nth" XXX day of the month. For example, the value of "6#3" in the day-of-week field means the third Friday of the month (day 6 = Friday and "#3" = the 3rd one in the month). Other examples: "2#1" = the first Monday of the month and "4#5" = the fifth Wednesday of the month. Note that if you specify "#5" and there is not 5 of the given day-of-week in the month, then no firing will occur that month. <br /> <br /> The 'C' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "calendar". This means values are calculated against the associated calendar, if any. If no calendar is associated, then it is equivalent to having an all-inclusive calendar. A value of "5C" in the day-of-month field means "the first day included by the calendar on or after the 5th". A value of "1C" in the day-of-week field means "the first day included by the calendar on or after sunday". <br /> </span><span style="font-size: 10pt; font-family: 宋体">关于</span><span style="font-size: 10pt; font-family: Verdana">cronExpression</span><span style="font-size: 10pt; font-family: 宋体">的介l?/span><span style="font-size: 10pt; font-family: Verdana">:<br /> </span><span style="font-size: 10pt; font-family: 宋体"> </span><span style="font-size: 10pt; font-family: Verdana"> <br /> </span><span style="font-size: 10pt; font-family: 宋体">字段</span><span style="font-size: 10pt; font-family: 宋体">允许?/span><span style="font-size: 10pt; font-family: 宋体">允许的特D字W?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> </span><span style="font-size: 10pt; font-family: 宋体">U?/span><span style="font-size: 10pt; font-family: Verdana"> 0-59 , - * / <br /> </span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana"> 0-59 , - * / <br /> </span><span style="font-size: 10pt; font-family: 宋体">时</span><span style="font-size: 10pt; font-family: Verdana"> 0-23 , - * / <br /> </span><span style="font-size: 10pt; font-family: 宋体">日期</span><span style="font-size: 10pt; font-family: Verdana"> 1-31 , - * ? / L W C <br /> </span><span style="font-size: 10pt; font-family: 宋体">月䆾</span><span style="font-size: 10pt; font-family: Verdana"> 1-12 </span><span style="font-size: 10pt; font-family: 宋体">或?/span><span style="font-size: 10pt; font-family: Verdana"> JAN-DEC , - * / <br /> </span><span style="font-size: 10pt; font-family: 宋体">星期</span><span style="font-size: 10pt; font-family: Verdana"> 1-7 </span><span style="font-size: 10pt; font-family: 宋体">或?/span><span style="font-size: 10pt; font-family: Verdana"> SUN-SAT , - * ? / L C # <br /> </span><span style="font-size: 10pt; font-family: 宋体">q_可选)</span><span style="font-size: 10pt; font-family: 宋体">留空</span><span style="font-size: 10pt; font-family: Verdana">, 1970-2099 , - * / <br /> </span><span style="font-size: 10pt; font-family: 宋体">表达式意?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 0 12 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">每天中午</span><span style="font-size: 10pt; font-family: Verdana">12</span><span style="font-size: 10pt; font-family: 宋体">点触?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 15 10 ? * *" </span><span style="font-size: 10pt; font-family: 宋体">每天上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 15 10 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">每天上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 15 10 * * ? *" </span><span style="font-size: 10pt; font-family: 宋体">每天上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 15 10 * * ? 2005" 2005</span><span style="font-size: 10pt; font-family: 宋体">q的每天上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 * 14 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">在每天下?/span><span style="font-size: 10pt; font-family: Verdana">2</span><span style="font-size: 10pt; font-family: 宋体">点到下午</span><span style="font-size: 10pt; font-family: Verdana">2:59</span><span style="font-size: 10pt; font-family: 宋体">期间的每</span><span style="font-size: 10pt; font-family: Verdana">1</span><span style="font-size: 10pt; font-family: 宋体">分钟触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 0/5 14 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">在每天下?/span><span style="font-size: 10pt; font-family: Verdana">2</span><span style="font-size: 10pt; font-family: 宋体">点到下午</span><span style="font-size: 10pt; font-family: Verdana">2:55</span><span style="font-size: 10pt; font-family: 宋体">期间的每</span><span style="font-size: 10pt; font-family: Verdana">5</span><span style="font-size: 10pt; font-family: 宋体">分钟触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 0/5 14,18 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">在每天下?/span><span style="font-size: 10pt; font-family: Verdana">2</span><span style="font-size: 10pt; font-family: 宋体">点到</span><span style="font-size: 10pt; font-family: Verdana">2:55</span><span style="font-size: 10pt; font-family: 宋体">期间和下?/span><span style="font-size: 10pt; font-family: Verdana">6</span><span style="font-size: 10pt; font-family: 宋体">点到</span><span style="font-size: 10pt; font-family: Verdana">6:55</span><span style="font-size: 10pt; font-family: 宋体">期间的每</span><span style="font-size: 10pt; font-family: Verdana">5</span><span style="font-size: 10pt; font-family: 宋体">分钟触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 0-5 14 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">在每天下?/span><span style="font-size: 10pt; font-family: Verdana">2</span><span style="font-size: 10pt; font-family: 宋体">点到下午</span><span style="font-size: 10pt; font-family: Verdana">2:05</span><span style="font-size: 10pt; font-family: 宋体">期间的每</span><span style="font-size: 10pt; font-family: Verdana">1</span><span style="font-size: 10pt; font-family: 宋体">分钟触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 10,44 14 ? 3 WED" </span><span style="font-size: 10pt; font-family: 宋体">每年三月的星期三的下?/span><span style="font-size: 10pt; font-family: Verdana">2:10</span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana">2:44</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 15 10 ? * MON-FRI" </span><span style="font-size: 10pt; font-family: 宋体">周一臛_五的上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 15 10 15 * ?" </span><span style="font-size: 10pt; font-family: 宋体">每月</span><span style="font-size: 10pt; font-family: Verdana">15</span><span style="font-size: 10pt; font-family: 宋体">日上?/span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 15 10 L * ?" </span><span style="font-size: 10pt; font-family: 宋体">每月最后一日的上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 15 10 ? * 6L" </span><span style="font-size: 10pt; font-family: 宋体">每月的最后一个星期五上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 15 10 ? * 6L 2002-2005" 2002</span><span style="font-size: 10pt; font-family: 宋体">q至</span><span style="font-size: 10pt; font-family: Verdana">2005</span><span style="font-size: 10pt; font-family: 宋体">q的每月的最后一个星期五上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> "0 15 10 ? * 6#3" </span><span style="font-size: 10pt; font-family: 宋体">每月的第三个星期五上?/span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br /> </span><span style="font-size: 10pt; font-family: 宋体">每天早上</span><span style="font-size: 10pt; font-family: Verdana">6</span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> 0 6 * * * <br /> </span><span style="font-size: 10pt; font-family: 宋体">每两个小?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> 0 */2 * * * <br /> </span><span style="font-size: 10pt; font-family: 宋体">晚上</span><span style="font-size: 10pt; font-family: Verdana">11</span><span style="font-size: 10pt; font-family: 宋体">点到早上</span><span style="font-size: 10pt; font-family: Verdana">7</span><span style="font-size: 10pt; font-family: 宋体">点之间每两个时Q早上八?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> 0 23-7/2</span><span style="font-size: 10pt; font-family: 宋体">Q?/span><span style="font-size: 10pt; font-family: Verdana">8 * * * <br /> </span><span style="font-size: 10pt; font-family: 宋体">每个月的</span><span style="font-size: 10pt; font-family: Verdana">4</span><span style="font-size: 10pt; font-family: 宋体">号和每个C拜的礼拜一到礼拜三的早?/span><span style="font-size: 10pt; font-family: Verdana">11</span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> 0 11 4 * 1-3 <br /> 1<span style="font-family: 宋体">?/span>1<span style="font-family: 宋体">日早?/span>4<span style="font-family: 宋体">?/span> <br /> 0 4 1 1 *</span></p> <p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">quartz</span><span style="font-size: 10pt; font-family: 宋体">的高U特性不仅如?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> 1 </span><span style="font-size: 10pt; font-family: 宋体">数据库存?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> 2 </span><span style="font-size: 10pt; font-family: 宋体">集群支持</span><span style="font-size: 10pt; font-family: Verdana"> <br /> 3 </span><span style="font-size: 10pt; font-family: 宋体">数据库持久化dQ?/span><span style="font-size: 10pt; font-family: Verdana">trigger <br /> 4 trigger </span><span style="font-size: 10pt; font-family: 宋体">的停止,q行</span><span style="font-size: 10pt; font-family: Verdana"> <br /> 5 </span><span style="font-size: 10pt; font-family: 宋体">d的Q意添?/span><span style="font-size: 10pt; font-family: Verdana"> <br /> 6 </span><span style="font-size: 10pt; font-family: 宋体">?/span><span style="font-size: 10pt; font-family: Verdana">corntrigger </span><span style="font-size: 10pt; font-family: 宋体">更详的d安排</span><span style="font-size: 10pt; font-family: Verdana"> <br /> 7 </span><span style="font-size: 10pt; font-family: 宋体">U程的内部数据交?/span></p> <p><br /> <br /> <br /> </p> <p> </p> <img src ="http://www.aygfsteel.com/Crying/aggbug/186636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Crying/" target="_blank">Crying</a> 2008-03-16 18:20 <a href="http://www.aygfsteel.com/Crying/articles/186636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GBK转换为UTF-8http://www.aygfsteel.com/Crying/articles/174974.htmlCryingCryingSun, 13 Jan 2008 06:17:00 GMThttp://www.aygfsteel.com/Crying/articles/174974.htmlhttp://www.aygfsteel.com/Crying/comments/174974.htmlhttp://www.aygfsteel.com/Crying/articles/174974.html#Feedback0http://www.aygfsteel.com/Crying/comments/commentRss/174974.htmlhttp://www.aygfsteel.com/Crying/services/trackbacks/174974.html
public class Test {

    
public static String convertGBK2UTF8(String str) {
        String tmp;
        StringBuffer sb 
= new StringBuffer(1000);
        
char c;
        
int i, j;
        sb.setLength(
0);
        
for (i = 0; i < str.length(); i++) {
            c 
= str.charAt(i);
            
if (c > 255) {
                sb.append(
"\\u");
                j 
= (c >>> 8);
                tmp 
= Integer.toHexString(j);
                
if (tmp.length() == 1)
                    sb.append(
"0");
                sb.append(tmp);
                j 
= (c & 0xFF);
                tmp 
= Integer.toHexString(j);
                
if (tmp.length() == 1)
                    sb.append(
"0");
                sb.append(tmp);
            } 
else {
                sb.append(c);
            }

        }
        
return (new String(sb));
    }

    
public static void main(String[] args) {
        
    System.out.println(    Test.convertGBK2UTF8(
"q是JAVAEE & JIVE l织  Q?/span>"));        
    }

}

l果Q\u8fd9\u662fJAVAEE 
& JIVE \u7ec4\u7ec7  \uff01


Crying 2008-01-13 14:17 发表评论
]]>
Java中对日期的常用处?/title><link>http://www.aygfsteel.com/Crying/articles/173834.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Tue, 08 Jan 2008 15:27:00 GMT</pubDate><guid>http://www.aygfsteel.com/Crying/articles/173834.html</guid><wfw:comment>http://www.aygfsteel.com/Crying/comments/173834.html</wfw:comment><comments>http://www.aygfsteel.com/Crying/articles/173834.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Crying/comments/commentRss/173834.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Crying/services/trackbacks/173834.html</trackback:ping><description><![CDATA[ 转:http://www.aygfsteel.com/jakin/archive/2008/01/08/173736.html<br /> <img src ="http://www.aygfsteel.com/Crying/aggbug/173834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Crying/" target="_blank">Crying</a> 2008-01-08 23:27 <a href="http://www.aygfsteel.com/Crying/articles/173834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Loggerhttp://www.aygfsteel.com/Crying/articles/173823.htmlCryingCryingTue, 08 Jan 2008 14:39:00 GMThttp://www.aygfsteel.com/Crying/articles/173823.htmlhttp://www.aygfsteel.com/Crying/comments/173823.htmlhttp://www.aygfsteel.com/Crying/articles/173823.html#Feedback0http://www.aygfsteel.com/Crying/comments/commentRss/173823.htmlhttp://www.aygfsteel.com/Crying/services/trackbacks/173823.html
一 ?nbsp;java.util.logging.Logger   
        用某?getLogger 工厂Ҏ来获?Logger 对象
         Logger log=Logger.getLogger(this.getClass().getName());

二?org.apache.log4j.Logger

       Logger log=Logger.getLogger(Hello.class);


****************************************************************************************

使用Log4jQ第一步就是获取日志记录器Q这个记录器负责控制日志信息。其语法为:

  public static Logger getLogger( String name)

  通过指定的名字获得记录器Q如果必要的话,则ؓq个名字创徏一个新的记录器?br />        Name一般取本类的名字,比如Q?

  static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )

  ②读取配|文?

  当获得了日志记录器之后,W二步将配置Log4j环境Q其语法为:

        BasicConfigurator.configure ()Q?自动快速地使用~省Log4j环境?br />   PropertyConfigurator.configure ( String configFilename) Q读取用Java的特性文件编写的配置文g?/p>

例:PropertyConfigurator.configure(".\\src\\log4j.properties")
  DOMConfigurator.configure ( String filename ) Q读取XML形式的配|文件?/p>

  ③插入记录信息(格式化日志信息)

  当上两个必要步骤执行完毕Q就可轻村֜使用不同优先U别的日志记录语句插入到您想记录?br />        志的M ?nbsp;方,其语法如下:

  Logger.debug ( Object message ) ;
  Logger.info ( Object message ) ;
  Logger.warn ( Object message ) ;
  Logger.error ( Object message ) ;

在webE序中用log4j注意问题

1?nbsp;   ׃jsp或servlet在执行状态时没有当前路径概念Q所有用PropertyConfigurator.configureQStringQ语句找log4j.properties文g时要l出相对于当前jsp或servlet的\径{化成Z个绝对的文gpȝ路径。方法是使用 servletcontext.getrealpath(string)语句。例Q?/p>

//得到当前jsp路径

String prefix =  getServletContext().getRealPath("/");

//dlog4j.properties

PropertyConfigurator.configure(prefix+"\\WEB-INF\\log4j.properties");

2、相应的log4j.properties讄某个属性时也要在程序中讄l对路径。例Q?/p>

log4j.appender.R.File属性设|日志文件存放位|。我们可以用d.properties配置文g的方法进行灵z设|?br />


*********************************************************

一个实例:
一Q?br />

配置一个名为log4j.properties 文g,攑ֈ目的src文g下面卛_
log4j.rootLogger= INFO, A1 , R
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
#指定日志文g攄位置
log4j.appender.R.File=D:/env/environment/webEnv/WEB-INF/log4j.log

log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.appender.R.layout.ConversionPattern=%d %-5p [%t] (%13F:%L) %3x - %m%n

二:
在src下徏一个初始化的servlet让程序启动时加蝲log4j.properties文g

import javax.servlet.http.HttpServlet;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Log4jInit extends HttpServlet {

 private static final long serialVersionUID = 1L;

 public void init() {       
  String prefix =  getServletContext().getRealPath("/");       
  String file = getInitParameter("log4j");
 
  // if the log4j-init-file is not set, then no point in trying       
  System.out.println("- Log4j start");       
  
  if(file != null) {         
   PropertyConfigurator.configure(prefix+file);       
  }
  Logger _logger = Logger.getLogger (Log4jInit.class);
  _logger.info("- Log4j Test Successfully!");
 }
}

 三:在web.xml中配|这个Log4jInit .javaq个servlet


<servlet>
  <servlet-name>log4jlog4j-init</servlet-name>
  <servlet-class>Log4jInit</servlet-class>
  <init-param>
   <param-name>log4j</param-name>
   <param-value>/WEB-INF/classes/log4j.properties</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>







Crying 2008-01-08 22:39 发表评论
]]>
关于序列化Serializable http://www.aygfsteel.com/Crying/articles/159263.htmlCryingCryingFri, 09 Nov 2007 01:20:00 GMThttp://www.aygfsteel.com/Crying/articles/159263.htmlhttp://www.aygfsteel.com/Crying/comments/159263.htmlhttp://www.aygfsteel.com/Crying/articles/159263.html#Feedback0http://www.aygfsteel.com/Crying/comments/commentRss/159263.htmlhttp://www.aygfsteel.com/Crying/services/trackbacks/159263.html

个h看法Q不一定正?
你是女生Q有没有接触q毛U团
毛线团就是我们实CSerializable接口的对?br /> 一个毛U团可以抽成很长的毛U?br /> 又可以把很长的毛U卷成毛U团
对应h是
一个巨大的对象可以抽成很简单的文本表达保存h
需要用这个对象的时?br /> 再根据这些文本生?br /> Serializable 只是一个标志,让JVM能够知道可以安全的把object转化成上面老兄说的毛线团?br /> 你不需要作Mcode?br /> Serializable 对JAVABEANS是必ȝ接口?br /> 你不需要作M实现?/p>

序列化是把一个对象的状态写入一个字节流的过E,它执行RMIQRMI允许一台机器上的JAVA对象调用不同机器上的JAVA对象ҎQ对象可以作为参数提供给那个q程ҎQ发送机序列化该对象q传送它Q接收机执行反序列化?br /> 序列化和反序列化的关pd表可形成包含循环引用的顺序图表。这是整个序列化的M思想?br /> 而Serializable接口属于支持序列化的一个接口,只有一个实现它的对象可以被序列化工具存储和回复QSerializable接口没有定义M成员Q只用来表示一个篏可以被序列化Q若该类可以序列化,那么它的所有子c都可以?br /> 下面是关于序列化的一个实例:
[b:a55efb5f91]E序名称QSerializationDemo.java
E序主题Q实现对象的序列化和反序列化
E序说明Q该E序由实例化一个MyClasscȝ对象开始,该对象有三个实例变量Q类型分别ؓString、int、doubleQ是希望存储和恢复的信息。[/b:a55efb5f91]

[code:1:a55efb5f91]

import java.io.*;

public class SerializationDemo{

public static void main(String args[]){

//Object serialization
 try{
  MyClass object1=new MyClass("Hello",-7,2.7e10);
  System.out.println("object1:"+object1);
  FileOutputStream fos=new FileOutputStream("serial");
  ObjectOutputStream oos=new ObjectOutputStream(fos);
  oos.writeObject(object1);
  oos.flush();
  oos.close();
 }
 catch(Exception e){
  System.out.println("Exception during serialization:"+e);
  System.exit(0);
 }

 //Object deserialization
 try{
  MyClass object2;
  FileInputStream fis=new FileInputStream("serial");
  ObjectInputStream ois=new ObjectInputStream(fis);
  object2=(MyClass)ois.readObject();
  ois.close();
  System.out.println("object2:"+object2);
 }
 catch(Exception e){
  System.out.println("Exception during deserialization:"+e);
  System.exit(0);
 }
  }
}

class MyClass implements Serializable{
 String s;
 int i;
 double d;
 public MyClass(String s,int i,double d){
  this.s=s;
  this.i=i;
  this.d=d;
 }
 public String toString(){
  return "s="+s+";i="+i+";d="+d;
 }
}
[/code:1:a55efb5f91]

E序q行l果Qobject1和object2的实例变量是一LQ输出如下:[code:1:a55efb5f91]object1:s=Hello;i=-7;d=2.7E10
object2:s=Hello;i=-7;d=2.7E10[/code:1:a55efb5f91]
<!--========================================================-->
hehe
未必是RMI?br /> 持久化也是Serializable的重?..
<!--========================================================-->
//agree
持久化是Serializable开始的目的?br /> g有什么心得,是不是也response一下?
<!--========================================================-->
现在知道是怎么回事?----Thank Bruce Eckel a million times for his excellent <<Think in java(Second Edition) >>.书里面讲的好清楚啊?br /> 一。猫写的不大全Q可能是因ؓ我的帖子里写?#8220;一般在什么情况下?#8221;q话作怪?br /> 我补充一下:
Object serialization的定义:
Object serialization 允许你将实现了Serializable接口的对象{换ؓ字节序列Q这些字节序列可以被完全存储以备以后重新生成原来的对象?

serialization不但可以在本机做Q而且可以l由|络操作Q就是猫说的RMIQ。这个好处是很大?---因ؓ它自动屏蔽了操作pȝ的差异,字节序Q用Unix下的c开发过|络~程的h应该知道q个概念Q我容易在q上面犯错){。比如,在Windowq_生成一个对象ƈ序列化之Q然后通过|络传到一台Unix机器上,然后可以在这台Unix机器上正地重构q个对象?/p>

Object serialization主要用来支持2U主要的Ҏ:
1。Java的RMI(remote method invocation).RMI允许象在本机上一h作远E机器上的对象。当发送消息给q程对象Ӟ需要用到serializaiton机制来发送参数和接收q回直?/p>

2。Java的JavaBeans.   Bean的状态信息通常是在设计旉|的。Bean的状态信息必被存v来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制?/p>

二。sakulagi和rollingpig说的持久化我也说一下?br /> 我觉得你们说的应该是英文里的persistence.但是Java语言里现在只支持lightweight persistence,是轻量U持久化Q这是通过serialization机制来实现的?/p>

persistence是指一个对象的生命周期不由E序是否执行来决定,即是在E序l止时这个对象也存在。它把一个serializable的对象写到磁盘(本机或其他机器上的非RAM存储器)Qƈ在程序重新调用时再读取对象到通常的RAM存储器?/p>

Z么说Java的serialization机制实现的是lightweight persistence?因ؓ你必L式的序列化和反序列化E序里的对象Q而不是直接由一个关键词来定义一个对象是序列化的然后ql做相应的处理?nbsp; 如果以后的Java版本出现一个新的关键字来实现这U机Ӟ比如是persistence,如果我用

persistence  (String s="chinaunix")

然后pȝ自动做猫程序里的那些处理,那么Java实Cpersistence.

W一ơ写q么多,而且是刚看了书不久写的,错误和行文不当之处多包涵?/p>

再次感谢猫小,sakulagi和rollingpigl的提示?br /> <!--========================================================-->
Joshua Bloch ?"Effective Java Programming Language Guide" 里面关于 Serializable 的部分讲得也很好Q尤其是什么时候该用,什么时候不该用?br /> <!--========================================================-->
 关于序列化处理Bean的状态信息能不能说的详细具体一些呢Q谢谢!
<!--========================================================-->
q儿我没有写q,我想是通过序列化beanQ进行writeObjectҎ可以数据写入数据库的一个表?br /> oracle对这Ҏ支持?



Crying 2007-11-09 09:20 发表评论
]]>
理解JAVA多?http://www.aygfsteel.com/Crying/articles/159257.htmlCryingCryingFri, 09 Nov 2007 01:19:00 GMThttp://www.aygfsteel.com/Crying/articles/159257.htmlhttp://www.aygfsteel.com/Crying/comments/159257.htmlhttp://www.aygfsteel.com/Crying/articles/159257.html#Feedback0http://www.aygfsteel.com/Crying/comments/commentRss/159257.htmlhttp://www.aygfsteel.com/Crying/services/trackbacks/159257.html数据抽象、承和多态是面向对象E序设计语言的三大特性。多态,我觉得它的作用就是用来将接口和实现分dQ改善代码的l织l构Q增Z码的可读性。在某些很简单的情况下,或许我们不用多态也能开发出满我们需要的E序Q但大多数情况,如果没有多态,׃觉得代码极其难以l护?/div>
在Java中,谈论多态就是在讨论Ҏ调用的绑定,l定是一个方法调用同一个方法主体关联v来。在C语言中,Ҏ(在C中称为函?的绑定是q译器来实现的Q在英文中称为early binding(前期l定)Q因此,大家自然׃惛_相对应的late binding(后期l定)Q这在Java中通常叫做run-time binding(q行时绑?Q我个h觉得q样U呼更脓切,q行时绑定的目的是在代码运行的时候能够判断对象的cd。通过一个简单的例子说明Q?/div>
/**
 * 定义一个基c?br />  */
public Class Parents {
 public void print() {
  System.out.println(“parents”);
 }
}
/**
 * 定义两个zc?br />  */
public Class Father extends Parents {
 public void print() {
  System.out.println(“father”);
 }
}
public Class Mother extends Parents {
 public void print() {
  System.out.println(“mother”);
 }
}
/**
 * 试输出l果的类
 */
public Class Test {
 public void find(Parents p) {
  p.print();
 }
 public static void main(String[] args) {
  Test t = new Test();
  Father f = new Father();
  Mother m = new Mother();
  t.find(f);
  t.find(m);
 }
}
最后的输出l果分别是father和motherQ将zcȝ引用传给基类的引用,然后调用重写ҎQ基cȝ引用之所以能够找到应该调用那个派生类的方法,是因ؓE序在运行时q行了绑定?/div>
学过Java基础的h都能很容易理解上面的代码和多态的原理Q但是仍有一些关键的地方需要注意的Q算是自己对多态的一个小l:
1.Java中除了static和finalҎ外,其他所有的Ҏ都是q行时绑定的。在我另外一文章中说到privateҎ都被隐式指定为final的,因此final的方法不会在q行时绑定。当在派生类中重写基cMstatic、final、或privateҎӞ实质上是创徏了一个新的方?br /> 2.在派生类中,对于基类中的privateҎQ最好采用不同的名字?br /> 3.包含抽象Ҏ的类叫做抽象cR注意定义里面包含这L意思,只要cM包含一个抽象方法,该类是抽象cR抽象类在派生中是作ؓ基类的角ԌZ同的子类提供通用的接口?br /> 4.对象清理的顺序和创徏的顺序相反,当然前提是自己想手动清理对象Q因为大安知道Java垃圾回收器?br /> 5.在基cȝ构造方法中心调用基类中被重写的方法,q里涉及到对象初始化序?br /> 6.构造方法是被隐式声明ؓstaticҎ?br /> 7.用承表达行为间的差异,用字D表辄态上的变化?


Crying 2007-11-09 09:19 发表评论
]]>SimpleDateFormat详解http://www.aygfsteel.com/Crying/articles/159255.htmlCryingCryingFri, 09 Nov 2007 01:16:00 GMThttp://www.aygfsteel.com/Crying/articles/159255.htmlhttp://www.aygfsteel.com/Crying/comments/159255.htmlhttp://www.aygfsteel.com/Crying/articles/159255.html#Feedback0http://www.aygfsteel.com/Crying/comments/commentRss/159255.htmlhttp://www.aygfsteel.com/Crying/services/trackbacks/159255.htmlpublic class SimpleDateFormat extends DateFormat
SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体cR?它允许格式化 (date -> text)、语法分?(text -> date)和标准化?

SimpleDateFormat 允许以ؓ日期-旉格式化选择M用户指定的方式启动?但是Q希望用 DateFormat 中的 getTimeInstance?getDateInstance ?getDateTimeInstance 创徏一个日?旉格式化程序?每个cL法返回一个以~省格式化方式初始化的日期/旉格式化程序?可以Ҏ需要用 applyPattern Ҏ修改格式化方式?

SimpleDateFormat函数的承关p:
java.lang.Object
   |
   +----java.text.Format
           |
           +----java.text.DateFormat
                   |
                   +----java.text.SimpleDateFormat
下面是个例子:
import java.text.*;
import java.util.Date;

/**
  SimpleDateFormat函数语法Q?br />  
  G q代标志W?br />   y q?br />   M ?br />   d ?br />   h ?在上午或下午 (1~12)
  H ?在一天中 (0~23)
  m ?br />   s U?br />   S 毫秒
  E 星期
  D 一q中的第几天
  F 一月中W几个星期几
  w 一q中W几个星?br />   W 一月中W几个星?br />   a 上午 / 下午 标记W?
  k ?在一天中 (1~24)
  K ?在上午或下午 (0~11)
  z 时区
 */
public class FormatDateTime {

    public static void main(String[] args) {
        SimpleDateFormat myFmt=new SimpleDateFormat("yyyyqMM月dd?HH时mm分ssU?);
        SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm");
        SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//{h于now.toLocaleString()
        SimpleDateFormat myFmt3=new SimpleDateFormat("yyyyqMM月dd?HH时mm分ssU?E ");
        SimpleDateFormat myFmt4=new SimpleDateFormat(
                "一q中的第 D ?一q中Ww个星?一月中WW个星?在一天中k?z时区");
        Date now=new Date();
        System.out.println(myFmt.format(now));
        System.out.println(myFmt1.format(now));
        System.out.println(myFmt2.format(now));
        System.out.println(myFmt3.format(now));
        System.out.println(myFmt4.format(now));
        System.out.println(now.toGMTString());
        System.out.println(now.toLocaleString());
        System.out.println(now.toString());
    }   
   
}

效果Q?br /> 2007q?0?6?17?4?7U?br /> 07/10/16 17:24
200-10-16 17:24:27
2007q?0?6?17?4?7U?星期?
一q中的第 351 ?一q中W?1个星?一月中W?个星?在一天中17?CST时区
16 Dec 2007 09:24:27 GMT
2007-10-16 17:24:27
Thu Dec 16 17:24:27 CST 200

下面是个JavaBean:
public class FormatDateTime {
   
    public static String toLongDateString(Date dt){
        SimpleDateFormat myFmt=new SimpleDateFormat("yyyyqMM月dd?HH时mm分ssU?E ");       
        return myFmt.format(dt);
    }
   
    public static String toShortDateString(Date dt){
        SimpleDateFormat myFmt=new SimpleDateFormat("yyqMM月dd?HH时mm?);       
        return myFmt.format(dt);
    }   
   
    public static String toLongTimeString(Date dt){
        SimpleDateFormat myFmt=new SimpleDateFormat("HH mm ss SSSS");       
        return myFmt.format(dt);
    }
    public static String toShortTimeString(Date dt){
        SimpleDateFormat myFmt=new SimpleDateFormat("yy/MM/dd HH:mm");       
        return myFmt.format(dt);
    }
   
    public static void main(String[] args) {

        Date now=new Date();

        System.out.println(FormatDateTime.toLongDateString(now));
        System.out.println(FormatDateTime.toShortDateString(now));
        System.out.println(FormatDateTime.toLongTimeString(now));
        System.out.println(FormatDateTime.toShortTimeString(now));
    }   
   
}
调用的main 试l果Q?br /> 2007q?2?6?17?8?6U?星期?
07q?2?6?17?8?br /> 17 38 26 0965
07/12/16 17:38



Crying 2007-11-09 09:16 发表评论
]]>
关于数组和List之间怺转换的方?http://www.aygfsteel.com/Crying/articles/159254.htmlCryingCryingFri, 09 Nov 2007 01:13:00 GMThttp://www.aygfsteel.com/Crying/articles/159254.htmlhttp://www.aygfsteel.com/Crying/comments/159254.htmlhttp://www.aygfsteel.com/Crying/articles/159254.html#Feedback0http://www.aygfsteel.com/Crying/comments/commentRss/159254.htmlhttp://www.aygfsteel.com/Crying/services/trackbacks/159254.html1.List转换成ؓ数组。(q里的List是实体是ArrayList)
调用ArrayList的toArrayҎ?br /> toArray
public <T> T[] toArray(T[] a)q回一个按照正的序包含此列表中所有元素的数组Q返回数l的q行时类型就是指定数l的q行时类型。如果列表能攑օ指定的数l,则返回放入此列表元素的数l。否则,根据指定数l的q行时类型和此列表的大小分配一个新的数l?br /> 如果指定的数l能容纳列表q有剩余I间Q即数组的元素比列表的多Q,那么会将数组中紧跟在集合末尾的元素设|ؓ null。这对确定列表的长度很有用,但只 在调用方知道列表中不包含M null 元素时才有用?
指定者:
接口 Collection<E> 中的 toArray
指定者:
接口 List<E> 中的 toArray
覆盖Q?br /> c?AbstractCollection<E> 中的 toArray
参数Q?br /> a - 要存储列表元素的数组Q如果它_大的话;否则Q它是一个ؓ存储列表元素而分配的、具有相同运行时cd的新数组?
q回Q?br /> 包含列表元素的数l?
抛出Q?
ArrayStoreException - 如果 a 的运行时cd不是此列表中每个元素的运行时cd的超cd?/div>
具体用法Q?br /> import java.util.Arrays;
import java.util.List;
{
List list = new ArrayList();
list.add("1");
list.add("2");
final int size =  list.size();
String[] arr = (String[])list.toArray(new String[size]);
}
 
2.数组转换成ؓList?br /> 调用Arrays的asListҎ.
asList
public static <T> List<T> asList(T... a)q回一个受指定数组支持的固定大的列表。(对返回列表的更改?#8220;直写”到数l。)此方法同 Collection.toArray 一P充当了基于数l的 API 与基?collection ?API 之间的桥梁。返回的列表是可序列化的Qƈ且实C RandomAccess?
此方法还提供了一个创建固定长度的列表的便h法,该列表被初始化ؓ包含多个元素Q?
import java.util.Arrays;
import java.util.List;
{
     List stooges = Arrays.asList("Larry", "Moe", "Curly");
 }
参数Q?br /> a - 支持列表的数l?
q回Q?br /> 指定数组的列表视图?br /> 另请参见Q?br /> Collection.toArray()
具体用法:
String[] arr = new String[] {"1", "2"};
List list = Arrays.asList(arr);


Crying 2007-11-09 09:13 发表评论
]]>
== 和equals区别http://www.aygfsteel.com/Crying/articles/149971.htmlCryingCryingSun, 30 Sep 2007 10:39:00 GMThttp://www.aygfsteel.com/Crying/articles/149971.htmlhttp://www.aygfsteel.com/Crying/comments/149971.htmlhttp://www.aygfsteel.com/Crying/articles/149971.html#Feedback0http://www.aygfsteel.com/Crying/comments/commentRss/149971.htmlhttp://www.aygfsteel.com/Crying/services/trackbacks/149971.html先看下面代码Q?/div>
class Test1
{
public static void main(String args[])
  {
    int a = 10;
    int b = 10;
    System.out.println("a is " + a);
    System.out.println("b is " + b);
    System.out.println("a==b is " + (a==b));//1 true
    Integer ia = new Integer(10);
    Integer ib = new Integer(10);
    System.out.println("ia is " + ia);
    System.out.println("ib is " + ib);
    System.out.println("ia==ib is " + (ia==ib));//2 false
    System.out.println("ia.equals(ib) is " + (ia.equals(ib)));//3 true
    System.out.println("ib.equals(ia) is " + (ib.equals(ia)));//3 true
  }
}
==和equals的用法ȝ如下Q?br /> 1. ?=试两个Primitive type是否完全相同Q如代码?处所C,或测试两个object refrencees 是否指向同一个对象,如代码中2处所C?br /> 2. 用equals比较两个对象的内Ҏ否相同。如代码?处所C?/div>
需要注意的是上q比较都针对的是同一U类型的基本数据或对象,如果是不同类型之间的比较Q看如下代码Q?/div>
class Test2
{
  public static void main(String args[])
  {
    int a = 10;
    float b = 10.0f;
    System.out.println("a is " + a);
    System.out.println("b is " + b);
    System.out.println("a==b is " + (a==b));//1 true
    Integer ia = new Integer(10);
    Float fa = new Float(10.0f);
    System.out.println("ia is " + ia);
    System.out.println("fa is " + fa);
    System.out.println("ia.equals(fa) is " + (ia.equals(fa)));//2 false
    System.out.println("fa.equals(ia) is " + (fa.equals(ia)));//2 false
  }
}
1. 当程序比较基本类型数?int a ?float b Ӟ会将int 晋升Z个float ,此时10变成10.0Qƈ认ؓ二者是相等的,如代码中1处所C?br /> 2. 两个隶属不同classes 的对象绝不会相等Q除非你自己实现一个equals()Ҏ?br />    注意上述代码?处编译通得q,而且不会抛出M异常Q都q回false ?/div>
------------------------------------------------------------------------------------
附:String对象?U创E?br /> CZ代码Q?br />
public class StringInitial{
 public static void main(String[] args){
  String s1="hebing";
  String s2="hebing";
  String s3="he";
  String s4=new String("hebing");
  String s5=new String("hebing");
  System.out.println("String:");
  System.out.println("s12---"+s1.equals(s2)+"----"+(s1==s2));
  System.out.println("s1:hebing---"+s1.equals("hebing")+"----"+(s1=="hebing"));
  System.out.println("hebing:he-----"+s1.equals(s3));
  System.out.println("s14----"+s1.equals(s4)+"----"+(s1==s4));
  System.out.println("s4:hebing----"+s4.equals("hebing")+"----"+(s4=="hebing"));
  System.out.println("s45----"+s4.equals(s5)+"----"+(s4==s5));
 }
}
1. String s1 = "immutable";的创E?br />     用字W串帔R创徏String型的对象Ӟ在编译时Q编译器向字W串帔R~冲Zd该常量,
如果q有String s2 = "immutable";~译器会先判断缓冲区中是否有此常量,有的话就不会创徏新的Q而直接用已有的字符串常量。这样s1 ?s2 指向了同一个地址Q两者的内容也都相同Q即?= 和equals()Ҏ比较都是true
2. String s2 = new String("Constructed");的创E?br />     当这行代码被~译Ӟ字符串常?Constructed"先被放进~冲ZQ到了运行时Qnew String()语句被执行,一个新的String实例被创建,q复制缓冲区中的字符串到新分配的内存I间中,最后新建的String对象被赋予s2,
昄Q用new String()语句导致额外的内存分配。至于常量缓冲区是存攑֜哪的Q参见下面这讨论:
http://community.csdn.net/Expert/TopicView3.asp?id=4245026


/***********************************************************************/

==操作W专门用来比较变量的值是否相{。比较好理解的一ҎQ?

  int a=10;
  int b=10;

  则a==b是true?

  但不好理解的地方是:


  String a=new String("foo");
  String b=new String("foo");

  则a==b返回false?

  对象变量其实是一个引用,它们的值是指向对象所在的内存地址Q而不是对象本w。a和b都用了new操作W,意味着在内存中生两个内容ؓ"foo"的字W串Q既然是“两个”Q它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的|所以?=="操作W,l果会是false。诚Ӟa和b所指的对象Q它们的内容都是"foo"Q应该是“相等”Q但?=操作Wƈ不涉及到对象内容的比较?

  对象内容的比较,正是equalsҎ做的事?

  看一下Object对象的equalsҎ是如何实现的Q?

  boolean equals(Object o){

  return this==o;

  }

  Object对象默认使用?=操作W。所以如果你自创的类没有覆盖equalsҎQ那你的cM用equals和?=会得到同Ll果。同样也可以看出QObject的equalsҎ没有辑ֈequalsҎ应该辑ֈ的目标:比较两个对象内容是否相等。因为答案应该由cȝ创徏者决定,所以Object把这个Q务留l了cȝ创徏者?

  看一下一个极端的c:


  Class Monster{
  private String content;
  ...
  boolean equals(Object another){ return true;}

  }

  我覆盖了equalsҎ。这个实CD无论Monster实例内容如何Q它们之间的比较永远q回true?

  所以当你是用equalsҎ判断对象的内Ҏ否相{,请不要想当然。因为可能你认ؓ相等Q而这个类的作者不q样认ؓQ而类的equalsҎ的实现是׃掌握的。如果你需要用equalsҎQ或者用Q何基于散列码的集合(HashSet,HashMap,HashTableQ,请察看一下java doc以确认这个类的equals逻辑是如何实现的?



Crying 2007-09-30 18:39 发表评论
]]> վ֩ģ壺 | Ҷ| ͨ| | | żҽ| ¡| ³| | ѷ| Ӧñر| ػ| | ̷| Ӧ| µ| | | | ״| ͬ| | | | | ʷ| | | ɽ| ѧ| º| | | ɽ| | | | Ž| | | |