﻿<?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-followith-随笔分类-Java</title><link>http://www.blogjava.net/followith/category/32394.html</link><description>既然我们不能改变周遭的世界，我们就只好改变自己，用慈悲心和智慧心来面对这一切。</description><language>zh-cn</language><lastBuildDate>Wed, 03 Sep 2008 02:52:20 GMT</lastBuildDate><pubDate>Wed, 03 Sep 2008 02:52:20 GMT</pubDate><ttl>60</ttl><item><title>MYECLIPSE6.0.1注册码（转载）！仅共学习研究使用</title><link>http://www.blogjava.net/followith/archive/2008/09/01/226018.html</link><dc:creator>followith</dc:creator><author>followith</author><pubDate>Mon, 01 Sep 2008 02:13:00 GMT</pubDate><guid>http://www.blogjava.net/followith/archive/2008/09/01/226018.html</guid><wfw:comment>http://www.blogjava.net/followith/comments/226018.html</wfw:comment><comments>http://www.blogjava.net/followith/archive/2008/09/01/226018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/followith/comments/commentRss/226018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/followith/services/trackbacks/226018.html</trackback:ping><description><![CDATA[<div id="xspace-item-70358">
<p>package test;</p>
<p>import <a ō nclick="javascrīpt:tagshow(event, 'java');" href="http://www.51testing.com/javascr%C4%ABpt:;" target="_self"><u><strong>java</strong></u></a>.io.*;</p>
<p>public class MyEclipseGen {<br />
&nbsp;&nbsp;&nbsp; private static final String LL =
"Decompiling this copyrighted software is a violation of both your
license agreement and the Digital Millenium Copyright Act of 1998 (<a href="http://www.loc.gov/copyright/legislation/dmca.pdf">http://www.loc.gov/copyright/legislation/dmca.pdf</a>).
Under section 1204 of the DMCA, penalties range up to a $500,000 fine
or up to five years imprisonment for a first offense. Think about it;
pay for a license, avoid prosecution, and feel better about yourself.";<br />
&nbsp;&nbsp;&nbsp; public String getSerial(String userId, String licenseNum) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Calendar cal = java.util.Calendar.getInstance();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cal.add(1, 3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cal.add(6, -1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.text.NumberFormat nf = new java.text.DecimalFormat("000");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; licenseNum = nf.format(Integer.valueOf(licenseNum));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String verTime = new StringBuilder("-").append(new java.text.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat("yyMMdd").format(cal.getTime())).append("0").<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String type = "YE3MP-";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String need = new StringBuilder(userId.substring(0, 1)).append(type).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; append("300").append(licenseNum).append(verTime).toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String dx = new StringBuilder(need).append(LL).append(userId).toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int suf = this.decode(dx);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String code = new StringBuilder(need).append(String.valueOf(suf)).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.change(code);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; private int decode(String s) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[] ac;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int k;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ac = s.toCharArray();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = ac.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (j &lt; k) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = (31 * i) + ac[j];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Math.abs(i);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; private String change(String s) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] abyte0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[] ac;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int k;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abyte0 = s.getBytes();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ac = new char[s.length()];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = abyte0.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (i &lt; k) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = abyte0[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((j &gt;= 48) &amp;&amp; (j &lt;= 57)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = (((j - 48) + 5) % 10) + 48;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ((j &gt;= 65) &amp;&amp; (j &lt;= 90)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = (((j - 65) + 13) % 26) + 65;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ((j &gt;= 97) &amp;&amp; (j &lt;= 122)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = (((j - 97) + 13) % 26) + 97;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ac[i] = (char) j;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return String.valueOf(ac);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public MyEclipseGen() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("please input register name:");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader reader = new BufferedReader(new InputStreamReader(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.in));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String userId = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userId = reader.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyEclipseGen myeclipsegen = new MyEclipseGen();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String res = myeclipsegen.getSerial(userId, "20");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Serial:" + res);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝</p>
<p>运行该代码，在控制台中会出现：</p>
<p>please input register name:<br />
&#215;&#215;&#215;&#215;&#215;（你的name）</p>
<p>即生成序列号：</p>
<p>please input register name:<br />
camille<br />
Serial:pLR8ZC-855575-53668556514322852<br />
</p>
</div>
<p>
<a href="http://www.51testing.com/?26508/action_viewspace_itemid_70358.html"><br />
</a><a href="http://www.51testing.com/?26508/action_viewspace_itemid_70358.html#xspace-itemform"></a>
</p>
<img src ="http://www.blogjava.net/followith/aggbug/226018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/followith/" target="_blank">followith</a> 2008-09-01 10:13 <a href="http://www.blogjava.net/followith/archive/2008/09/01/226018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>异常的捕获和处理</title><link>http://www.blogjava.net/followith/archive/2008/08/29/225581.html</link><dc:creator>followith</dc:creator><author>followith</author><pubDate>Fri, 29 Aug 2008 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/followith/archive/2008/08/29/225581.html</guid><wfw:comment>http://www.blogjava.net/followith/comments/225581.html</wfw:comment><comments>http://www.blogjava.net/followith/archive/2008/08/29/225581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/followith/comments/commentRss/225581.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/followith/services/trackbacks/225581.html</trackback:ping><description><![CDATA[try语句<br />
*try{...}语句指定了一段代码，该段代码就是一次捕获并处理例外的范围<br />
*在执行过程中，该段代码可能会产生并抛出一种或几种类型的异常对象。它后面的catch语句要分别对这些异常做相应的处理<br />
*如果没有例外产生，所有的catch代码段都被略过不执行<br />
<br />
catch语句<br />
（1）在catch语句块中对异常进行处理的代码，每个try语句块可以伴随一个或多个catch语句，用于处理可能产生的不同类型的异常对象<br />
（2）在catch中声明的异常对象catch(SomeException e)封装了异常事件发生的信息。在catch语句块中可以使用这个对象的一些方法获取这些信息。<br />
例如：<br />
getMessage（）方法，用来得到有关异常事件的信息<br />
printStackTrace()方法，用来跟踪异常事件发生时执行堆栈的内容。<br />
<br />
finally语句<br />
（1）finally语句为异常处理提供一个统一的出口。使得在控制流程转到程序的其他部分以前，能够对程序的状态作统一的管理。<br />
（2）无论try所制定的程序块中是否抛出异常，finally中所指定的代码都会被执行<br />
（3）通常在finally语句中可以进行资源的清除工作。如：<br />
关闭打开的文件<br />
删除临时的文件<br />
......<br />
<br />
<br />
<img src ="http://www.blogjava.net/followith/aggbug/225581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/followith/" target="_blank">followith</a> 2008-08-29 15:17 <a href="http://www.blogjava.net/followith/archive/2008/08/29/225581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>异常处理-异常的分类</title><link>http://www.blogjava.net/followith/archive/2008/08/29/225571.html</link><dc:creator>followith</dc:creator><author>followith</author><pubDate>Fri, 29 Aug 2008 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/followith/archive/2008/08/29/225571.html</guid><wfw:comment>http://www.blogjava.net/followith/comments/225571.html</wfw:comment><comments>http://www.blogjava.net/followith/archive/2008/08/29/225571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/followith/comments/commentRss/225571.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/followith/services/trackbacks/225571.html</trackback:ping><description><![CDATA[Error：称为错误，由Java虚拟机生成并抛出，包括动态链栈失败，虚拟机错误等，程序对其不做处理。<br />
Exception：所有异常类的父类，其子类对应了各种各样可能出现的异常事件，一般需要用户显示的声明或捕获。<br />
Runtime Exception：一类特殊的异常，如被0除、数组下标越界等。其产生比较频繁，处理麻烦，如果显示的生命或捕获将会对程序可读性和运行效率影响很大，因此由系统自动检测并将它们交给缺省的异常处理程序（用户可不必对其处理）。<br />
其中runtime Exception是经常发生的一种异常，你可以捕获也可以不捕获。<br />
<br />
<img src ="http://www.blogjava.net/followith/aggbug/225571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/followith/" target="_blank">followith</a> 2008-08-29 14:21 <a href="http://www.blogjava.net/followith/archive/2008/08/29/225571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdbc连接mysql数据库</title><link>http://www.blogjava.net/followith/archive/2008/08/29/225528.html</link><dc:creator>followith</dc:creator><author>followith</author><pubDate>Fri, 29 Aug 2008 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/followith/archive/2008/08/29/225528.html</guid><wfw:comment>http://www.blogjava.net/followith/comments/225528.html</wfw:comment><comments>http://www.blogjava.net/followith/archive/2008/08/29/225528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/followith/comments/commentRss/225528.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/followith/services/trackbacks/225528.html</trackback:ping><description><![CDATA[一直用的oracle的数据库，今天做测试的时候想用mysql，写了个DBConnect<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: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;DBConnect&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<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;Connection&nbsp;getConnection()&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;urlstr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">jdbc:mysql://127.0.0.1:3306/database</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(</span><span style="color: #000000;">"</span><span style="color: #000000;">com.mysql.jdbc.Driver</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DriverManager.getConnection(urlstr,</span><span style="color: #000000;">"</span><span style="color: #000000;">username</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">password</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(ClassNotFoundException&nbsp;ex)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;conn;<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">}</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/followith/aggbug/225528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/followith/" target="_blank">followith</a> 2008-08-29 11:46 <a href="http://www.blogjava.net/followith/archive/2008/08/29/225528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转帖)java初学者应该明白的问题</title><link>http://www.blogjava.net/followith/archive/2008/08/22/223701.html</link><dc:creator>followith</dc:creator><author>followith</author><pubDate>Fri, 22 Aug 2008 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/followith/archive/2008/08/22/223701.html</guid><wfw:comment>http://www.blogjava.net/followith/comments/223701.html</wfw:comment><comments>http://www.blogjava.net/followith/archive/2008/08/22/223701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/followith/comments/commentRss/223701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/followith/services/trackbacks/223701.html</trackback:ping><description><![CDATA[<span id="post1" style="font-size: 12px; color: #000000;">初学者必须搞懂的问题<br />
<br />
对于这个系列里的问题，每个学Java的人都应该搞懂。当然，如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了，却不很懂这些问题，请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。 <br />
<br />
问题一：我声明了什么！ <br />
<br />
String s = "Hello world!"; <br />
<br />
许多人都做过这样的事情，但是，我们到底声明了什么？回答通常是：一个String，内容是&#8220;Hello world!&#8221;。这样模糊的回答通常是概念不清的根源。如果要准确的回答，一半的人大概会回答错误。 <br />
这
个语句声明的是一个指向对象的引用，名为&#8220;s&#8221;，可以指向类型为String的任何对象，目前指向"Hello
world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象，我们只是声明了一个只能指向String对象的
引用变量。所以，如果在刚才那句语句后面，如果再运行一句： <br />
<br />
String string = s; <br />
<br />
我们是声明了另外一个只能指向String对象的引用，名为string，并没有第二个对象产生，string还是指向原来那个对象，也就是，和s指向同一个对象。 <br />
<br />
问题二："=="和equals方法究竟有什么区别？ <br />
<br />
==操作符专门用来比较变量的值是否相等。比较好理解的一点是： <br />
int a=10; <br />
int b=10; <br />
则a==b将是true。 <br />
但不好理解的地方是： <br />
String a=new String("foo"); <br />
String b=new String("foo"); <br />
则a==b将返回false。 <br />
<br />
根
据前一帖说过，对象变量其实是一个引用，它们的值是指向对象所在的内存地址，而不是对象本身。a和b都使用了new操作符，意味着将在内存中产生两个内容
为"foo"的字符串，既然是&#8220;两个&#8221;，它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值，所以使用"=="操作符，结果会是
false。诚然，a和b所指的对象，它们的内容都是"foo"，应该是&#8220;相等&#8221;，但是==操作符并不涉及到对象内容的比较。 <br />
对象内容的比较，正是equals方法做的事。 <br />
<br />
看一下Object对象的equals方法是如何实现的： <br />
boolean equals(Object o){ <br />
<br />
return this==o; <br />
<br />
} <br />
Object
对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法，那你的类使用equals和使用==会得到同样的结果。同样也可以看
出，Object的equals方法没有达到equals方法应该达到的目标：比较两个对象内容是否相等。因为答案应该由类的创建者决定，所以
Object把这个任务留给了类的创建者。 <br />
<br />
看一下一个极端的类： <br />
Class Monster{ <br />
private String content; <br />
... <br />
boolean equals(Object another){ return true;} <br />
<br />
} <br />
我覆盖了equals方法。这个实现会导致无论Monster实例内容如何，它们之间的比较永远返回true。 <br />
<br />
所
以当你是用equals方法判断对象的内容是否相等，请不要想当然。因为可能你认为相等，而这个类的作者不这样认为，而类的equals方法的实现是由他
掌握的。如果你需要使用equals方法，或者使用任何基于散列码的集合（HashSet,HashMap,HashTable），请察看一下java
doc以确认这个类的equals逻辑是如何实现的。 <br />
<br />
问题三：String到底变了没有？ <br />
<br />
没有。因为String被设计成不可变(immutable)类，所以它的所有对象都是不可变对象。请看下列代码： <br />
<br />
String s = "Hello"; <br />
s = s + " world!"; <br />
<br />
s
所指向的对象是否改变了呢？从本系列第一篇的结论很容易导出这个结论。我们来看看发生了什么事情。在这段代码中，s原先指向一个String对象，内容
是"Hello"，然后我们对s进行了+操作，那么s所指向的那个对象是否发生了改变呢？答案是没有。这时，s不指向原来那个对象了，而指向了另一个
String对象，内容为"Hello world!"，原来那个对象还存在于内存之中，只是s这个引用变量不再指向它了。 <br />
通过上面的说明，
我们很容易导出另一个结论，如果经常对字符串进行各种各样的修改，或者说，不可预见的修改，那么使用String来代表字符串的话会引起很大的内存开销。
因为String对象建立之后不能再改变，所以对于每一个不同的字符串，都需要一个String对象来表示。这时，应该考虑使用StringBuffer
类，它允许修改，而不是每个不同的字符串都要生成一个新的对象。并且，这两种类的对象转换十分容易。 <br />
同时，我们还可以知道，如果要使用内容相同的字符串，不必每次都new一个String。例如我们要在构造器中对一个名叫s的String引用变量进行初始化，把它设置为初始值，应当这样做： <br />
public class Demo { <br />
private String s; <br />
... <br />
public Demo { <br />
s = "Initial value"; <br />
} <br />
... <br />
} <br />
而非 <br />
s = new String("Initial value"); <br />
后
者每次都会调用构造器，生成新对象，性能低下且内存开销大，并且没有意义，因为String对象不可改变，所以对于内容相同的字符串，只要一个
String对象来表示就可以了。也就说，多次调用上面的构造器创建多个对象，他们的String类型属性s都指向同一个对象。 <br />
上面的结论还基于这样一个事实：对于字符串常量，如果内容相同，Java认为它们代表同一个String对象。而用关键字new调用构造器，总是会创建一个新的对象，无论内容是否相同。 <br />
至
于为什么要把String类设计成不可变类，是它的用途决定的。其实不只String，很多Java标准类库中的类都是不可变的。在开发一个系统的时候，
我们有时候也需要设计不可变类，来传递一组相关的值，这也是面向对象思想的体现。不可变类有一些优点，比如因为它的对象是只读的，所以多线程并发访问也不
会有任何问题。当然也有一些缺点，比如每个不同的状态都要一个对象来代表，可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本，即
StringBuffer。 <br />
<br />
问题四：final关键字到底修饰了什么？ <br />
<br />
final使得被修饰的变量"不变"，但是由于对象型变量的本质是&#8220;引用&#8221;，使得&#8220;不变&#8221;也有了两种含义：引用本身的不变，和引用指向的对象不变。 <br />
<br />
引用本身的不变： <br />
final StringBuffer a=new StringBuffer("immutable"); <br />
final StringBuffer b=new StringBuffer("not immutable"); <br />
a=b;//编译期错误 <br />
<br />
引用指向的对象不变： <br />
final StringBuffer a=new StringBuffer("immutable"); <br />
a.append(" broken!"); //编译通过 <br />
<br />
可
见，final只对引用的&#8220;值&#8221;(也即它所指向的那个对象的内存地址)有效，它迫使引用只能指向初始指向的那个对象，改变它的指向会导致编译期错误。至于
它所指向的对象的变化，final是不负责的。这很类似==操作符：==操作符只负责引用的&#8220;值&#8221;相等，至于这个地址所指向的对象内容是否相等，==操作
符是不管的。 <br />
<br />
理解final问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象，不能保证那
个对象的状态不变。在多线程的操作中,一个对象会被多个线程共享或修改，一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解
决方法就是在此对象新建的时候把它声明为final，意图使得它&#8220;永远不变&#8221;。其实那是徒劳的。 <br />
<br />
问题五：到底要怎么样初始化！ <br />
<br />
本问题讨论变量的初始化，所以先来看一下Java中有哪些种类的变量。 <br />
1. 类的属性，或者叫值域 <br />
2. 方法里的局部变量 <br />
3. 方法的参数 <br />
<br />
对于第一种变量，Java虚拟机会自动进行初始化。如果给出了初始值，则初始化为该初始值。如果没有给出，则把它初始化为该类型变量的默认初始值。 <br />
<br />
int类型变量默认初始值为0 <br />
float类型变量默认初始值为0.0f <br />
double类型变量默认初始值为0.0 <br />
boolean类型变量默认初始值为false <br />
char类型变量默认初始值为0(ASCII码) <br />
long类型变量默认初始值为0 <br />
所有对象引用类型变量默认初始值为null，即不指向任何对象。注意数组本身也是对象，所以没有初始化的数组引用在自动初始化后其值也是null。 <br />
<br />
对
于两种不同的类属性，static属性与instance属性，初始化的时机是不同的。instance属性在创建实例的时候初始化，static属性在
类加载，也就是第一次用到这个类的时候初始化，对于后来的实例的创建，不再次进行初始化。这个问题会在以后的系列中进行详细讨论。 <br />
<br />
对
于第二种变量，必须明确地进行初始化。如果再没有初始化之前就试图使用它，编译器会抗议。如果初始化的语句在try块中或if块中，也必须要让它在第一次
使用前一定能够得到赋值。也就是说，把初始化语句放在只有if块的条件判断语句中编译器也会抗议，因为执行的时候可能不符合if后面的判断条件，如此一来
初始化语句就不会被执行了，这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句，就可以通过编译，因为无论如何，总有至少一
条初始化语句会被执行，不会发生使用前未被初始化的事情。对于try-catch也是一样，如果只有在try块里才有初始化语句，编译部通过。如果在
catch或finally里也有，则可以通过编译。总之，要保证局部变量在使用之前一定被初始化了。所以，一个好的做法是在声明他们的时候就初始化他
们，如果不知道要出事化成什么值好，就用上面的默认值吧！ <br />
<br />
其实第三种变量和第二种本质上是一样的，都是方法中的局部变量。只不过作为参数，肯定是被初始化过的，传入的值就是初始值，所以不需要初始化。 <br />
<br />
问题六：instance of是什么东东？ <br />
<br />
instance of是Java的一个二元操作符，和==，&gt;，&lt;是同一类东东。由于它是由字母组成的，所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例，返回boolean类型的数据。举个例子： <br />
<br />
String s = "I AM an Object!"; <br />
boolean is Object = s instance of Object; <br />
<br />
我们声明了一个String对象引用，指向一个String对象，然后用instanc of来测试它所指向的对象是否是Object类的一个实例，显然，这是真的，所以返回true，也就是isObject的值为True。 <br />
instance of有一些用处。比如我们写了一个处理账单的系统，其中有这样三个类： <br />
<br />
public class Bill {//省略细节} <br />
public class PhoneBill extends Bill {//省略细节} <br />
public class GasBill extends Bill {//省略细节} <br />
<br />
在处理程序里有一个方法，接受一个Bill类型的对象，计算金额。假设两种账单计算方法不同，而传入的Bill对象可能是两种中的任何一种，所以要用instanceof来判断： <br />
<br />
public double calculate(Bill bill) { <br />
if (bill instanceof PhoneBill) { <br />
//计算电话账单 <br />
} <br />
if (bill instanceof GasBill) { <br />
//计算燃气账单 <br />
} <br />
... <br />
} <br />
这样就可以用一个方法处理两种子类。 <br />
<br />
然而，这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现，这是面向对象变成应有的做法，避免回到结构化编程模式。只要提供两个名字和返回值都相同，接受参数类型不同的方法就可以了： <br />
<br />
public double calculate(PhoneBill bill) { <br />
//计算电话账单 <br />
} <br />
<br />
public double calculate(GasBill bill) { <br />
//计算燃气账单 <br />
} <br />
<br />
所以，使用instanceof在绝大多数情况下并不是推荐的做法，应当好好利用多态。<br />
<br />
from:</span>http://www.blogjava.net/badboyryan/articles/91896.html
<img src ="http://www.blogjava.net/followith/aggbug/223701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/followith/" target="_blank">followith</a> 2008-08-22 11:28 <a href="http://www.blogjava.net/followith/archive/2008/08/22/223701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java面试题分析（基础部分）</title><link>http://www.blogjava.net/followith/archive/2008/08/20/223168.html</link><dc:creator>followith</dc:creator><author>followith</author><pubDate>Wed, 20 Aug 2008 02:18:00 GMT</pubDate><guid>http://www.blogjava.net/followith/archive/2008/08/20/223168.html</guid><wfw:comment>http://www.blogjava.net/followith/comments/223168.html</wfw:comment><comments>http://www.blogjava.net/followith/archive/2008/08/20/223168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/followith/comments/commentRss/223168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/followith/services/trackbacks/223168.html</trackback:ping><description><![CDATA[(1)作用域public,protect,private以及不写时的区别<br />
&nbsp; 主要是作用域的不同，这里我用一个财产分配的例子来说明这个问题。首先我们先来了解一下有哪些作用域：<br />
&nbsp; 当前类&nbsp;&nbsp; 财产所有者<br />
&nbsp; 同一Package下的类&nbsp; 财产所有者的配偶（这里我们允许该财产所有者有一个或多个配偶）<br />
&nbsp; 子孙类&nbsp; 财产所有者的子孙<br />
&nbsp; 其他package下的类&nbsp;&nbsp; 财产所有者的旁系亲属，朋友或者甚至没有相关关系的人<br />
&nbsp; public定义的对于当前类，同一package下的类，子孙类，其他package下的都能都使用，即作用域范围不受什么限制<br />
&nbsp; protected 受保护的，那么要保护的对象是什么呢？就像地方保护主义一样，我们要防的只是外来的，因此它的作用域范围除了其他package类都是可以的<br />
&nbsp; friendly 友好的（在C++中有友元类）但是只对他自己和妻子友好，也就是作用域范围只能在当前类和同一Package类<br />
&nbsp; private私有的，比较保守，它呢，只关心当前类,连子孙类也是不可以的，也就是说private方法是不可继承的。（即使我死了，但是我的财产我还要带走，不传给后代，妻子）<br />
&nbsp; 不写的时候默认为friendly<br />
<br />
(2)ArrayList和Vector的区别<br />
&nbsp;&nbsp; 区别主要在同步性(线程安全)和数据增长<br />
&nbsp;&nbsp; 1.Vector是线程安全的，也就是说是同步的，而ArrayList是线程不安全的，也就是说不是同步的。<br />
&nbsp;&nbsp; 2.当需要增长时，Vector默认增长为原来的一倍，而ArrayList默认增长为原来的一半<br />
&nbsp;&nbsp; Vector vector = null<br />
&nbsp;&nbsp; Vector vector = new Vector();<br />
<br />
(3)HashMap和Hashtable的区别<br />
&nbsp;&nbsp; 区别主要在历史原因、同步性（线程安全）和能否为空值<br />
&nbsp;&nbsp; 1.Hashtable是基于陈旧的Dictionary类，而HashMap是java 1.2引进的Map接口的一个实现<br />
&nbsp;&nbsp; 2.Hashtable是线程安全的，也就是说是线程同步的，而HashMap是线程不安全的，即不是同步的<br />
&nbsp;&nbsp; 3.Hashtbale是不允许空值作为一个表的条目的Key或者Value的（容易引起数组越界的错误），而HashMap是允许的<br />
<br />
(4)char型变量能不能存贮一个中文汉字？为什么？<br />
&nbsp;&nbsp; 可以的，因为Java是用unicode编码的，一个char占16个字节，所以放一个中文是完全没有问题的<br />
<br />
(5)float型 float f = 3.4是否正确？<br />
&nbsp;&nbsp; 是不正确的。精度不正确，应该用强制类型转换，如下所示：float f = (float)3.4&nbsp; 或者float f = 3.4f<br />
<br />
&nbsp;&nbsp; float的精度是6~7位有效数字，取值范围是10的-38次方到10的38次方，float占用4字节空间<br />
&nbsp;&nbsp; double的精度是14~15位有效数字，取值范围是10的-308次方到10的308次方,double占用8字节空间<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/followith/aggbug/223168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/followith/" target="_blank">followith</a> 2008-08-20 10:18 <a href="http://www.blogjava.net/followith/archive/2008/08/20/223168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>