﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-心梦帆影Java技术博客-随笔分类-JavaSE</title><link>http://www.blogjava.net/rongxh7/category/39850.html</link><description>相信自己的人生有无限可能，把握每一个机会，全力以赴……</description><language>zh-cn</language><lastBuildDate>Mon, 19 Apr 2010 21:26:17 GMT</lastBuildDate><pubDate>Mon, 19 Apr 2010 21:26:17 GMT</pubDate><ttl>60</ttl><item><title>Java可变参数方法重载时要注意的几个问题</title><link>http://www.blogjava.net/rongxh7/archive/2010/04/18/318698.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sun, 18 Apr 2010 15:59:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2010/04/18/318698.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/318698.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2010/04/18/318698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/318698.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/318698.html</trackback:ping><description><![CDATA[<p>JDK1.5引进了方法的可变参数，受到许多开发人员的青睐。有了这种机制，我们可以写出类似于JavaScript的arguments那样的带任意多个参数的方法。Java的可变参数，可用于普通方法上，也可以用于构造方法上，大大增大了我们所写方法的适用范围。</p>
<p><br />
然而，使用可变参数时，要注意几个问题：</p>
<p>&nbsp;</p>
<p><font style="font-family: " size="3"><strong>1) 可变参数方法与数组参数方法重载时</strong></font></p>
<p>&nbsp;</p>
<pre class="java" name="code">public class MethodParams{
//带可变参数的方法
public void hello(String ...params) {
System.out.println("执行带可变参数的方法，参数个数为：" + params.length);
}
//带数组参数的方法
public void hello(String[] params) {
System.out.println("执行带数组参数的方法，数组长度为：" + params.length);
}
}</pre>
<p>我们写个测试代码运行一下看看结果如何:</p>
<pre class="java" name="code">	MethodParams mp = new MethodParams();
mp.hello("AAA","BBB","CCC");</pre>
<p>&nbsp;&nbsp;编译时报错:</p>
<pre class="java" name="code">MethodParams.java:7: 无法在 MethodParams 中同时声明 hello(java.lang.String[]) 和
hello(java.lang.String...)
public void hello(String[] params) {
^
1 错误</pre>
<p><font style="font-family: " color="#ff00ff">结论：&nbsp;JDK不允许存在, 带可变参数的方法和带数组参数的方法在同一类中重载。</font></p>
<p><font style="font-family: " color="#ff00ff">可变参数==数组参数？ 在带可变参数的方法体时，读取可变参数列表时，就是以数组的方式来读取；</font></p>
<p><font style="font-family: " color="#ff00ff">带可变参数的方法可以传入一个数组参数，但带数组参数的方法却不能传入可变参数。</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font style="font-family: " size="3"><strong>2) 可变参数方法与可变参数方法重载时</strong></font></p>
<pre class="java" name="code">	//带可变参数的方法
public void hello(String ...params) {
System.out.println("执行带可变参数的方法，参数个数为：" + params.length);
}
//带固定参数和可变参数
public void hello(String param1, String ...params) {
System.out.println("执行带固定参数和可变参数的方法，参数个数为：" + params.length);
}</pre>
<p>&nbsp;&nbsp;测试代码跟上例中一样,编译时报错:</p>
<pre class="java" name="code">MethodParams.java:18: 对 hello 的引用不明确，MethodParams 中的 方法 hello(java.l
ang.String...) 和 MethodParams 中的 方法 hello(java.lang.String,java.lang.String
...) 都匹配
mp.hello("AAA","BBB","CCC");
^
1 错误</pre>
<p><font style="font-family: " color="#ff00ff">&nbsp;结论：JDK不允许存在，带相同参数类型列表（Type List）的参数列表的方法在同一类中重载。</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font style="font-family: " size="3"><strong>3）可变参数方法与无参数方法重载时</strong></font></p>
<pre class="java" name="code">	//带可变参数的方法
public void hello(String ...params) {
System.out.println("执行带可变参数的方法，参数个数为：" + params.length);
}
//不带参数的方法
public void hello() {
System.out.println("执行不带参数的方法");
}</pre>
<p>我们都知道，可变参数即可带0个或者多个参数，如果带0个参数即不带参数时，JDK会怎么处理呢？</p>
<p>那我们就以执行"mp.hello()"来测试一下。编译通过，运行正常，调用的还带参数的hello()方法。</p>
<p><font style="font-family: " color="#ff00ff">结论：当可变参数方法与不带参数的方法重载时，JDK默认调用的是无参数的方法。若类中没有定义无参数的方法，则会调用可变参数的方法。</font></p>
<img src ="http://www.blogjava.net/rongxh7/aggbug/318698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2010-04-18 23:59 <a href="http://www.blogjava.net/rongxh7/archive/2010/04/18/318698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java的代理模式（通过公共接口实现）</title><link>http://www.blogjava.net/rongxh7/archive/2010/03/31/317070.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Wed, 31 Mar 2010 08:00:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2010/03/31/317070.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/317070.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2010/03/31/317070.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/317070.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/317070.html</trackback:ping><description><![CDATA[代理模式的一种常见的实现方案是，定义一个接口或抽象类，并派生出目标子类，和代理子类。我们要操作的是目标子类里的方法，而很多时候，我们需要为目录子类中的方法增加额外的处理，如果增加日志功能、条件判断等，这时候，就很有必要用到代理类。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;代理子类和目标子类的公共接口<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;rongxinhua<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;MyInterface&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;doOperation();<br />
<br />
}</span></div>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;目标子类<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;rongxinhua<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;RealClass&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;MyInterface&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;我们要执行的目标方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;doOperation()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">doOperation<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
而在没有使用代理模式的情况下，我们是这样执行目标方法的：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RealClass&nbsp;realObj&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RealClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;realObj.doOperation();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">调用目标方法</span></div>
打印时输出：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">doOperation<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span></div>
<br />
<br />
而我们要加入额外的处理的话，就可以使用代理类了：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;代理子类<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;rongxinhua<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ProxyClass&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;MyInterface&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;MyInterface&nbsp;realObj;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">目标子类对象</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;ProxyClass(MyInterface&nbsp;realObj)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.realObj&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;realObj;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;调用目标子类的方法，并在其中加入了前置处理和后置处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;doOperation()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doBefore();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;realObj.doOperation();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doAfter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;目标方法调用前的相关处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&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;doBefore()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">doBefore<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;目标方法调用后的相关处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&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;doAfter()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">doAfter<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
有了代理类，我们可以这样执行目标方法：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProxyClass&nbsp;proxyObj&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ProxyClass(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RealClass());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxyObj.doOperation();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">通过代理对象调用doOperation方法</span></div>
<br />
打印时输出：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">doBefore<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
doOperation<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
doAfter<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span></div>
<br />
本文只是代理模式的在Java中的简单使用，而代理模式与Java反射机制的整合，为Java组件开发增加了强大的生命力，有兴趣的朋友可看我另一个博客中的文章：<a href="http://www.javaeye.com/topic/629339">探讨代理模式与Java反射机制的应用</a>。<br />
<br />
<img src ="http://www.blogjava.net/rongxh7/aggbug/317070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2010-03-31 16:00 <a href="http://www.blogjava.net/rongxh7/archive/2010/03/31/317070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>舍友笔试中的一道算法题（我的解法）</title><link>http://www.blogjava.net/rongxh7/archive/2010/03/23/316228.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Mon, 22 Mar 2010 18:04:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2010/03/23/316228.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/316228.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2010/03/23/316228.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/316228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/316228.html</trackback:ping><description><![CDATA[我的舍友晓杰（C++高手）今天去了一家IT公司笔面试，其中就有这么一道题。<br />
<br />
<span style="color: red">题目大意：输入一个字符串，显示出字符串的所有排列。例如：输入"abc"，就得输出"abc"、"acb"、"bac"、"bca"、"cab"、"cba" 所有可能的序列。</span><br />
<br />
颇有意义的一道题，我决定用Java语言来写一写。代码如下：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Arrays;<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;CharList&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">遍历所有可能的排列结果</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</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;traversal(</span><span style="color: #0000ff">char</span><span style="color: #000000">[]&nbsp;chss,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;index){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">for循环,从index位置开始向前(向右),&nbsp;index位置的数与i位置的数互换</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;index;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;chss.length;&nbsp;i&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[]&nbsp;chs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Arrays.copyOf(chss,&nbsp;chss.length);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Copy出新数组(为了修改其值时互不影响)</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;chs[index];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chs[index]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;chs[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chs[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;temp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(index&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;chs.length</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">到了字符串末,&nbsp;输出结果</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String(chs));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">跟出此次循环,&nbsp;此traversal方法执行完毕,跳回上一级循环(在上一个方法体中)</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;traversal(chs,&nbsp;index</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">递归</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Test</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">abcd</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[]&nbsp;chs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.toCharArray();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">转成字符数组</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;traversal(chs,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
程序执行，输出结果为：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">abcd<br />
abdc<br />
acbd<br />
acdb<br />
adcb<br />
adbc<br />
bacd<br />
badc<br />
bcad<br />
bcda<br />
bdca<br />
bdac<br />
cbad<br />
cbda<br />
cabd<br />
cadb<br />
cdab<br />
cdba<br />
dbca<br />
dbac<br />
dcba<br />
dcab<br />
dacb<br />
dabc</span></div>
<img src ="http://www.blogjava.net/rongxh7/aggbug/316228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2010-03-23 02:04 <a href="http://www.blogjava.net/rongxh7/archive/2010/03/23/316228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>18位身份证验证小组件idchecker发布</title><link>http://www.blogjava.net/rongxh7/archive/2010/01/03/308097.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sun, 03 Jan 2010 10:43:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2010/01/03/308097.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/308097.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2010/01/03/308097.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/308097.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/308097.html</trackback:ping><description><![CDATA[<p><strong>下载地址：</strong><a title="http://codeshop.googlecode.com/files/idchecker.zip" href="http://codeshop.googlecode.com/files/idchecker.zip"><strong>http://codeshop.googlecode.com/files/idchecker.zip</strong></a></p>
<p>提供给外部调用的cn.idchecker.check.Checker类的相关方法如下表：</p>
<table border="1" cellspacing="0" cellpadding="2" width="689">
    <tbody>
        <tr>
            <td valign="top" width="201"><strong>方法</strong></td>
            <td valign="top" width="174"><strong>方法作用</strong></td>
            <td valign="top" width="312"><strong>参数及返回值</strong></td>
        </tr>
        <tr>
            <td valign="top" width="201">Checker(String num)</td>
            <td valign="top" width="174">构造方法</td>
            <td valign="top" width="312">参数num为18位身份证号码的字符串</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean checkLength()</td>
            <td valign="top" width="174">验证身份证长度是否正确</td>
            <td valign="top" width="312">长度为18，则返回true，否则返回false</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean checkBirth()</td>
            <td valign="top" width="174">验证出生生日码是否合法</td>
            <td valign="top" width="312">合法则返回true，否则返回false</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean checkAddr()</td>
            <td valign="top" width="174">验证地址码是否存在</td>
            <td valign="top" width="312">存在则返回true，否则返回false</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean checkCheckCode()</td>
            <td valign="top" width="174">计算校验码是否正确</td>
            <td valign="top" width="312">正确则返回true，否则返回false</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean check()</td>
            <td valign="top" width="174">总的身份证验证，验证顺序：长度 -&gt; 生日 -&gt; 最后一位校验码 -&gt; 地址</td>
            <td valign="top" width="312">若遇到有一项目不合法即返回false，所有验证通过才返回true。验证后，可通过调用getErrorMsg()方法获取错误信息</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean checkAll()</td>
            <td valign="top" width="174">总的身份证验证，验证项目包括长度、地址、生日、最后一位校验码</td>
            <td valign="top" width="312">身份证合法则返回true，否则false。验证后，可调用getErrorMsgs()方法获取错误信息集合</td>
        </tr>
        <tr>
            <td valign="top" width="201">String getBirth()</td>
            <td valign="top" width="174">获取出生年月日</td>
            <td valign="top" width="312">返回&#8220;2010年01月12日&#8221;格式的生日字符串通串</td>
        </tr>
        <tr>
            <td valign="top" width="201">String getAddr()</td>
            <td valign="top" width="174">获取公民籍贯</td>
            <td valign="top" width="312">返回籍贯字符串（"xx省xx市xx县&#8221;）</td>
        </tr>
        <tr>
            <td valign="top" width="201">String getSex()</td>
            <td valign="top" width="174">获取性别</td>
            <td valign="top" width="312">返回&#8220;男&#8221;或&#8220;女&#8221;</td>
        </tr>
        <tr>
            <td valign="top" width="201">String getErrorMsg()</td>
            <td valign="top" width="174">获取错误信息</td>
            <td valign="top" width="312">返回错误信息字符串</td>
        </tr>
        <tr>
            <td valign="top" width="201">public Set&lt;String&gt; getErrorMsgs()</td>
            <td valign="top" width="174">获取错误信息集合</td>
            <td valign="top" width="312">返回错误信息集合</td>
        </tr>
    </tbody>
