﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-bob-文章分类-java</title><link>http://www.blogjava.net/keweibo/category/25924.html</link><description>&lt;script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"&gt;&lt;/script&gt;
&lt;!-- iteye 460 60 --&gt;
&lt;ins class="adsbygoogle"
     style="display:inline-block;width:468px;height:60px"
     data-ad-client="ca-pub-2876867208357149"
     data-ad-slot="0418982663"&gt;&lt;/ins&gt;
&lt;script&gt;
(adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
</description><language>zh-cn</language><lastBuildDate>Fri, 16 Nov 2018 19:22:29 GMT</lastBuildDate><pubDate>Fri, 16 Nov 2018 19:22:29 GMT</pubDate><ttl>60</ttl><item><title>Java8 Stream 分组统计信息</title><link>http://www.blogjava.net/keweibo/articles/433494.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 15 Nov 2018 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/433494.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/433494.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/433494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/433494.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/433494.html</trackback:ping><description><![CDATA[<br />利用Java的Stream分组统计信息<br /><div><img src="http://www.blogjava.net/images/blogjava_net/keweibo/summarizingDouble.jpg" border="0" alt="" /></div><img src ="http://www.blogjava.net/keweibo/aggbug/433494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2018-11-15 10:02 <a href="http://www.blogjava.net/keweibo/articles/433494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决Access restriction: The type XXXX is not accessible due to restriction on required library</title><link>http://www.blogjava.net/keweibo/articles/376754.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 27 Apr 2012 03:55:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/376754.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/376754.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/376754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/376754.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/376754.html</trackback:ping><description><![CDATA[<p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #d1d1d1; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; text-indent: 32px; "><br /><p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; word-wrap: normal; word-break: normal; line-height: 21px; color: #494949; font-family: simsun; font-size: 14px; text-align: left; background-color: #097fa3; ">import java.io.FileInputStream;</p><p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; word-wrap: normal; word-break: normal; line-height: 21px; color: #494949; font-family: simsun; font-size: 14px; text-align: left; background-color: #097fa3; ">import sun.audio.AudioPlayer;<br />import sun.audio.AudioStream;</p><p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; word-wrap: normal; word-break: normal; line-height: 21px; color: #494949; font-family: simsun; font-size: 14px; text-align: left; background-color: #097fa3; ">public class Sound {<br />&nbsp;<wbr>public&nbsp;<wbr>&nbsp;<wbr>&nbsp;static&nbsp;<wbr>&nbsp;<wbr>&nbsp;void&nbsp;<wbr>&nbsp;<wbr>&nbsp;main(String&nbsp;<wbr>&nbsp;<wbr>&nbsp;args[])&nbsp;<wbr>&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;{&nbsp;<wbr>&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>try&nbsp;<wbr>&nbsp;<wbr>&nbsp;{&nbsp;<wbr>&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;FileInputStream&nbsp;<wbr>&nbsp;<wbr>&nbsp;fileau=new&nbsp;<wbr>&nbsp;<wbr>&nbsp;FileInputStream("hint.wav");&nbsp;<wbr>&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;AudioStream&nbsp;<wbr>&nbsp;<wbr>&nbsp;as=new&nbsp;<wbr>&nbsp;<wbr>&nbsp;AudioStream(fileau);&nbsp;<wbr>&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;AudioPlayer.player.start(as);&nbsp;<wbr>&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;}&nbsp;<wbr>&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;catch&nbsp;<wbr>&nbsp;<wbr>&nbsp;(Exception&nbsp;<wbr>&nbsp;<wbr>&nbsp;e)&nbsp;<wbr>&nbsp;<wbr>&nbsp;{}&nbsp;<wbr>&nbsp;<wbr><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;}&nbsp;<wbr>&nbsp;<wbr><br />}</p><br />解决办法：在Build Path里面把JRE System Library移除后重新添加进去，问题解决</p><img src ="http://www.blogjava.net/keweibo/aggbug/376754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2012-04-27 11:55 <a href="http://www.blogjava.net/keweibo/articles/376754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux JDK 三种配置环境变量的方法</title><link>http://www.blogjava.net/keweibo/articles/366113.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 12 Dec 2011 00:22:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/366113.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/366113.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/366113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/366113.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/366113.html</trackback:ping><description><![CDATA[@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
<span>
<p>三种配置环境变量的方法<br />
<br />
1. 修改/etc/profile文件 <br />
如果你的计算机仅仅作为开发使用时推荐使用这种方法，因为所有<strong>用户</strong>的shell都有权使用这些环境变量，可能会给系统带来安全性问题。 <br />
&#183;用文本编辑器打开/etc/profile <br />
&#183;在profile文件末尾加入： <br />
export <img id="0" anchorname="baidusnap2" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif" alt="" /><strong>JAVA_HOME</strong>=/usr/share/jdk1.6.0_14 <br />
export PATH=$<strong>JAVA_HOME</strong>/bin:$PATH <br />
export CLASSPATH=.:$<strong>JAVA_HOME</strong>/lib/dt.jar:$<strong>JAVA_HOME</strong>/lib/tools.jar</p>
<p>&#183;重新登录 <br />
&#183;注解 <br />
a. 你要将 /usr/share/jdk1.6.0_14改为你的jdk安装目录 <br />
b. <strong>linux</strong>下用冒号&#8220;:&#8221;来分隔路径 <br />
c. $PATH / $CLASSPATH / $<strong>JAVA_HOME</strong> 是用来引用原来的环境变量的值 <br />
在<strong>设置</strong>环境变量时特别要注意不能把原来的值给覆盖掉了，这是一种 <br />
常见的错误。 <br />
d. CLASSPATH中当前目录&#8220;.&#8221;不能丢,把当前目录丢掉也是常见的错误。 <br />
e. export是把这三个变量导出为全局变量。 <br />
f. 大小写必须严格区分。</p>
<p>2. 修改.<img id="1" anchorname="baidusnap5" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif" alt="" /><strong>bash_profile</strong>文件</p>
<p>这种方法更为安全，它可以把使用这些环境变量的权限控制到<strong>用户</strong>级别，如果你需要给某个<strong>用户</strong>权限使用这些环境变量，你只需要修改其个人<strong>用户</strong>主目录下的.<strong>bash_profile</strong>文件就可以了。 <br />
&#183;用文本编辑器打开<strong>用户</strong>目录下的.<strong>bash_profile</strong>文件 <br />
&#183;在.<strong>bash_profile</strong>文件末尾加入：</p>
<p>export <strong>JAVA_HOME</strong>=/usr/share/jdk1.6.0_14 <br />
export PATH=$<strong>JAVA_HOME</strong>/bin:$PATH <br />
export CLASSPATH=.:$<strong>JAVA_HOME</strong>/lib/dt.jar:$<strong>JAVA_HOME</strong>/lib/tools.jar</p>
<p>&#183;重新登录</p>
<p>3. 直接在shell下<strong>设置</strong>变量 <br />
不赞成使用这种方法，因为换个shell，你的<strong>设置</strong>就无效了，因此这种方法仅仅是临时使用，以后要使用的时候又要重新<strong>设置</strong>，比较麻烦。 <br />
只需在shell终端执行下列命令： <br />
export <strong>JAVA_HOME</strong>=/usr/share/jdk1.6.0_14 <br />
export PATH=$<strong>JAVA_HOME</strong>/bin:$PATH <br />
export CLASSPATH=.:$<strong>JAVA_HOME</strong>/lib/dt.jar:$<strong>JAVA_HOME</strong>/lib/tools.jar</p>
</span><br />
<img src ="http://www.blogjava.net/keweibo/aggbug/366113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2011-12-12 08:22 <a href="http://www.blogjava.net/keweibo/articles/366113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java对象序列化数组和反序列化 </title><link>http://www.blogjava.net/keweibo/articles/358771.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 16 Sep 2011 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/358771.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/358771.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/358771.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/358771.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/358771.html</trackback:ping><description><![CDATA[<div>  <p>package serializable;</p>  <p>&nbsp;</p>  <p>import java.io.ByteArrayInputStream;</p>  <p>import java.io.ByteArrayOutputStream;</p>  <p>import java.io.ObjectInputStream;</p>  <p>import java.io.ObjectOutputStream;</p>  <p>&nbsp;</p>  <p>public class ObjectToIO</p>  <p>{</p>  <p><span><span>&nbsp;&nbsp;&nbsp; </span>/**</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span><span style="font-family:SimSun;">对象转</span>Byte<span style="font-family:SimSun;">数组</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span></p><span><span></span> </span>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* @param obj</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* @return</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* @throws Exception</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>*/</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp; </span>public static byte[] objectToBytes(Object obj) throws Exception</span></p>  <p><span>&nbsp;&nbsp;&nbsp; {</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// logger.debug("objectToString called ");</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ByteArrayOutputStream out = new ByteArrayOutputStream();</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ObjectOutputStream sOut = new ObjectOutputStream(out);</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sOut.writeObject(obj);</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sOut.flush();</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>byte[] bytes = out.toByteArray();</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// logger.debug(bytes.toString());</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return bytes;</span></p>  <p>&nbsp;</p>  <p><span>&nbsp;&nbsp;&nbsp; }</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp;&nbsp; </span>/**</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span><span style="font-family:SimSun;">字节数组转对象</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* @param content</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* @return</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* @throws Exception</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>* </span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>*/</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp;&nbsp; </span>public static Object bytesToObject(byte[] bytes) throws Exception</span></p>  <p><span>&nbsp;&nbsp;&nbsp; {</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// logger.debug("bytesToObject called ");</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// byte</span><span style="font-family:SimSun;">转</span>object</p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ByteArrayInputStream in = new ByteArrayInputStream(bytes);</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ObjectInputStream sIn = new ObjectInputStream(in);</span></p>    <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return sIn.readObject();</span></p>  <p>&nbsp;</p>  <p><span>&nbsp;&nbsp;&nbsp; }</span></p>  <p>}</p>  </div>轉自:http://wenku.baidu.com/view/1e0a23b465ce050876321373.html<img src ="http://www.blogjava.net/keweibo/aggbug/358771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2011-09-16 10:51 <a href="http://www.blogjava.net/keweibo/articles/358771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用response方法清除浏览器缓存</title><link>http://www.blogjava.net/keweibo/articles/344152.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sat, 12 Feb 2011 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/344152.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/344152.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/344152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/344152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/344152.html</trackback:ping><description><![CDATA[使用response方法清除浏览器缓存：<br />
<br />
&lt;% <br />
response.setHeader("Pragma","No-cache"); <br />
response.setHeader("Cache-Control","no-cache"); <br />
response.setDateHeader("Expires", 0); <br />
%&gt;
<img src ="http://www.blogjava.net/keweibo/aggbug/344152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2011-02-12 17:19 <a href="http://www.blogjava.net/keweibo/articles/344152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>config.getServletContext().getRealPath("/")返回NULL的解決辦法</title><link>http://www.blogjava.net/keweibo/articles/339755.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 03 Dec 2010 14:06:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/339755.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/339755.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/339755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/339755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/339755.html</trackback:ping><description><![CDATA[代碼片段:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String <font style="background-color: #cce8cf">prefix = config.getServletContext().getRealPath("/");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (prefix == null || prefix.equals("")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // deployment in weblogic through ear file does not deploy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // phisically<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // the files,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // so we need to obtain the path through getClass method<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.net.URL url = this.getClass().getResource("/");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String mSchemaPath = url.getFile();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (mSchemaPath != null || !mSchemaPath.equals("")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String separator = "/";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int lastSlash = mSchemaPath.lastIndexOf(separator);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (lastSlash == -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; separator = "\\";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lastSlash = mSchemaPath.lastIndexOf(separator);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix = mSchemaPath.substring(0, lastSlash);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix = prefix.substring(0, prefix.lastIndexOf(separator));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix = prefix.substring(0, prefix.lastIndexOf(separator) + 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // lastSlash = mSchemaPath.lastIndexOf(separator);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // mSchemaPath = mSchemaPath.substring(0, lastSlash);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // lastSlash = mSchemaPath.lastIndexOf(separator);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // prefix = mSchemaPath.substring(0, lastSlash+1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font>
<img src ="http://www.blogjava.net/keweibo/aggbug/339755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-12-03 22:06 <a href="http://www.blogjava.net/keweibo/articles/339755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ServletContext Properties 操作文件</title><link>http://www.blogjava.net/keweibo/articles/314996.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 09 Mar 2010 14:19:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/314996.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/314996.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/314996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/314996.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/314996.html</trackback:ping><description><![CDATA[<p>package com.apress.dwrprojects.instamail;</p>
<p><br />
import java.io.File;<br />
import java.io.FileOutputStream;<br />
import java.io.InputStream;<br />
import java.io.IOException;<br />
import java.util.Properties;<br />
import javax.servlet.ServletContext;<br />
import org.apache.commons.logging.Log;<br />
import org.apache.commons.logging.LogFactory;</p>
<p><br />
/**<br />
&nbsp;* This class deals with maintaining options, including the e-mail account.<br />
&nbsp;*<br />
&nbsp;* @author &lt;a href="mailto:fzammetti@omnytex.com"&gt;Frank W. Zammetti&lt;/a&gt;.<br />
&nbsp;*/<br />
public class OptionsManager {</p>
<p><br />
&nbsp; /**<br />
&nbsp;&nbsp; * Log instance.<br />
&nbsp;&nbsp; */<br />
&nbsp; private static Log log = LogFactory.getLog(OptionsManager.class);</p>
<p><br />
&nbsp; /**<br />
&nbsp;&nbsp; * File name of the options file.<br />
&nbsp;&nbsp; */<br />
&nbsp; private static final String optionsFilename = "options.properties";</p>
<p><br />
&nbsp; /**<br />
&nbsp;&nbsp; * This method retrieves the options and returns them.&nbsp; If no<br />
&nbsp;&nbsp; * optionsFilename file is found, a 'blank' DTO is returned.<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; * @param&nbsp; sc ServletContext associates with the request.<br />
&nbsp;&nbsp; * @return&nbsp;&nbsp;&nbsp; An OptionsDTO containing all the stored options.<br />
&nbsp;&nbsp; */<br />
&nbsp; public OptionsDTO retrieveOptions(ServletContext sc) {</p>
<p>&nbsp;&nbsp;&nbsp; // Instantiate an OptionsDTO, and by default assume it will be configured.<br />
&nbsp;&nbsp;&nbsp; // This means the application has already been configured for use.&nbsp; This<br />
&nbsp;&nbsp;&nbsp; // affects what the user can do when the app is accessed initially.<br />
&nbsp;&nbsp;&nbsp; OptionsDTO options = new OptionsDTO();<br />
&nbsp;&nbsp;&nbsp; options.setConfigured(true);</p>
<p>&nbsp;&nbsp;&nbsp; // Read in the options.<br />
&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;InputStream isFeedFile =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sc.getResourceAsStream("/WEB-INF/" + optionsFilename);</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: red">Properties props = new Properties();<br />
</span>&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isFeedFile == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IOException(optionsFilename + " not found");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.load(isFeedFile);</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isFeedFile.close();<br />
&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info("No " + optionsFilename + " file, a blank DTO will " +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "be returned.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Make sure the OptionsDTO is set as unconfigured so that when the<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // index.jsp page is loaded, all the user will be allowed to do is go to<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // the Options views.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; options.setConfigured(false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("pop3Server", "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("pop3ServerRequiresLogin", "false");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("pop3Username", "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("pop3Password", "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("smtpServer", "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("smtpServerRequiresLogin", "false");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("smtpUsername", "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("smtpPassword", "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("fromAddress", "");<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; // Populate OptionsDTO from options Properties.<br />
&nbsp;&nbsp;&nbsp; options.setPop3Server(props.getProperty("pop3Server"));<br />
&nbsp;&nbsp;&nbsp; options.setPop3ServerRequiresLogin(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.getProperty("pop3ServerRequiresLogin"));<br />
&nbsp;&nbsp;&nbsp; options.setPop3Username(props.getProperty("pop3Username"));<br />
&nbsp;&nbsp;&nbsp; options.setPop3Password(props.getProperty("pop3Password"));<br />
&nbsp;&nbsp;&nbsp; options.setSmtpServer(props.getProperty("smtpServer"));<br />
&nbsp;&nbsp;&nbsp; options.setSmtpServerRequiresLogin(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.getProperty("smtpServerRequiresLogin"));<br />
&nbsp;&nbsp;&nbsp; options.setSmtpUsername(props.getProperty("smtpUsername"));<br />
&nbsp;&nbsp;&nbsp; options.setSmtpPassword(props.getProperty("smtpPassword"));<br />
&nbsp;&nbsp;&nbsp; options.setFromAddress(props.getProperty("fromAddress"));</p>
<p>&nbsp;&nbsp;&nbsp; return options;</p>
<p>&nbsp; } // End retrieveOptions().</p>
<p><br />
&nbsp; /**<br />
&nbsp;&nbsp; * This method saves the options.<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; * @param&nbsp; pop3Server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The POP3 server address.<br />
&nbsp;&nbsp; * @param&nbsp; pop3ServerRequiresLogin Does the POP3 server require login?<br />
&nbsp;&nbsp; * @param&nbsp; pop3Username&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The POP3 username.<br />
&nbsp;&nbsp; * @param&nbsp; pop3Password&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The POP3 password.<br />
&nbsp;&nbsp; * @param&nbsp; smtpServer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The SMTP server address.<br />
&nbsp;&nbsp; * @param&nbsp; smtpServerRequiresLogin Does the SMTP server require login?<br />
&nbsp;&nbsp; * @param&nbsp; smtpUsername&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The SMTP username.<br />
&nbsp;&nbsp; * @param&nbsp; smtpPassword&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The SMTP password.<br />
&nbsp;&nbsp; * @param&nbsp; fromAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; From address for outgoing messages.<br />
&nbsp;&nbsp; * @param&nbsp; sc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletContext associated with the request.<br />
&nbsp;&nbsp; * @return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A message saying the save was OK.<br />
&nbsp;&nbsp; */<br />
&nbsp; public String saveOptions(String pop3Server, String pop3ServerRequiresLogin,<br />
&nbsp;&nbsp;&nbsp; String pop3Username, String pop3Password, String smtpServer,<br />
&nbsp;&nbsp;&nbsp; String smtpServerRequiresLogin, String smtpUsername,<br />
&nbsp;&nbsp;&nbsp; String smtpPassword, String fromAddress, ServletContext sc) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Log what we received.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info("\nSaving options:\n" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop3Server = " + pop3Server + "\n" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop3ServerRequiresLogin = " + pop3ServerRequiresLogin + "\n" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop3Username = " + pop3Username + "\n" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop3Password = " + pop3Password + "\n" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "smtpServer = " + smtpServer + "\n" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "smtpServerRequiresLogin = " + smtpServerRequiresLogin + "\n" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "smtpUsername = " + smtpUsername + "\n" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "smtpPassword = " + smtpPassword + "\n" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "fromAddress = " + fromAddress + "\n");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String result = "";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Populate Properties structure.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Properties props = new Properties();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("pop3Server", pop3Server);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("pop3ServerRequiresLogin",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop3ServerRequiresLogin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("pop3Username", pop3Username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("pop3Password", pop3Password);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("smtpServer", smtpServer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("smtpServerRequiresLogin",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; smtpServerRequiresLogin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("smtpUsername", smtpUsername);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("smtpPassword", smtpPassword);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("fromAddress",&nbsp; fromAddress);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Lastly, delete any existing optionsFilename file in WEB-INF and<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // write out a new version from the Properties object we just populated.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Return a message saying the operation was complete, or if any problems<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // occur, a message saying what went wrong.<br />
<span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream fos = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new File(sc.getRealPath("WEB-INF") + "/" + optionsFilename).delete();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fos = new FileOutputStream(sc.getRealPath("WEB-INF") +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/" + optionsFilename);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.store(fos, null);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fos.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = "Options have been saved.";</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error("Error saving contact:");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = "Options could not be saved.&nbsp; " +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Please review logs for details.";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (fos != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fos.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error("Error closing fos: " + e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;</p>
<p>&nbsp; } // End saveOptions().</p>
<p><br />
} // End class.<br />
</p>
 <img src ="http://www.blogjava.net/keweibo/aggbug/314996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-03-09 22:19 <a href="http://www.blogjava.net/keweibo/articles/314996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>日記過濾器</title><link>http://www.blogjava.net/keweibo/articles/306766.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 21 Dec 2009 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/306766.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/306766.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/306766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/306766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/306766.html</trackback:ping><description><![CDATA[<code><font color="#7f0055"><strong>轉自:http://www.java2s.com/CN/Code/Java/Servlets/LoggingFilter.htm<br />
import&nbsp;</strong></font><font color="#000000">java.io.*;</font><br />
<font color="#7f0055"><strong>import&nbsp;</strong></font><font color="#000000">javax.servlet.*;</font><br />
<font color="#7f0055"><strong>import&nbsp;</strong></font><font color="#000000">javax.servlet.http.*;</font><br />
<br />
<font color="#7f0055"><strong>public&nbsp;final&nbsp;class&nbsp;</strong></font><font color="#000000">LoggingFilter&nbsp;</font><font color="#7f0055"><strong>implements&nbsp;</strong></font><font color="#000000">Filter&nbsp;</font><br />
<font color="#000000">{</font><br />
<font color="#ffffff">&nbsp;&nbsp;</font><font color="#7f0055"><strong>private&nbsp;</strong></font><font color="#000000">FilterConfig&nbsp;filterConfig&nbsp;=&nbsp;</font><font color="#7f0055"><strong>null</strong></font><font color="#000000">;</font><br />
<br />
<font color="#ffffff">&nbsp;&nbsp;</font><font color="#7f0055"><strong>public&nbsp;</strong></font><font color="#7f0055"><strong>void&nbsp;</strong></font><font color="#000000">doFilter</font><font color="#000000">(</font><font color="#000000">ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">FilterChain&nbsp;chain</font><font color="#000000">)</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#7f0055"><strong>throws&nbsp;</strong></font><font color="#000000">IOException,&nbsp;ServletException&nbsp;</font><br />
<font color="#ffffff">&nbsp;&nbsp;</font><font color="#000000">{</font><br />
<br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#7f0055"><strong>long&nbsp;</strong></font><font color="#000000">start&nbsp;=&nbsp;System.currentTimeMillis</font><font color="#000000">()</font><font color="#000000">;</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">String&nbsp;address&nbsp;=&nbsp;&nbsp;request.getRemoteAddr</font><font color="#000000">()</font><font color="#000000">;</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">String&nbsp;file&nbsp;=&nbsp;</font><font color="#000000">((</font><font color="#000000">HttpServletRequest</font><font color="#000000">)&nbsp;</font><font color="#000000">request</font><font color="#000000">)</font><font color="#000000">.getRequestURI</font><font color="#000000">()</font><font color="#000000">;</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">chain.doFilter</font><font color="#000000">(</font><font color="#000000">request,&nbsp;response</font><font color="#000000">)</font><font color="#000000">;</font><br />
<br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">filterConfig.getServletContext</font><font color="#000000">()</font><font color="#000000">.log</font><font color="#000000">(</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#2a00ff">"User&nbsp;access!&nbsp;"&nbsp;</font><font color="#000000">+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#2a00ff">"&nbsp;User&nbsp;IP:&nbsp;"&nbsp;</font><font color="#000000">+&nbsp;address&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#2a00ff">"&nbsp;Resource:&nbsp;"&nbsp;</font><font color="#000000">+&nbsp;file&nbsp;+&nbsp;</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#2a00ff">"&nbsp;Milliseconds&nbsp;used:&nbsp;"&nbsp;</font><font color="#000000">+&nbsp;</font><font color="#000000">(</font><font color="#000000">System.currentTimeMillis</font><font color="#000000">()&nbsp;</font><font color="#000000">-&nbsp;start</font><font color="#000000">)&nbsp;</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">)</font><font color="#000000">;</font><br />
<font color="#ffffff">&nbsp;&nbsp;</font><font color="#000000">}</font><br />
<br />
<font color="#ffffff">&nbsp;&nbsp;</font><font color="#7f0055"><strong>public&nbsp;</strong></font><font color="#7f0055"><strong>void&nbsp;</strong></font><font color="#000000">destroy</font><font color="#000000">()&nbsp;{&nbsp;}</font><br />
<br />
<font color="#ffffff">&nbsp;&nbsp;</font><font color="#7f0055"><strong>public&nbsp;</strong></font><font color="#7f0055"><strong>void&nbsp;</strong></font><font color="#000000">init</font><font color="#000000">(</font><font color="#000000">FilterConfig&nbsp;filterConfig</font><font color="#000000">)&nbsp;{</font><br />
<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#7f0055"><strong>this</strong></font><font color="#000000">.filterConfig&nbsp;=&nbsp;filterConfig;</font><br />
<font color="#ffffff">&nbsp;&nbsp;</font><font color="#000000">}</font><br />
<font color="#000000">}</font></code>
<img src ="http://www.blogjava.net/keweibo/aggbug/306766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-12-21 10:35 <a href="http://www.blogjava.net/keweibo/articles/306766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring注解入门(轉)</title><link>http://www.blogjava.net/keweibo/articles/295152.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 15 Sep 2009 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/295152.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/295152.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/295152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/295152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/295152.html</trackback:ping><description><![CDATA[<br />
<h1 class="title_txt">轉自：http://blog.csdn.net/huxin1/archive/2008/12/31/3669583.aspx<br />
<cite class="fav_csdnstylebykimi"><a href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();" class="fav_csdnstylebykimi" title="收藏到我的网摘中，并分享给我的朋友"></a>
</cite>
</h1>
<script type="text/javascript">
document.body.oncopy = function() {
if (window.clipboardData) {
setTimeout(function() {
var text = clipboardData.getData("text");
if (text && text.length>300) {
text = text + "\r\n\n本文来自CSDN博客，转载请标明出处：" + location.href;
clipboardData.setData("text", text);
}
}, 100);
}
}
</script>
<script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
1. 使用Spring注解来注入属性 <br />
1.1. 使用注解以前我们是怎样注入属性的 <br />
类的实现： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserManagerImpl&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;UserManager&nbsp;{ &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span><font color="#000000">&nbsp;UserDao&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;setUserDao(UserDao&nbsp;userDao)&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">this</font></strong></span><span><font color="#000000">.userDao&nbsp;=&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">public class UserManagerImpl implements UserManager {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
...
}
</pre>
<br />
配置文件： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 </div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;bean&nbsp;id=</font></span><span class="string"><font color="#0000ff">"userManagerImpl"</font></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.kedacom.spring.annotation.service.UserManagerImpl"</font></span><span><font color="#000000">&gt; &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=</font></span><span class="string"><font color="#0000ff">"userDao"</font></span><span><font color="#000000">&nbsp;ref=</font></span><span class="string"><font color="#0000ff">"userDao"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/bean&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;bean&nbsp;id=</font></span><span class="string"><font color="#0000ff">"userDao"</font></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.kedacom.spring.annotation.persistence.UserDaoImpl"</font></span><span><font color="#000000">&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=</font></span><span class="string"><font color="#0000ff">"sessionFactory"</font></span><span><font color="#000000">&nbsp;ref=</font></span><span class="string"><font color="#0000ff">"mySessionFactory"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/bean&gt;&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">&lt;bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl"&gt;
&lt;property name="userDao" ref="userDao" /&gt;
&lt;/bean&gt;
&lt;bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl"&gt;
&lt;property name="sessionFactory" ref="mySessionFactory" /&gt;
&lt;/bean&gt;
</pre>
<br />
<br />
1.2. 引入@Autowired注解（不推荐使用，建议使用@Resource） <br />
类的实现（对成员变量进行标注） <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserManagerImpl&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;UserManager&nbsp;{ &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="annotation"><font color="#646464">@Autowired</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span><font color="#000000">&nbsp;UserDao&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">public class UserManagerImpl implements UserManager {
@Autowired
private UserDao userDao;
...
}
</pre>
<br />
或者（对方法进行标注） <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserManagerImpl&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;UserManager&nbsp;{ &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span><font color="#000000">&nbsp;UserDao&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="annotation"><font color="#646464">@Autowired</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;setUserDao(UserDao&nbsp;userDao)&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">this</font></strong></span><span><font color="#000000">.userDao&nbsp;=&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">public class UserManagerImpl implements UserManager {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
...
}
</pre>
<br />
配置文件 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;bean&nbsp;id=</font></span><span class="string"><font color="#0000ff">"userManagerImpl"</font></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.kedacom.spring.annotation.service.UserManagerImpl"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&lt;bean&nbsp;id=</font></span><span class="string"><font color="#0000ff">"userDao"</font></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.kedacom.spring.annotation.persistence.UserDaoImpl"</font></span><span><font color="#000000">&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=</font></span><span class="string"><font color="#0000ff">"sessionFactory"</font></span><span><font color="#000000">&nbsp;ref=</font></span><span class="string"><font color="#0000ff">"mySessionFactory"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/bean&gt;&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">&lt;bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl" /&gt;
&lt;bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl"&gt;
&lt;property name="sessionFactory" ref="mySessionFactory" /&gt;
&lt;/bean&gt;
</pre>
<br />
@Autowired可以对成员变量、方法和构造函数进行标注，来完成自动装配的工作。以上两种不同实现方式
中，@Autowired的标注位置不同，它们都会在Spring在初始化userManagerImpl这个bean时，自动装配userDao这个属
性，区别是：第一种实现中，Spring会直接将UserDao类型的唯一一个bean赋值给userDao这个成员变量；第二种实现中，Spring会
调用setUserDao方法来将UserDao类型的唯一一个bean装配到userDao这个属性。 <br />
<br />
1.3. 让@Autowired工作起来 <br />
要使@Autowired能够工作，还需要在配置文件中加入以下代码 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;bean&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"</font></span><span><font color="#000000">&nbsp;/&gt;&nbsp;&nbsp;</font></span></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">&lt;bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /&gt;
</pre>
<br />
<br />
1.4. @Qualifier <br />
@Autowired是根据类型进行自动装配的。在上面的例子中，如果当
Spring上下文中存在不止一个UserDao类型的bean时，就会抛出BeanCreationException异常；如果Spring上下文中
不存在UserDao类型的bean，也会抛出BeanCreationException异常。我们可以使用@Qualifier配合
@Autowired来解决这些问题。 <br />
1. 可能存在多个UserDao实例 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="annotation"><font color="#646464">@Autowired</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;setUserDao(</font></span><span class="annotation"><font color="#646464">@Qualifier</font></span><span><font color="#000000">(</font></span><span class="string"><font color="#0000ff">"userDao"</font></span><span><font color="#000000">)&nbsp;UserDao&nbsp;userDao)&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">this</font></strong></span><span><font color="#000000">.userDao&nbsp;=&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">	@Autowired
public void setUserDao(@Qualifier("userDao") UserDao userDao) {
this.userDao = userDao;
}
</pre>
<br />
这样，Spring会找到id为userDao的bean进行装配。 <br />
2. 可能不存在UserDao实例 <br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="annotation"><font color="#646464">@Autowired</font></span><span><font color="#000000">(required&nbsp;=&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">false</font></strong></span><span><font color="#000000">) &nbsp;&nbsp;</font></span></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;setUserDao(UserDao&nbsp;userDao)&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">this</font></strong></span><span><font color="#000000">.userDao&nbsp;=&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">	@Autowired(required = false)
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
</pre>
<br />
<br />
1.5. @Resource（JSR-250标准注解，推荐使用它来代替Spring专有的@Autowired注解） <br />
Spring 不但支持自己定义的@Autowired注解，还支持几个由JSR-250规范定义的注解，它们分别是@Resource、@PostConstruct以及@PreDestroy。 <br />
@Resource
的作用相当于@Autowired，只不过@Autowired按byType自动注入，而@Resource默认按byName自动注入罢了。
@Resource有两个属性是比较重要的，分别是name和type，Spring将@Resource注解的name属性解析为bean的名字，而
type属性则解析为bean的类型。所以如果使用name属性，则使用byName的自动注入策略，而使用type属性时则使用byType自动注入策
略。如果既不指定name也不指定type属性，这时将通过反射机制使用byName自动注入策略。 <br />
@Resource装配顺序 <br />
<ol>
    <li>如果同时指定了name和type，则从Spring上下文中找到唯一匹配的bean进行装配，找不到则抛出异常
    </li>
    <li>如果指定了name，则从上下文中查找名称（id）匹配的bean进行装配，找不到则抛出异常
    </li>
    <li>如果指定了type，则从上下文中找到类型匹配的唯一bean进行装配，找不到或者找到多个，都会抛出异常
    </li>
    <li>如果既没有指定name，又没有指定type，则自动按照byName方式进行装配（见2）；如果没有匹配，则回退为一个原始类型（UserDao）进行匹配，如果匹配则自动装配； </li>
</ol>
<br />
<br />
1.6. @PostConstruct（JSR-250） <br />
在方法上加上注解@PostConstruct，这个方法就会在Bean初始化之后被Spring容器执行（注：Bean初始化包括，实例化Bean，并装配Bean的属性（依赖注入））。 <br />
它的一个典型的应用场景是，当你需要往Bean里注入一个其父类中定义的属性，而你又无法复写父类的属性或属性的setter方法时，如： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserDaoImpl&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">extends</font></strong></span><span><font color="#000000">&nbsp;HibernateDaoSupport&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;UserDao&nbsp;{ &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span><font color="#000000">&nbsp;SessionFactory&nbsp;mySessionFacotry; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="annotation"><font color="#646464">@Resource</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;setMySessionFacotry(SessionFactory&nbsp;sessionFacotry)&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">this</font></strong></span><span><font color="#000000">.mySessionFacotry&nbsp;=&nbsp;sessionFacotry; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="annotation"><font color="#646464">@PostConstruct</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;injectSessionFactory()&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">super</font></strong></span><span><font color="#000000">.setSessionFactory(mySessionFacotry); &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
private SessionFactory mySessionFacotry;
@Resource
public void setMySessionFacotry(SessionFactory sessionFacotry) {
this.mySessionFacotry = sessionFacotry;
}
@PostConstruct
public void injectSessionFactory() {
super.setSessionFactory(mySessionFacotry);
}
...
}
</pre>
<br />
这里通过@PostConstruct，为UserDaoImpl的父类里定义的一个sessionFactory私有属性，注入了
我们自己定义的sessionFactory（父类的setSessionFactory方法为final，不可复写），之后我们就可以通过调用
super.getSessionFactory()来访问该属性了。 <br />
<br />
1.7. @PreDestroy（JSR-250） <br />
在方法上加上注解@PreDestroy，这个方法就会在Bean初始化之后被Spring容器执行。由于我们当前还没有需要用到它的场景，这里不不去演示。其用法同@PostConstruct。 <br />
<br />
1.8. 使用&lt;context:annotation-config /&gt;简化配置 <br />
Spring2.1
添加了一个新的context的Schema命名空间，该命名空间对注释驱动、属性文件引入、加载期织入等功能提供了便捷的配置。我们知道注释本身是不会
做任何事情的，它仅提供元数据信息。要使元数据信息真正起作用，必须让负责处理这些元数据的处理器工作起来。 <br />
AutowiredAnnotationBeanPostProcessor
和CommonAnnotationBeanPostProcessor就是处理这些注释元数据的处理器。但是直接在Spring配置文件中定义这些
Bean显得比较笨拙。Spring为我们提供了一种方便的注册这些BeanPostProcessor的方式，这就
是&lt;context:annotation-config /&gt;： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;beans&nbsp;xmlns=</font></span><span class="string"><font color="#0000ff">"http://www.springframework.org/schema/beans"</font></span><span><font color="#000000">&nbsp;xmlns:xsi=</font></span><span class="string"><font color="#0000ff">"http://www.w3.org/2001/XMLSchema-instance"</font></span><span><font color="#000000">&nbsp;xmlns:context=</font></span><span class="string"><font color="#0000ff">"http://www.springframework.org/schema/context"</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation="http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/beans </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/beans/spring-beans-2.5.xsd </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/context </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/context/spring-context-2.5.xsd"&gt; </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;context:annotation-config&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/beans&gt;&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">&lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"&gt;
&lt;context:annotation-config /&gt;
&lt;/beans&gt;
</pre>
<br />
&lt;context:annotationconfig
/&gt;将隐式地向Spring容器注册AutowiredAnnotationBeanPostProcessor、
CommonAnnotationBeanPostProcessor、
PersistenceAnnotationBeanPostProcessor以及
RequiredAnnotationBeanPostProcessor这4个BeanPostProcessor。 <br />
<br />
2. 使用Spring注解完成Bean的定义 <br />
以上我们介绍了通过@Autowired或@Resource来实现在Bean中自动注入的功能，下面我们将介绍如何注解Bean，从而从XML配置文件中完全移除Bean定义的配置。 <br />
<br />
2.1. @Component（不推荐使用）、@Repository、@Service、@Controller <br />
只需要在对应的类上加上一个@Component注解，就将该类定义为一个Bean了： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="annotation"><font color="#646464">@Component</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserDaoImpl&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">extends</font></strong></span><span><font color="#000000">&nbsp;HibernateDaoSupport&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;UserDao&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">@Component
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
...
}
</pre>
<br />
使用@Component注解定义的Bean，默认的名称（id）是小写开头的非限定类名。如这里定义的Bean名称就是userDaoImpl。你也可以指定Bean的名称： <br />
@Component("userDao") <br />
@Component
是所有受Spring管理组件的通用形式，Spring还提供了更加细化的注解形式：@Repository、@Service、
@Controller，它们分别对应存储层Bean，业务层Bean，和展示层Bean。目前版本（2.5）中，这些注解与@Component的语义
是一样的，完全通用，在Spring以后的版本中可能会给它们追加更多的语义。所以，我们推荐使用@Repository、@Service、
@Controller来替代@Component。 <br />
<br />
2.2. 使用&lt;context:component-scan /&gt;让Bean定义注解工作起来 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;beans&nbsp;xmlns=</font></span><span class="string"><font color="#0000ff">"http://www.springframework.org/schema/beans"</font></span><span><font color="#000000">&nbsp;xmlns:xsi=</font></span><span class="string"><font color="#0000ff">"http://www.w3.org/2001/XMLSchema-instance"</font></span><span><font color="#000000">&nbsp;xmlns:context=</font></span><span class="string"><font color="#0000ff">"http://www.springframework.org/schema/context"</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation="http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/beans </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/beans/spring-beans-2.5.xsd </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/context </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/context/spring-context-2.5.xsd"&gt; </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;context:component-scan&nbsp;base-</font></span><span class="keyword"><strong><font color="#7f0055">package</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.kedacom.ksoa"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/beans&gt;&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">&lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"&gt;
&lt;context:component-scan base-package="com.kedacom.ksoa" /&gt;
&lt;/beans&gt;
</pre>
<br />
这里，所有通过&lt;bean&gt;元素定义Bean的配置内容已经被移除，仅需要添加一
行&lt;context:component-scan /&gt;配置就解决所有问题了——Spring
XML配置文件得到了极致的简化（当然配置元数据还是需要的，只不过以注释形式存在罢了）。&lt;context:component-scan
/&gt;的base-package属性指定了需要扫描的类包，类包及其递归子包中所有的类都会被处理。 <br />
&lt;context:component-scan /&gt;还允许定义过滤器将基包下的某些类纳入或排除。Spring支持以下4种类型的过滤方式： <br />
<ul>
    <li>过滤器类型 表达式范例 说明
    </li>
    <li>注解 org.example.SomeAnnotation 将所有使用SomeAnnotation注解的类过滤出来
    </li>
    <li>类名指定 org.example.SomeClass 过滤指定的类
    </li>
    <li>正则表达式 com\.kedacom\.spring\.annotation\.web\..* 通过正则表达式过滤一些类
    </li>
    <li>AspectJ表达式 org.example..*Service+ 通过AspectJ表达式过滤一些类 </li>
</ul>
<br />
以正则表达式为例，我列举一个应用实例： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;context:component-scan&nbsp;base-</font></span><span class="keyword"><strong><font color="#7f0055">package</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.casheen.spring.annotation"</font></span><span><font color="#000000">&gt; &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;context:exclude-filter&nbsp;type=</font></span><span class="string"><font color="#0000ff">"regex"</font></span><span><font color="#000000">&nbsp;expression=</font></span><span class="string"><font color="#0000ff">"com\.casheen\.spring\.annotation\.web\..*"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/context:component-scan&gt;&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">	&lt;context:component-scan base-package="com.casheen.spring.annotation"&gt;
&lt;context:exclude-filter type="regex" expression="com\.casheen\.spring\.annotation\.web\..*" /&gt;
&lt;/context:component-scan&gt;
</pre>
<br />
值得注意的是&lt;context:component-scan
/&gt;配置项不但启用了对类包进行扫描以实施注释驱动Bean定义的功能，同时还启用了注释驱动自动注入的功能（即还隐式地在内部注册了
AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor），
因此当使用&lt;context:component-scan
/&gt;后，就可以将&lt;context:annotation-config /&gt;移除了。 <br />
<br />
2.3. 使用@Scope来定义Bean的作用范围 <br />
在使用XML定义Bean时，我们可能还需要通过bean的scope属性来定义一个Bean的作用范围，我们同样可以通过@Scope注解来完成这项工作： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="annotation"><font color="#646464">@Scope</font></span><span><font color="#000000">(</font></span><span class="string"><font color="#0000ff">"session"</font></span><span><font color="#000000">) &nbsp;&nbsp;</font></span></span></li>
    <li><span class="annotation"><font color="#646464">@Component</font></span><span><font color="#000000">() &nbsp;&nbsp;</font></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserSessionBean&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;Serializable&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">@Scope("session")
@Component()
public class UserSessionBean implements Serializable {
...
}
</pre>
<br />
<br />
3. 参考 <br />
http://kingtai168.javaeye.com/blog/244002 <br />
http://www.javaeye.com/topic/244153 <br />
http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-annotation-config <br />
http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-classpath-scanning <br />
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/295152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-09-15 15:20 <a href="http://www.blogjava.net/keweibo/articles/295152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AWT 练习 - 播放声音文件 AudioPlayer.java(轉)</title><link>http://www.blogjava.net/keweibo/articles/290153.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 06 Aug 2009 12:18:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/290153.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/290153.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/290153.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/290153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/290153.html</trackback:ping><description><![CDATA[<span style="color: #008000;">文件來源：http://www.blogjava.net/beansoft/archive/2007/06/27/126550.html<br />
/*</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;@(#)AudioPlayer.java&nbsp;1.0&nbsp;03/04/17<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.awt.</span><span style="color: #000000;">*</span><span style="color: #000000;">;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.awt.event.</span><span style="color: #000000;">*</span><span style="color: #000000;">;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.applet.Applet;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.applet.AudioClip;<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">{{{&nbsp;Declares!</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;test&nbsp;{<br />
}<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">}}}</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;AudioPlayer<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;Frame&nbsp;{<br />
&nbsp;&nbsp;AudioClip&nbsp;clip&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;FileDialog&nbsp;dialog&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileDialog(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;Label&nbsp;labelCopyright&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Label();<br />
&nbsp;&nbsp;TextField&nbsp;textFieldFileName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;TextField();<br />
&nbsp;&nbsp;Panel&nbsp;panel1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Panel();<br />
&nbsp;&nbsp;Button&nbsp;buttonOpen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Button();<br />
&nbsp;&nbsp;Button&nbsp;buttonPlay&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Button();<br />
&nbsp;&nbsp;Button&nbsp;buttonLoop&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Button();<br />
&nbsp;&nbsp;Button&nbsp;buttonStop&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Button();<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;AudioPlayer()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;setTitle(</span><span style="color: #000000;">"</span><span style="color: #000000;">AudioPlayer</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;addWindowListener(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;WindowAdapter()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;windowClosing(WindowEvent&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dispose();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jbInit();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;pack();<br />
&nbsp;&nbsp;&nbsp;&nbsp;setVisible(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;jbInit()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;labelCopyright.setBackground(Color.darkGray);<br />
&nbsp;&nbsp;&nbsp;&nbsp;labelCopyright.setForeground(Color.orange);<br />
&nbsp;&nbsp;&nbsp;&nbsp;labelCopyright.setText(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Copyright&nbsp;(c)&nbsp;2003&nbsp;BeanSoft&nbsp;Studio.&nbsp;All&nbsp;rights&nbsp;reserved.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.setTitle(</span><span style="color: #000000;">"</span><span style="color: #000000;">Java&nbsp;Audio&nbsp;Player</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;textFieldFileName.setEditable(</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;buttonOpen.setLabel(</span><span style="color: #000000;">"</span><span style="color: #000000;">打开<img src="../../Images/dot.gif"  alt="" /></span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;buttonOpen.addActionListener(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;java.awt.event.ActionListener()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;actionPerformed(ActionEvent&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buttonOpen_actionPerformed(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;buttonPlay.setLabel(</span><span style="color: #000000;">"</span><span style="color: #000000;">播放</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;buttonPlay.addActionListener(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;java.awt.event.ActionListener()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;actionPerformed(ActionEvent&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;play();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;buttonLoop.setLabel(</span><span style="color: #000000;">"</span><span style="color: #000000;">循环</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;buttonLoop.addActionListener(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;java.awt.event.ActionListener()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;actionPerformed(ActionEvent&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;buttonStop.setLabel(</span><span style="color: #000000;">"</span><span style="color: #000000;">停止</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;buttonStop.addActionListener(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;java.awt.event.ActionListener()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;actionPerformed(ActionEvent&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.add(labelCopyright,&nbsp;BorderLayout.SOUTH);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.add(textFieldFileName,&nbsp;BorderLayout.NORTH);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.add(panel1,&nbsp;BorderLayout.CENTER);<br />
&nbsp;&nbsp;&nbsp;&nbsp;panel1.add(buttonOpen,&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;panel1.add(buttonPlay,&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;panel1.add(buttonLoop,&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;panel1.add(buttonStop,&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;AudioClip&nbsp;getAudioClip()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.clip;<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setAudioClip(AudioClip&nbsp;clip)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.clip&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;clip;<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;AudioPlayer();<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;buttonOpen_actionPerformed(ActionEvent&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;stop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;dialog.show();<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(dialog.getFile()&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;filename&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dialog.getDirectory()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;dialog.getFile();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setAudioClip(Applet.newAudioClip(&nbsp;(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;java.io.File(filename)).toURL()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;textFieldFileName.setText(filename);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;play();<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;play()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(getAudioClip()&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getAudioClip().play();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;loop()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(getAudioClip()&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getAudioClip().loop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;stop()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(getAudioClip()&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getAudioClip().stop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
}</span>
<img src ="http://www.blogjava.net/keweibo/aggbug/290153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-08-06 20:18 <a href="http://www.blogjava.net/keweibo/articles/290153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java调用Oracle函数</title><link>http://www.blogjava.net/keweibo/articles/270153.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 12 May 2009 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/270153.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/270153.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/270153.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/270153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/270153.html</trackback:ping><description><![CDATA[<div class="rightmenu">&nbsp;</div>
<div style="overflow: hidden" id="body_l" class="rightbox">
<h2>调用无入参的函数</h2>
<h3>函数定义</h3>
<p><font face="Verdana">CREATE OR REPLACE Function f_getstring Return Varchar2 Is<br />
Begin<br />
&nbsp;Return ''String value'';<br />
End f_getstring;</font></p>
<h3>调用函数的Java片断</h3>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;CallableStatement cstmt = con.prepareCall("{?=call f_getstring}");<br />
&nbsp;&nbsp;&nbsp;cstmt.registerOutParameter(1, Types.VARCHAR);<br />
&nbsp;&nbsp;&nbsp;cstmt.execute();<br />
&nbsp;&nbsp;&nbsp;String strValue = cstmt.getString(1);<br />
&nbsp;&nbsp;&nbsp;System.out.println("The return value is:" + strValue);<br />
&nbsp;&nbsp;&nbsp;cstmt.close();</font></p>
<h2>调用有一个入参，一个输出参数以及一个字符串返回值的函数</h2>
<h3>函数定义</h3>
<p><font face="Verdana">CREATE OR REPLACE Function f_Getinfo(Id Integer, Age Out Integer) Return Varchar2 Is<br />
Begin<br />
&nbsp;Age := 10;<br />
&nbsp;Return ''The age is:'' || Id;<br />
End f_Getinfo;</font></p>
<h3>调用函数的Java代码片断</h3>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;CallableStatement cstmt = con<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.prepareCall("{?=call f_getinfo(?,?)}");<br />
&nbsp;&nbsp;&nbsp;cstmt.registerOutParameter(1, Types.VARCHAR);<br />
&nbsp;&nbsp;&nbsp;cstmt.setInt(2, 11);<br />
&nbsp;&nbsp;&nbsp;cstmt.registerOutParameter(3, Types.INTEGER);<br />
&nbsp;&nbsp;&nbsp;cstmt.execute();<br />
&nbsp;&nbsp;&nbsp;String strValue = cstmt.getString(1);<br />
&nbsp;&nbsp;&nbsp;int age = cstmt.getInt(3);<br />
&nbsp;&nbsp;&nbsp;System.out.println("The return value is:" + strValue<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " and age is:" + age);<br />
&nbsp;&nbsp;&nbsp;cstmt.close();</font></p>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/270153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-05-12 10:27 <a href="http://www.blogjava.net/keweibo/articles/270153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>URLConnection在类里执行URL</title><link>http://www.blogjava.net/keweibo/articles/261028.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 20 Mar 2009 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/261028.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/261028.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/261028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/261028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/261028.html</trackback:ping><description><![CDATA[<div>package SFIS.DB;</div>
<div>import java.net.MalformedURLException;</div>
<div>import java.net.HttpURLConnection;</div>
<div>import java.net.URL;</div>
<div>import java.io.BufferedReader;</div>
<div>import java.io.IOException;</div>
<div>import java.io.InputStream;</div>
<div>import java.io.InputStreamReader;</div>
<div><br />
</div>
<div> </div>
<div>public class URLConnectionTest {</div>
<div>    public static void main(String []args){</div>
<div>           </div>
<div>    <span class="Apple-tab-span" style="white-space:pre"> </span></div>
<div>           try {</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>long begintime = System.currentTimeMillis();</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>  </div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   URL url = new URL("http://10.240.19.112:8080/quartz/jobs/executeJob.action?jobName=NOTEPAD_JOB&amp;jobGroup=DEFAULT");</div>
<div><br />
</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   System.out.println(urlcon.getResponseCode());</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   urlcon.connect(); </div>
<div><br />
</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   //InputStream is = urlcon.getInputStream();</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   /*InputStream is = urlcon.getErrorStream();</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   if(null != is) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">    </span>   BufferedReader buffer = new BufferedReader(new InputStreamReader(is));</div>
<div><span class="Apple-tab-span" style="white-space:pre">    </span>   StringBuffer bs = new StringBuffer();</div>
<div><span class="Apple-tab-span" style="white-space:pre">    </span>   String l = null;</div>
<div><span class="Apple-tab-span" style="white-space:pre">    </span>   while((l=buffer.readLine())!=null){</div>
<div><span class="Apple-tab-span" style="white-space:pre">    </span>       bs.append(l).append("\n");</div>
<div><span class="Apple-tab-span" style="white-space:pre">    </span>   }</div>
<div><span class="Apple-tab-span" style="white-space:pre">    </span>   System.out.println(bs.toString());</div>
<div><span class="Apple-tab-span" style="white-space:pre">    </span>   is.close();</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   } else if (null == is) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">    </span>   System.out.println("Null");</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   } else {</div>
<div><span class="Apple-tab-span" style="white-space:pre">    </span>   System.out.println("UNKNOW...");</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   }*/</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   </div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>  </div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   //System.out.println(" content-encode："+urlcon.getContentEncoding());</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   //System.out.println(" content-length："+urlcon.getContentLength());</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   //System.out.println(" content-type："+urlcon.getContentType());</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   //System.out.println(" date："+urlcon.getDate());</div>
<div>     </div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>  </div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   System.out.println("total time："+(System.currentTimeMillis()-begintime)+"毫秒");</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   </div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>   urlcon.disconnect();</div>
<div><span class="Apple-tab-span" style="white-space:pre">  </span>} catch (MalformedURLException e) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>// TODO Auto-generated catch block</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>e.printStackTrace();</div>
<div><span class="Apple-tab-span" style="white-space:pre">  </span>} catch (IOException e) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>// TODO Auto-generated catch block</div>
<div><span class="Apple-tab-span" style="white-space:pre">   </span>e.printStackTrace();</div>
<div><span class="Apple-tab-span" style="white-space:pre">  </span>}</div>
<div><br />
</div>
<div>    }</div>
<div> </div>
<div>}</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/261028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-03-20 13:49 <a href="http://www.blogjava.net/keweibo/articles/261028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA如何调用DOS命令 </title><link>http://www.blogjava.net/keweibo/articles/208405.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 16 Jun 2008 10:57:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/208405.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/208405.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/208405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/208405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/208405.html</trackback:ping><description><![CDATA[<h5 class="posthead pageTitle"><span style="color: red">文章來源：<a style="color: red" href="http://www.blogjava.net/leeguannan/archive/2007/11/29/164044.html">http://www.blogjava.net/leeguannan/archive/2007/11/29/164044.html</a></span></h5>
<div class="postText">
<p>用Java编写应用时，有时需要在程序中调用另一个现成的可执行程序或系统命令，这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式： <br />
... <br />
Process process = Runtime.getRuntime().exec(".\\p.exe"); <br />
process.waitfor( ); <br />
... <br />
在上面的程序中，第一行的&#8220;.\\p.exe&#8221;是要执行的程序名，Runtime.getRuntime()返回当前应用程序的Runtime对象，该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序，并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。 <br />
但在windows平台上，如果处理不当，有时并不能得到预期的结果。下面是笔者在实际编程中总结的几种需要注意的情况： <br />
1、执行DOS的内部命令 <br />
如果要执行一条DOS内部命令，有两种方法。一种方法是把命令解释器包含在exec()的参数中。例如，执行dir命令，在NT上， 可写成exec("cmd.exe /c dir")，在windows 95/98下，可写成&#8220;command.exe /c dir&#8221;，其中参数&#8220;/c&#8221;表示命令执行后关闭Dos立即关闭窗口。另一种方法是，把内部命令放在一个批命令my_dir.bat文件中，在Java程序中写成exec("my_dir.bat")。如果仅仅写成exec("dir")，Java虚拟机则会报运行时错误。前一种方法要保证程序的可移植性，需要在程序中读取运行的操作系统平台，以调用不同的命令解释器。后一种方法则不需要做更多的处理。 <br />
2、打开一个不可执行的文件 <br />
打开一个不可执行的文件，但该文件存在关联的应用程序，则可以有两种方式。 以打开一个word文档a.doc文件为例，Java中可以有以下两种写法： <br />
exec("start .\\a.doc"); <br />
exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc"); <br />
显然，前一种方法更为简捷方便。 <br />
3、执行一个有标准输出的DOS可执行程序 <br />
在windows平台上，运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭，从而导致Java应用程序阻塞在waitfor( )。导致该现象的一个可能的原因是，该可执行程序的标准输出比较多，而运行窗口的标准输出缓冲区不够大。解决的办法是，利用Java提供的Process类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出，在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。一段典型的程序如下： <br />
... <br />
String ls_1; <br />
Process process = Runtime.getRuntime().exec("cmd /c dir \\windows"); <br />
BufferedReader bufferedReader = new BufferedReader( \ <br />
new InputStreamReader(process.getInputStream()); <br />
while ( (ls_1=bufferedReader.readLine()) != null) <br />
System.out.println(ls_1); <br />
 <br />
process.waitfor( ); <br />
...</p>
<p>以上内容为转载~下面内容为原创！</p>
<p>今天在做客户端程序的自动更新，简单描述一下，就是从服务器上将更新包下载下来，然后在本地解压缩，最后删掉~功能很简单~</p>
<p>但是问题出在使用JAVA的ZIP模块做文件的解压缩不是想象的那么简单，资源需要释放，一个不小心就没有办法删除掉原有ZIP文件了~资源的占用确实是个大问题，但是好在，客户端程序更新完是要重启的，一切都烟消云散了~对于删除不掉ZIP文件的问题，我也流氓一下~用DEL硬删除~此处一定要注意！</p>
<p>Process process = Runtime.getRuntime().exec("cmd /c del f:\\aaa.doc"); <br />
这样的调用是没有问题~</p>
<p>Process process = Runtime.getRuntime().exec("del f:\\aaa.doc"); <br />
这样写是不可能对的~</p>
<p>记录一下，警告一下后人！</p>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/208405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-06-16 18:57 <a href="http://www.blogjava.net/keweibo/articles/208405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中的内部类和匿名类</title><link>http://www.blogjava.net/keweibo/articles/161140.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 16 Nov 2007 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/161140.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/161140.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/161140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/161140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/161140.html</trackback:ping><description><![CDATA[内部类:一个内部类的定义是定义在另一个内部的类。<br />
原因是:<br />
1.一个内部类的对象能够访问创建它的对象的实现，包括私有数据。<br />
2.对于同一个包中的其他类来说，内部类能够隐藏起来。<br />
3.匿名内部类可以很方便的定义回调。<br />
4.使用内部类可以非常方便的编写事件驱动程序。<br />
<br />
提起Java内部类（Inner Class）可能很多人不太熟悉，实际上类似的概念在C++里也有，那就是嵌套类（Nested
Class），关于这两者的区别与联系，在下文中会有对比。内部类从表面上看，就是在类中又定义了一个类（下文会看到，内部类可以在很多地方定义），而实
际上并没有那么简单，乍看上去内部类似乎有些多余，它的用处对于初学者来说可能并不是那么显著，但是随着对它的深入了解，你会发现Java的设计者在内部
类身上的确是用心良苦。学会使用内部类，是掌握Java高级编程的一部分，它可以让你更优雅地设计你的程序结构。下面从以下几个方面来介绍：<br />
<br />
* 第一次见面<br />
<br />
public interface Contents {<br />
int value();<br />
}<br />
<br />
public interface Destination {<br />
String readLabel();<br />
}<br />
<br />
public class Goods {<br />
private class Content implements Contents {<br />
private int i = 11;<br />
public int value() {<br />
return i;<br />
}<br />
}<br />
<br />
protected class GDestination implements Destination {<br />
private String label;<br />
private GDestination(String whereTo) {<br />
label = whereTo;<br />
}<br />
public String readLabel() {<br />
return label;<br />
}<br />
}<br />
<br />
public Destination dest(String s) {<br />
return new GDestination(s);<br />
}<br />
public Contents cont() {<br />
return new Content();<br />
}<br />
}<br />
<br />
class TestGoods {<br />
public static void main(String[] args) {<br />
Goods p = new Goods();<br />
Contents c = p.cont();<br />
Destination d = p.dest("Beijing");<br />
}<br />
}<br />
在这个例子里类Content和GDestination被定义在了类Goods内部，并且分别有着protected和private修饰符来控制访问
级别。Content代表着Goods的内容，而GDestination代表着Goods的目的地。它们分别实现了两个接口Content和
Destination。在后面的main方法里，直接用 Contents c和Destination
d进行操作，你甚至连这两个内部类的名字都没有看见！这样，内部类的第一个好处就体现出来了??隐藏你不想让别人知道的操作，也即封装性。<br />
<br />
同时，我们也发现了在外部类作用范围之外得到内部类对象的第一个方法，那就是利用其外部类的方法创建并返回。上例中的cont()和dest()方法就是这么做的。那么还有没有别的方法呢？当然有，其语法格式如下：<br />
<br />
outerObject=new outerClass(Constructor Parameters);<br />
<br />
outerClass.innerClass innerObject=outerObject.new InnerClass(Constructor Parameters);<br />
<br />
注意在创建非静态内部类对象时，一定要先创建起相应的外部类对象。至于原因，也就引出了我们下一个话题??<br />
<br />
* 非静态内部类对象有着指向其外部类对象的引用<br />
<br />
对刚才的例子稍作修改：<br />
<br />
public class Goods {<br />
<br />
private valueRate=2;<br />
<br />
private class Content implements Contents {<br />
private int i = 11*valueRate;<br />
public int value() {<br />
return i;<br />
}<br />
}<br />
<br />
protected class GDestination implements Destination {<br />
private String label;<br />
private GDestination(String whereTo) {<br />
label = whereTo;<br />
}<br />
public String readLabel() {<br />
return label;<br />
}<br />
}<br />
<br />
public Destination dest(String s) {<br />
return new GDestination(s);<br />
}<br />
public Contents cont() {<br />
return new Content();<br />
}<br />
}<br />
<br />
修改的部分用蓝色显示了。在这里我们给Goods类增加了一个private成员变量valueRate，意义是货物的价值系数，在内部类Content
的方法value()计算价值时把它乘上。我们发现，value()可以访问valueRate，这也是内部类的第二个好处??一个内部类对象可以访问创
建它的外部类对象的内容，甚至包括私有变量！这是一个非常有用的特性，为我们在设计时提供了更多的思路和捷径。要想实现这个功能，内部类对象就必须有指向
外部类对象的引用。
Java编译器在创建内部类对象时，隐式的把其外部类对象的引用也传了进去并一直保存着。这样就使得内部类对象始终可以访问其外部类对象，同时这也是为什
么在外部类作用范围之外向要创建内部类对象必须先创建其外部类对象的原因。<br />
<br />
有人会问，如果内部类里的一个成员变量与外部类的一个成员变量同名，也即外部类的同名成员变量被屏蔽了，怎么办？没事，Java里用如下格式表达外部类的引用：<br />
outerClass.this<br />
<br />
有了它，我们就不怕这种屏蔽的情况了。<br />
<br />
* 静态内部类<br />
<br />
和普通的类一样，内部类也可以有静态的。不过和非静态内部类相比，区别就在于静态内部类没有了指向外部的引用。这实际上和C++中的嵌套类很相像了，
Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用这一点上，当然从设计的角度以及以它一些细节来讲还有区别。<br />
<br />
除此之外，在任何非静态内部类中，都不能有静态数据，静态方法或者又一个静态内部类（内部类的嵌套可以不止一层）。不过静态内部类中却可以拥有这一切。这也算是两者的第二个区别吧。<br />
<br />
* 局部内部类 <br />
<br />
是的，Java内部类也可以是局部的，它可以定义在一个方法甚至一个代码块之内。<br />
<br />
public class Goods1 {<br />
public Destination dest(String s) {<br />
class GDestination implements Destination {<br />
private String label;<br />
private GDestination(String whereTo) {<br />
label = whereTo;<br />
}<br />
public String readLabel() { return label; }<br />
}<br />
return new GDestination(s);<br />
}<br />
<br />
public static void main(String[] args) {<br />
Goods1 g= new Goods1();<br />
Destination d = g.dest("Beijing");<br />
}<br />
}<br />
<br />
上面就是这样一个例子。在方法dest中我们定义了一个内部类，最后由这个方法返回这个内部类的对象。如果我们在用一个内部类的时候仅需要创建它的一个对象并创给外部，就可以这样做。当然，定义在方法中的内部类可以使设计多样化，用途绝不仅仅在这一点。<br />
<br />
下面有一个更怪的例子：<br />
<br />
public class Goods2{<br />
private void internalTracking(boolean b) {<br />
if(b) {<br />
class TrackingSlip {<br />
private String id;<br />
TrackingSlip(String s) {<br />
id = s;<br />
}<br />
String getSlip() { return id; }<br />
}<br />
TrackingSlip ts = new TrackingSlip("slip");<br />
String s = ts.getSlip();<br />
}<br />
}<br />
<br />
public void track() { internalTracking(true); }<br />
<br />
public static void main(String[] args) {<br />
Goods2 g= new Goods2();<br />
g.track();<br />
}<br />
}<br />
<br />
你不能在if之外创建这个内部类的对象，因为这已经超出了它的作用域。不过在编译的时候，内部类TrackingSlip和其他类一样同时被编译，只不过它由它自己的作用域，超出了这个范围就无效，除此之外它和其他内部类并没有区别。<br />
<br />
* 匿名内部类 <br />
<br />
java的匿名内部类的语法规则看上去有些古怪，不过如同匿名数组一样，当你只需要创建一个类的对象而且用不上它的名字时，使用内部类可以使代码看上去简洁清楚。它的语法规则是这样的：<br />
new interfacename(){......}; 或 new superclassname(){......};<br />
<br />
下面接着前面继续举例子：<br />
public class Goods3 {<br />
public Contents cont(){<br />
return new Contents(){<br />
private int i = 11;<br />
public int value() {<br />
return i;<br />
}<br />
};<br />
}<br />
}<br />
<br />
这里方法cont()使用匿名内部类直接返回了一个实现了接口Contents的类的对象，看上去的确十分简洁。<br />
<br />
在java的事件处理的匿名适配器中，匿名内部类被大量的使用。例如在想关闭窗口时加上这样一句代码：<br />
frame.addWindowListener(new WindowAdapter(){<br />
public void windowClosing(WindowEvent e){<br />
System.exit(0);<br />
}<br />
});<br />
<br />
有一点需要注意的是，匿名内部类由于没有名字，所以它没有构造函数（但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类，创建它的时候必须带上这些参数，并在实现的过程中使用super关键字调用相应的内容）。如果你想要初始化它的成员变量，有下面几种方法：<br />
<br />
1. 如果是在一个方法的匿名内部类，可以利用这个方法传进你想要的参数，不过记住，这些参数必须被声明为final。<br />
2. 将匿名内部类改造成有名字的局部内部类，这样它就可以拥有构造函数了。<br />
3. 在这个匿名内部类中使用初始化代码块。 <br />
<br />
* 为什么需要内部类？ <br />
<br />
java内部类有什么好处？为什么需要内部类？<br />
<br />
首先举一个简单的例子，如果你想实现一个接口，但是这个接口中的一个方法和你构想的这个类中的一个方法的名称，参数相同，你应该怎么办？这时候，你可以建
一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的，所以这样做可以完成所有你直接实现这个接口的功能。<br />
<br />
不过你可能要质疑，更改一下方法的不就行了吗？<br />
<br />
的确，以此作为设计内部类的理由，实在没有说服力。<br />
<br />
真正的原因是这样的，java中的内部类和接口加在一起，可以的解决常被C++程序员抱怨java中存在的一个问题??没有多继承。实际上，C++的多继承设计起来很复杂，而java通过内部类加上接口，可以很好的实现多继承的效果。<br />
<br />
本文的目的只是向大家介绍一下内部类的概念以及使用方法，在后续文章里，将会针对本文中的内容举更多具体的例子，以及介绍如何使用内部类构建一个Applicaton Framework。 <br />
<img src ="http://www.blogjava.net/keweibo/aggbug/161140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-11-16 22:57 <a href="http://www.blogjava.net/keweibo/articles/161140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单例（singleton）类 </title><link>http://www.blogjava.net/keweibo/articles/156687.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 29 Oct 2007 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/156687.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/156687.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/156687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/156687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/156687.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/keweibo/articles/156687.html'>阅读全文</a><img src ="http://www.blogjava.net/keweibo/aggbug/156687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-29 15:23 <a href="http://www.blogjava.net/keweibo/articles/156687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java笔记(构造方法)</title><link>http://www.blogjava.net/keweibo/articles/156673.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 29 Oct 2007 06:41:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/156673.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/156673.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/156673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/156673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/156673.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/keweibo/articles/156673.html'>阅读全文</a><img src ="http://www.blogjava.net/keweibo/aggbug/156673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-29 14:41 <a href="http://www.blogjava.net/keweibo/articles/156673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java笔记(创建对象的方式)</title><link>http://www.blogjava.net/keweibo/articles/156666.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 29 Oct 2007 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/156666.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/156666.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/156666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/156666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/156666.html</trackback:ping><description><![CDATA[在java程序中,对象可以被显式地或者隐式地创建.<br />
下面说说四种显式的创建对象的方式:<br />
&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp; 用new语句创建对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp; 运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp; 调用对象的clone()方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;●&nbsp; 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法.<br />
<br />
例子<br />
<p>&nbsp;</p>
<fieldset style="background-color: #c0c0c0"><legend style="width: 100px; height: 19px">Customer.java</legend>
<p>package dgut.ke.javatest;</p>
<p>public class Customer implements Cloneable {</p>
<p>&nbsp;private String name;<br />
&nbsp;private int age;<br />
&nbsp;<br />
&nbsp;public Customer() {<br />
&nbsp;&nbsp;this("unknown",0);<br />
&nbsp;&nbsp;System.out.println("call default constructor");<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public Customer(String name,int age) {<br />
&nbsp;&nbsp;this.name = name;<br />
&nbsp;&nbsp;this.age = age;<br />
&nbsp;&nbsp;System.out.println("call second constructor");<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public Object clone() throws CloneNotSupportedException {<br />
&nbsp;&nbsp;return super.clone();<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public boolean equals(Object o) {<br />
&nbsp;&nbsp;if (this == o)<br />
&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;if (! (o instanceof Customer))<br />
&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;final Customer other = (Customer) o;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;if (this.name.equals(other.name) &amp;&amp; this.age == other.age)<br />
&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public String toString() {<br />
&nbsp;&nbsp;return "customer.name = "+name+" customer.age = "+age;<br />
&nbsp;}<br />
&nbsp;/**<br />
&nbsp; * @param args<br />
&nbsp; */<br />
&nbsp;public static void main(String[] args) throws Exception{<br />
&nbsp;&nbsp;// 运用反射手段创建Customer对象<br />
&nbsp;&nbsp;Class objectClass = Class.forName("<span style="color: #ff00ff">dgut.ke.javatest.Customer</span>");<br />
&nbsp;&nbsp;Customer c1 = (Customer) objectClass.newInstance();<br />
&nbsp;&nbsp;System.out.println("c1 --&gt; " + c1);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;//用new创建Customer对象<br />
&nbsp;&nbsp;Customer c2 = new Customer("Tom",20);<br />
&nbsp;&nbsp;System.out.println("c2 --&gt; " + c2);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;//运用克隆手段创建Customer对象<br />
&nbsp;&nbsp;Customer c3 = (Customer) c2.clone();<br />
&nbsp;&nbsp;System.out.println("c3 --&gt; " + c3);<br />
&nbsp;&nbsp;System.out.println("c2 == c3 " + (c2==c3));<br />
&nbsp;&nbsp;System.out.println("c2.equals(c3) " + c2.equals(c3));<br />
&nbsp;}</p>
<p>}<br />
</p>
</fieldset>
<p>&nbsp;</p>
<h3>Class类的forName方法</h3>
<pre>public static <a title="java.lang 中的类" href="mk:@MSITStore:F:\程序设计\帮助文档\JAVA_API_CN.CHM::/api/java/lang/Class.html">Class</a>&lt;?&gt; <strong>forName</strong>(<a title="java.lang 中的类" href="mk:@MSITStore:F:\程序设计\帮助文档\JAVA_API_CN.CHM::/api/java/lang/String.html">String</a>&nbsp;className)
throws <a title="java.lang 中的类" href="mk:@MSITStore:F:\程序设计\帮助文档\JAVA_API_CN.CHM::/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</a></pre>
<dl>
<dd>返回与带有给定字符串名的类或接口相关联的 <code>Class</code> 对象。调用此方法等效于：
<blockquote>
<pre>  Class.forName(className, true, currentLoader)
</pre>
</blockquote>其中 <code>currentLoader</code> 表示此类的定义类加载器。
<p>例如，以下代码片段返回 <code>java.lang.Thread</code> 类的运行时 <code>Class</code> 描述符。
<blockquote>
<pre>   Class t = Class.forName("java.lang.Thread")
</pre>
</blockquote>
<p>调用 <tt>forName("X")</tt> 将导致名为 <tt>X</tt> 的类被初始化。
<p>&nbsp;</p>
<dd>
<dl></dl>
<dd>
<dl>
<dt><strong>参数：</strong>
<dd style="color: red"><code>className</code> - 所需类的完全限定名。
<dt><strong>返回：</strong>
<dd>具有指定名的类的 <code>Class</code> 对象。
<dt><strong>抛出：</strong>
<dd><code><a title="java.lang 中的类" href="mk:@MSITStore:F:\程序设计\帮助文档\JAVA_API_CN.CHM::/api/java/lang/LinkageError.html">LinkageError</a></code> - 如果链接失败
<dd><code><a title="java.lang 中的类" href="mk:@MSITStore:F:\程序设计\帮助文档\JAVA_API_CN.CHM::/api/java/lang/ExceptionInInitializerError.html">ExceptionInInitializerError</a></code> - 如果此方法所激发的初始化失败
<dd><code><a title="java.lang 中的类" href="mk:@MSITStore:F:\程序设计\帮助文档\JAVA_API_CN.CHM::/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</a></code> - 如果找不到该类</dd></dl></dd></dl>
<p>Object类的clone()方法</p>
<pre><span style="color: #ff00ff">protected</span> <a title="java.lang 中的类" href="mk:@MSITStore:F:\程序设计\帮助文档\JAVA_API_CN.CHM::/api/java/lang/Object.html">Object</a> <strong>clone</strong>()
throws <a title="java.lang 中的类" href="mk:@MSITStore:F:\程序设计\帮助文档\JAVA_API_CN.CHM::/api/java/lang/CloneNotSupportedException.html">CloneNotSupportedException</a></pre>
<dl>
<dd>创建并返回此对象的一个副本。&#8220;副本&#8221;的准确含义可能依赖于对象的类。一般来说，对于任何对象 <tt>x</tt>，如果表达式：
<blockquote>
<pre>x.clone() != x</pre>
</blockquote>是正确的，则表达式：
<blockquote>
<pre>x.clone().getClass() == x.getClass()</pre>
</blockquote>将为 <tt>true</tt>，但这些不是绝对条件。一般情况下是：
<blockquote>
<pre>x.clone().equals(x)</pre>
</blockquote>将为 <tt>true</tt>，但这不是绝对条件。
<p>按照惯例，返回的对象应该通过调用 <tt>super.clone</tt> 获得。如果一个类及其所有的超类（<tt>Object</tt> 除外）都遵守此约定，则 <tt>x.clone().getClass() == x.getClass()</tt>。
<p>按照惯例，此方法返回的对象应该独立于该对象（正被克隆的对象）。要获得此独立性，在 <tt>super.clone</tt> 返回对象之前，有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被克隆对象的内部&#8220;深层结构&#8221;的所有可变对象，并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用，那么通常不需要修改 <tt>super.clone</tt> 返回的对象中的字段。
<p><tt><span style="color: #ff00ff"><tt>Object</tt> 类的 <tt>clone</tt> 方法执行特定的克隆操作。首先，如果此对象的类不能实现接口 <tt>Cloneable</tt>，则会抛出 <tt>CloneNotSupportedException</tt>。</span></tt>注意：所有的数组都被视为实现接口 <tt>Cloneable</tt>。否则，此方法会创建此对象的类的一个新实例，并像通过分配那样，严格使用此对象相应字段的内容初始化该对象的所有字段；这些字段的内容没有被自我克隆。所以，此方法执行的是该对象的&#8220;浅表复制&#8221;，而不&#8220;深层复制&#8221;操作。
<p><tt>Object</tt> 类本身不实现接口 <tt>Cloneable</tt>，所以在类为 <tt>Object</tt> 的对象上调用 <tt>clone</tt> 方法将会导致在运行时抛出异常。
<p>&nbsp;</p>
<dd>
<dl>
<dt><strong>返回：</strong>
<dd>此实例的一个克隆。
<dt><strong>抛出：</strong>
<dd><code><a title="java.lang 中的类" href="mk:@MSITStore:F:\程序设计\帮助文档\JAVA_API_CN.CHM::/api/java/lang/CloneNotSupportedException.html">CloneNotSupportedException</a></code> - 如果对象的类不支持 <code>Cloneable</code> 接口，则重写 <code>clone</code> 方法的子类也会抛出此异常，以指示无法克隆某个实例。
<dt><strong>另请参见：</strong>
<dd><a title="java.lang 中的接口" href="mk:@MSITStore:F:\程序设计\帮助文档\JAVA_API_CN.CHM::/api/java/lang/Cloneable.html"><code>Cloneable</code></a></dd></dl></dd></dl>
 <img src ="http://www.blogjava.net/keweibo/aggbug/156666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-29 14:12 <a href="http://www.blogjava.net/keweibo/articles/156666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口的基本特征</title><link>http://www.blogjava.net/keweibo/articles/154753.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 21 Oct 2007 11:54:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/154753.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/154753.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/154753.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/154753.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/154753.html</trackback:ping><description><![CDATA[接口的基本特征<br />
&nbsp;&nbsp;<br />
&nbsp;接口对其成员变量和方法做了许多限制，接口的特征归纳如下：<br />
<span style="color: red"><strong style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;(1)接口中的成员变量默认是<span style="color: #ff0000">public static final</span>类型的，必须被显式的初始化。<br />
&nbsp;&nbsp;(2)接口确的方法默认是<span style="color: #ff0000">public abstract</span>类型的。<br />
&nbsp;&nbsp;(3)接口<span style="color: #ff0000">没有构造方法</span>，不能被实例化。<br />
&nbsp;&nbsp;(4)一个接口不能实现另一个接口，但它可以继承多个其他接口。<br />
&nbsp;&nbsp;(5)接口必须通过类来实现它的抽象方法，类实现接口的关键字为implements<br />
&nbsp;&nbsp;(6)与子类继承父类一样，当类实现了某个接口时，它必须实现接口中所有的抽象方法，<br />
&nbsp;&nbsp;&nbsp;&nbsp;否则这个类必须为抽象类。<br />
&nbsp;&nbsp;(7)不允许创建接口的实例，但允许定义接口类型的引用变量，该<span style="color: #ff0000">变量引用实现了这个<br />
&nbsp;&nbsp;&nbsp;&nbsp;接口的类的实例<br />
</span>&nbsp;&nbsp;(8)一个类只能继承一个直接父类，但能实现多个接口。</strong></span>
<img src ="http://www.blogjava.net/keweibo/aggbug/154753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-21 19:54 <a href="http://www.blogjava.net/keweibo/articles/154753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类之间的关系</title><link>http://www.blogjava.net/keweibo/articles/154748.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 21 Oct 2007 11:36:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/154748.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/154748.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/154748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/154748.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/154748.html</trackback:ping><description><![CDATA[<p>类之间的关系</p>
<p>&nbsp;&nbsp;UML把类之间的关系分为以下5种.<br />
&nbsp;&nbsp;●&nbsp;<span style="color: red">关联</span>：类A与类B的实例之间存在特定的对应关系<br />
&nbsp;&nbsp;●&nbsp;<span style="color: red">依赖</span>：类A访问类B提供的服务<br />
&nbsp;&nbsp;●&nbsp;<span style="color: red">聚集</span>：类A为整体类，类B为局部类，类A的对象由类B的对象组合而成<br />
&nbsp;&nbsp;●&nbsp;<span style="color: red">泛化</span>：类A继承类B<br />
&nbsp;&nbsp;●&nbsp;<span style="color: red">实现</span>：类A实现了B接口<br />
&nbsp;&nbsp;<br />
<span style="color: red"><strong>关联（Association）</strong></span><span style="color: red"><br />
</span>&nbsp;&nbsp;关联指的是类之间的特定对应关系，在UML中用<span style="color: red"><strong>带实线的箭头</strong></span>表示。按照类之间的数量对比，关联<br />
可以分为以下三种：<br />
&nbsp;&nbsp;●&nbsp;一对一关联<br />
&nbsp;&nbsp;●&nbsp;一对多关联<br />
&nbsp;&nbsp;●&nbsp;多对多关联<br />
注意：关联还要以分为单向关联和双向关联</p>
<p><strong style="color: red">依赖（Dependency）<br />
</strong>&nbsp;&nbsp;依赖指的是类之间的调用关系，在UML中用<span style="color: red"><strong>带虚线的箭头</strong></span>表示。如果类A访问类B的属性或者方法，<br />
或者类A负责实例化类B，那么可以说类A依赖类B。和关联关系不同，无须在类A中定义类B类型的属性。</p>
<p><span style="color: red"><strong>聚集（Aggregation）</strong></span><br />
&nbsp;&nbsp;聚集指的是整体与部分之间的关系，在UML中用<span style="color: red"><strong>带实线的菱形箭头</strong></span>表示。<br />
聚集关系还可以分为两种类型：<br />
&nbsp;&nbsp;●&nbsp;被聚集的子系统允许被拆卸和替换，这是普通聚集关系。<br />
&nbsp;&nbsp;●&nbsp;被聚集的子系统不允许被拆卸和替换，这种聚集称为强聚集关系，或者组成关系。<br />
&nbsp;&nbsp;&nbsp;注：强聚集（组成）可用带<span style="color: red"><strong>实线的实心菱形箭头</strong></span>表示。<br />
&nbsp;&nbsp;&nbsp;<br />
<span style="color: red"><strong>泛化（Generalization）</strong></span><br />
&nbsp;&nbsp;泛化指的是类之间的继承关系，在UML中用<strong style="color: red">带实线的三角形箭头</strong>表示。<br />
&nbsp;&nbsp;<br />
<span style="color: red"><strong>实现（Realization）<br />
</strong></span>&nbsp;&nbsp;实现指的是类与接口之间的关系，在UML中用<span style="color: red"><strong>带虚线的三角形箭头</strong></span>表示。&nbsp;</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/154748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-21 19:36 <a href="http://www.blogjava.net/keweibo/articles/154748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>4种访问级别的可访问范围</title><link>http://www.blogjava.net/keweibo/articles/150158.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 02 Oct 2007 02:13:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/150158.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/150158.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/150158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/150158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/150158.html</trackback:ping><description><![CDATA[<table style="width: 812px; height: 139px" cellspacing="2" cellpadding="2" width="812" border="0">
    <tbody>
        <tr bgcolor="#c0c0c0">
            <td><strong>访问级别</strong></td>
            <td><strong>访问控制修饰符</strong></td>
            <td>
            <p align="center"><strong>同&nbsp;&nbsp;&nbsp;&nbsp;类</strong></p>
            </td>
            <td>
            <p align="center"><strong>同&nbsp;&nbsp;&nbsp;&nbsp;包</strong></p>
            </td>
            <td>
            <p align="center"><strong>子&nbsp;&nbsp;&nbsp;&nbsp;类</strong></p>
            </td>
            <td>
            <p align="center"><strong>不同的包</strong></p>
            </td>
        </tr>
        <tr>
            <td>公开</td>
            <td>public </td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
        </tr>
        <tr>
            <td>受保护</td>
            <td>protected</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>－</td>
        </tr>
        <tr>
            <td>默认</td>
            <td>没有访问修饰符</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>－</td>
            <td>－</td>
        </tr>
        <tr>
            <td>私有</td>
            <td>private</td>
            <td>&#8730;</td>
            <td>－</td>
            <td>－</td>
            <td>－</td>
        </tr>
    </tbody>
</table>
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/150158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-02 10:13 <a href="http://www.blogjava.net/keweibo/articles/150158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类、方法、成员变量和局部变量的可用修饰符</title><link>http://www.blogjava.net/keweibo/articles/150157.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 02 Oct 2007 02:05:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/150157.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/150157.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/150157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/150157.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/150157.html</trackback:ping><description><![CDATA[<table style="width: 638px; height: 299px" cellspacing="2" cellpadding="2" width="638" bgcolor="#ffffff" border="0">
    <tbody>
        <tr bgcolor="#c0c0c0">
            <td><strong>修饰符</strong></td>
            <td><strong>类</strong></td>
            <td><strong>成员访求</strong></td>
            <td><strong>构造方法</strong></td>
            <td><strong>成员变量</strong></td>
            <td><strong>局部变量</strong></td>
        </tr>
        <tr>
            <td><span style="color: red">abstract</span>（抽象的）</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>－</td>
            <td>－</td>
            <td>－</td>
        </tr>
        <tr>
            <td><span style="color: red">static </span>（静态的）</td>
            <td>－</td>
            <td>&#8730;</td>
            <td>－</td>
            <td>&#8730;</td>
            <td>－</td>
        </tr>
        <tr>
            <td><span style="color: red">public</span>（公共的）</td>
            <td style="width: 18px; height: 24px">&#8730;</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>－</td>
        </tr>
        <tr>
            <td><span style="color: red">protected</span>（受保护的）</td>
            <td></td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>－</td>
        </tr>
        <tr>
            <td><span style="color: red">private</span>（私有的）</td>
            <td>－</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>－</td>
        </tr>
        <tr>
            <td><span style="color: red">synchronized</span>（同步的）</td>
            <td>－</td>
            <td>&#8730;</td>
            <td>－</td>
            <td>－</td>
            <td>－</td>
        </tr>
        <tr>
            <td><span style="color: red">native</span>（本地的）</td>
            <td>－</td>
            <td>&#8730;</td>
            <td>－</td>
            <td>－</td>
            <td>－</td>
        </tr>
        <tr>
            <td><span style="color: red">transient</span>（暂时的）</td>
            <td>－</td>
            <td>－</td>
            <td>－</td>
            <td>&#8730;</td>
            <td>－</td>
        </tr>
        <tr>
            <td><span style="color: red">volatie</span>（易失的）</td>
            <td>－</td>
            <td>－</td>
            <td>－</td>
            <td>&#8730;</td>
            <td>－</td>
        </tr>
        <tr>
            <td><span style="color: red">final</span>（不要改变的）</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
            <td>－</td>
            <td>&#8730;</td>
            <td>&#8730;</td>
        </tr>
    </tbody>
</table>
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/150157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-02 10:05 <a href="http://www.blogjava.net/keweibo/articles/150157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>方法覆盖与方法重载</title><link>http://www.blogjava.net/keweibo/articles/150154.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 02 Oct 2007 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/150154.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/150154.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/150154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/150154.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/150154.html</trackback:ping><description><![CDATA[<span style="color: red">方法重载</span>必须满足的条件：<br />
<br />
*&nbsp;&nbsp;&nbsp;&nbsp;方法名相同<br />
*&nbsp;&nbsp;&nbsp;&nbsp;方法的参数类型、个数、顺序至少有一项不相同<br />
*&nbsp;&nbsp;&nbsp;&nbsp;方法的返回类型可以不相同<br />
*&nbsp;&nbsp;&nbsp;&nbsp;方法的修饰符可以不相同<br />
<br />
<span style="color: red">方法覆盖</span>必须满足多种约束：<br />
<br />
*&nbsp;&nbsp;&nbsp;&nbsp;子类方法的名称、参数签名和返回的类型必须与父类方法的名称、参数签名和返回类型<br />
一致。<br />
*&nbsp;&nbsp;&nbsp;&nbsp;子类方法不能缩小父类方法的访问权限。<br />
*&nbsp;&nbsp;&nbsp;&nbsp;子类方法不能抛出比父类方法的更多的异常。<br />
*&nbsp;&nbsp;&nbsp;&nbsp;方法覆盖只存在于子类和父类之间。<br />
*&nbsp;&nbsp;&nbsp;&nbsp;父类的静态方法不能被子类覆盖为非静态的方法。<br />
*&nbsp;&nbsp;&nbsp;&nbsp;子类可以定义与父类静态方法同名的静态方法，以便在子类中隐藏父类的静态方法。<br />
*&nbsp;&nbsp;&nbsp;&nbsp;父类的非静态方法不能被子类覆盖为静态方法。<br />
*&nbsp;&nbsp;&nbsp;&nbsp;父类的私有方法不能被子类覆盖。<br />
*&nbsp;&nbsp;&nbsp;&nbsp;父杰的抽象方法可以被子类通过两种途径覆盖：一是子类实现父类的抽象访求；二是子类重新声明父类的抽象方法。<br />
*&nbsp;&nbsp;&nbsp;&nbsp;父类的非抽象方法可以被子类覆盖为抽象方法。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/150154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-02 09:49 <a href="http://www.blogjava.net/keweibo/articles/150154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>继承</title><link>http://www.blogjava.net/keweibo/articles/150152.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 02 Oct 2007 01:37:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/150152.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/150152.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/150152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/150152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/150152.html</trackback:ping><description><![CDATA[在java语言中,使用extends关键字来表示一个类继承了另一个类<br />
public class Sub <span style="color: red">extends </span>Base{<br />
&nbsp;&nbsp;&nbsp;&nbsp;... ...<br />
}<br />
以上代码表明Sub类继承了Base类.那么子类到底继承了父类的哪些东西呢,这还需要分为<br />
以下两种情况:<br />
*&nbsp;&nbsp;&nbsp;&nbsp;当子类和父类位于<span style="color: red">同一个包中</span>：子类继承父类中<span style="color: red">public、&nbsp; protected&nbsp;&nbsp;&nbsp;&nbsp;和</span><span style="color: red">default</span>访问级别的成员变量和成员方法<br />
*&nbsp;&nbsp;&nbsp;&nbsp;当子类和父类<span style="color: red">不在同一个包中</span>：子类继承父类中<span style="color: red">public、&nbsp; protected&nbsp;&nbsp;&nbsp;&nbsp;</span>访问级别的成员变量和成员方法<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/150152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-02 09:37 <a href="http://www.blogjava.net/keweibo/articles/150152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>