</table>
<p>用法举例 1 ：解压缩&#8220;idchecker.zip&#8221;，将其目录下的&#8220;idchecker.jar&#8221; 包引进Java Project中，以下是测试程序：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestChecker&nbsp;{&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checker&nbsp;checker&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Checker(</span><span style="color: #000000">"</span><span style="color: #000000">44010619860710145X</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">出生年月日&nbsp;&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;checker.getBirth());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">性别&nbsp;&nbsp;：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;checker.getSex());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">居民地址&nbsp;&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;checker.getAddr());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">身份证号码是否合法&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;checker.check()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;checker.getErrorMsg());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checker.checkAll();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(String&nbsp;msg&nbsp;:&nbsp;checker.getErrorMsgs())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(msg&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;|&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
<br />
}<br />
</span></div>
<p><br />
运行结果：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">出生年月日&nbsp;&nbsp;:&nbsp;1986年07月10日<br />
性别&nbsp;&nbsp;：男<br />
居民地址&nbsp;&nbsp;:&nbsp;广东省广州市天河区&nbsp;<br />
身份证号码是否合法&nbsp;:&nbsp;true&nbsp;&nbsp;</span></div>
<p><br />
用法举例 2 ：将&#8220;idchecker.jar&#8221; 包引进到Web Project的lib目录下，以下是测试程序：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="background-color: #f5f5f5; color: #000000">@&nbsp;page&nbsp;language</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">java</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;contentType</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">text/html;&nbsp;charset=UTF-8</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;pageEncoding</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">UTF-8</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.w3.org/1999/xhtml"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta&nbsp;</span><span style="color: #ff0000">http-equiv</span><span style="color: #0000ff">="Content-Type"</span><span style="color: #ff0000">&nbsp;content</span><span style="color: #0000ff">="text/html;&nbsp;charset=UTF-8"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">测试idchecker组件</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">身份证验证</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="background-color: #f5f5f5; color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">String</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;id&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;request.getParameter(</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">ID</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">if</span><span style="background-color: #f5f5f5; color: #000000">(id&nbsp;!</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">null</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">&amp;&amp;</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;!</span><span style="background-color: #f5f5f5; color: #000000">""</span><span style="background-color: #f5f5f5; color: #000000">.equals(id.trim())){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cn.idchecker.check.Checker&nbsp;checker&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">new</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;cn.idchecker.check.Checker(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">if</span><span style="background-color: #f5f5f5; color: #000000">(checker.check())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(checker.getSex()&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">+</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&lt;br/&gt;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(checker.getBirth()&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">+</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&lt;br/&gt;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(checker.getAddr());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">else</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">身份证不合法！</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">+</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&lt;br/&gt;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(checker.getErrorMsg());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
<br />
</span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="input.jsp"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="post"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;身份证号码&nbsp;：</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ID"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="&lt;%=id&nbsp;%&gt;"</span><span style="color: #0000ff">/&gt;</span><span style="color: #ff0000">&amp;nbsp;&amp;nbsp;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="验证"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;<br />
</span></div>
<p><br />
运行结果：</p>
<p>&nbsp;<a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/18idchecker_EB2F/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/18idchecker_EB2F/image_thumb_2.png" width="326" height="201" /></a> <a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/18idchecker_EB2F/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/18idchecker_EB2F/image_thumb.png" width="323" height="203" /></a></p>
<img src ="http://www.blogjava.net/rongxh7/aggbug/308097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2010-01-03 18:43 <a href="http://www.blogjava.net/rongxh7/archive/2010/01/03/308097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原创一道Java笔试面试题考考大家</title><link>http://www.blogjava.net/rongxh7/archive/2009/11/28/303990.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Fri, 27 Nov 2009 19:21:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/11/28/303990.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/303990.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/11/28/303990.html#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/303990.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/303990.html</trackback:ping><description><![CDATA[用这题目吸引大家注意，请见谅！<br />
以下代码有些朋友可能会似曾熟识，可能也算不上&#8220;原创&#8221;，请见谅！<br />
不过，我出的这题，确定有点意思，考考大家。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;父类<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;rongxinhua<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Father{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">FATHER</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Father(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whoAmI();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tellName(name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;whoAmI(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Father&nbsp;says,&nbsp;I&nbsp;am&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;tellName(String&nbsp;name){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Father's&nbsp;name&nbsp;is&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;子类<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;rongxinhua<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Son&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;Father{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">SON</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Son(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whoAmI();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tellName(name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;whoAmI(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Son&nbsp;says,&nbsp;I&nbsp;am&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;tellName(String&nbsp;name){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Son's&nbsp;name&nbsp;is&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
问题：当执行 <span style="color: #ff0000;"><span style="color: red;"><span style="color: red;">Father who = new Son();</span></span></span> 时，会输出什么？<br />
如果你去参加一个公司的笔试或面试时问了这么一道题，在没有环境测试的情况下，你会猜测什么答案？<br />
<br />
<img src ="http://www.blogjava.net/rongxh7/aggbug/303990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-11-28 03:21 <a href="http://www.blogjava.net/rongxh7/archive/2009/11/28/303990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>介绍一个好用的工具类库commons-beanutils</title><link>http://www.blogjava.net/rongxh7/archive/2009/06/22/283566.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Mon, 22 Jun 2009 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/06/22/283566.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/283566.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/06/22/283566.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/283566.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/283566.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: commons-beanutils.jar可以到Apache官网的commons子项目下找到它，或者，在Struts2,Spring的下载包中也能看到它的影子。单独使用时，要多引进一个commons-logging.jar，这个包也是非常见的，可在有commons-beanutils.jar的地方找到它。&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/06/22/283566.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/283566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-06-22 14:39 <a href="http://www.blogjava.net/rongxh7/archive/2009/06/22/283566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些淡忘了的Java日期时间函数</title><link>http://www.blogjava.net/rongxh7/archive/2009/06/11/281519.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Thu, 11 Jun 2009 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/06/11/281519.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/281519.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/06/11/281519.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/281519.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/281519.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:        今天舍友问我，JDBC中的stmt.setDate()怎么挺入当前时间，传入参数new java.util.Date()不行，传入 参数new java.sql.Date()，试了一会，还是不行。此时，才发觉，自从用了Hibernate，JPA之后，我连原始的东西都忘记了。这可是一个很可悲的问题，决定来一次小测试！&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/06/11/281519.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/281519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-06-11 17:25 <a href="http://www.blogjava.net/rongxh7/archive/2009/06/11/281519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java范型的两种写法</title><link>http://www.blogjava.net/rongxh7/archive/2009/05/27/278122.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Tue, 26 May 2009 18:47:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/05/27/278122.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/278122.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/05/27/278122.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/278122.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/278122.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:         范型一般用于方法的参数或者方法的返回值，上面的写法，我们要使范型有效，就须在方法的返回类型前加入强制范型转换。其中，add(T t)的参数用了范型，它的返回值是void型，就在void 前用强制类型转换，即加上<T>，强制转换成范型的形式，这样就不会报错了。而T get(ID id)，由于它的参数和返回类型都用了范型，故要在返回类型T前强制转换，即<T,ID>。&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/05/27/278122.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/278122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-05-27 02:47 <a href="http://www.blogjava.net/rongxh7/archive/2009/05/27/278122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>