﻿<?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-lqxue-随笔分类-java</title><link>http://www.blogjava.net/lqxue/category/24897.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 21 Apr 2008 15:47:28 GMT</lastBuildDate><pubDate>Mon, 21 Apr 2008 15:47:28 GMT</pubDate><ttl>60</ttl><item><title>在Spring中使用JTA事务管理</title><link>http://www.blogjava.net/lqxue/archive/2008/04/21/194517.html</link><dc:creator>lqx</dc:creator><author>lqx</author><pubDate>Mon, 21 Apr 2008 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/lqxue/archive/2008/04/21/194517.html</guid><wfw:comment>http://www.blogjava.net/lqxue/comments/194517.html</wfw:comment><comments>http://www.blogjava.net/lqxue/archive/2008/04/21/194517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lqxue/comments/commentRss/194517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lqxue/services/trackbacks/194517.html</trackback:ping><description><![CDATA[http://java.e800.com.cn/articles/2007/417/1176746498587392322_1.html<br />
<br />
http://www.oracle.com/technology/tech/java/spring/how-to-jta-spring.html<br />
<img src ="http://www.blogjava.net/lqxue/aggbug/194517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lqxue/" target="_blank">lqx</a> 2008-04-21 15:09 <a href="http://www.blogjava.net/lqxue/archive/2008/04/21/194517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>What does the transient and volatile keywords do? </title><link>http://www.blogjava.net/lqxue/archive/2008/03/06/184118.html</link><dc:creator>lqx</dc:creator><author>lqx</author><pubDate>Wed, 05 Mar 2008 16:35:00 GMT</pubDate><guid>http://www.blogjava.net/lqxue/archive/2008/03/06/184118.html</guid><wfw:comment>http://www.blogjava.net/lqxue/comments/184118.html</wfw:comment><comments>http://www.blogjava.net/lqxue/archive/2008/03/06/184118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lqxue/comments/commentRss/184118.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lqxue/services/trackbacks/184118.html</trackback:ping><description><![CDATA[When your not sure consult the 'Bible', 'Java&#8482; Language Specification'<br />
<a href="http://java.sun.com/docs/books/jls/third_edition/html/classes.html#78119" target="_blank" rel="nofollow">http://java.sun.com/docs/books/jls/t...ses.html#78119</a><br />
<br />
<br />
8.3.1.3 transient Fields<br />
Variables may be marked transient to indicate that they are not part of<br />
the persistent state of an object.<br />
<br />
If an instance of the class Point:<br />
<br />
class Point {<br />
int x, y;<br />
transient float rho, theta;<br />
}<br />
<br />
were saved to persistent storage by a system service, then only the<br />
fields x and y would be saved. This specification does not specify<br />
details of such services; see the specification of java.io.Serializable<br />
for an example of such a service.<br />
<br />
8.3.1.4 volatile Fields<br />
As described in &#167;17, the Java programming language allows threads to<br />
access shared variables. As a rule, to ensure that shared variables are<br />
consistently and reliably updated, a thread should ensure that it has<br />
exclusive use of such variables by obtaining a lock that,<br />
conventionally, enforces mutual exclusion for those shared variables.<br />
<br />
The Java programming language provides a second mechanism, volatile<br />
fields, that is more convenient than locking for some purposes.<br />
A field may be declared volatile, in which case the Java memory model<br />
(&#167;17) ensures that all threads see a consistent value for the variable.<br />
<br />
If, in the following example, one thread repeatedly calls the method one<br />
(but no more than Integer.MAX_VALUE times in all), and another thread<br />
repeatedly calls the method two:<br />
<br />
class Test {<br />
static int i = 0, j = 0;<br />
static void one() { i++; j++; }<br />
static void two() {<br />
System.out.println("i=" + i + " j=" + j);<br />
}<br />
}<br />
<br />
then method two could occasionally print a value for j that is greater<br />
than the value of i, because the example includes no synchronization<br />
and, under the rules explained in &#167;17, the shared values of i and j<br />
might be updated out of order.<br />
<br />
One way to prevent this out-or-order behavior would be to declare<br />
methods one and two to be synchronized (&#167;8.4.3.6):<br />
<br />
class Test {<br />
static int i = 0, j = 0;<br />
static synchronized void one() { i++; j++; }<br />
static synchronized void two() {<br />
System.out.println("i=" + i + " j=" + j);<br />
}<br />
}<br />
<br />
This prevents method one and method two from being executed<br />
concurrently, and furthermore guarantees that the shared values of i and<br />
j are both updated before method one returns. Therefore method two never<br />
observes a value for j greater than that for i; indeed, it always<br />
observes the same value for i and j.<br />
<br />
Another approach would be to declare i and j to be volatile:<br />
<br />
class Test {<br />
static volatile int i = 0, j = 0;<br />
static void one() { i++; j++; }<br />
static void two() {<br />
System.out.println("i=" + i + " j=" + j);<br />
}<br />
}<br />
<br />
This allows method one and method two to be executed concurrently, but<br />
guarantees that accesses to the shared values for i and j occur exactly<br />
as many times, and in exactly the same order, as they appear to occur<br />
during execution of the program text by each thread. Therefore, the<br />
shared value for j is never greater than that for i, because each update<br />
to i must be reflected in the shared value for i before the update to j<br />
occurs. It is possible, however, that any given invocation of method two<br />
might observe a value for j that is much greater than the value observed<br />
for i, because method one might be executed many times between the<br />
moment when method two fetches the value of i and the moment when method<br />
two fetches the value of j.<br />
<br />
See &#167;17 for more discussion and examples.<br />
<br />
A compile-time error occurs if a final variable is also declared volatile.<br />
<br />
--<br />
<br />
<img src ="http://www.blogjava.net/lqxue/aggbug/184118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lqxue/" target="_blank">lqx</a> 2008-03-06 00:35 <a href="http://www.blogjava.net/lqxue/archive/2008/03/06/184118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>propedit,很好用的properties工具</title><link>http://www.blogjava.net/lqxue/archive/2008/02/26/182158.html</link><dc:creator>lqx</dc:creator><author>lqx</author><pubDate>Tue, 26 Feb 2008 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/lqxue/archive/2008/02/26/182158.html</guid><wfw:comment>http://www.blogjava.net/lqxue/comments/182158.html</wfw:comment><comments>http://www.blogjava.net/lqxue/archive/2008/02/26/182158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lqxue/comments/commentRss/182158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lqxue/services/trackbacks/182158.html</trackback:ping><description><![CDATA[Eclipse plug in address<br />
http://propedit.sourceforge.jp/eclipse/<br />
<img src ="http://www.blogjava.net/lqxue/aggbug/182158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lqxue/" target="_blank">lqx</a> 2008-02-26 10:33 <a href="http://www.blogjava.net/lqxue/archive/2008/02/26/182158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[收藏]基础知识</title><link>http://www.blogjava.net/lqxue/archive/2008/01/11/174720.html</link><dc:creator>lqx</dc:creator><author>lqx</author><pubDate>Fri, 11 Jan 2008 13:33:00 GMT</pubDate><guid>http://www.blogjava.net/lqxue/archive/2008/01/11/174720.html</guid><wfw:comment>http://www.blogjava.net/lqxue/comments/174720.html</wfw:comment><comments>http://www.blogjava.net/lqxue/archive/2008/01/11/174720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lqxue/comments/commentRss/174720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lqxue/services/trackbacks/174720.html</trackback:ping><description><![CDATA[1.简述逻辑操作(&amp;,|,^)与条件操作(&amp;&amp;,||)的区别。(15分)<br />
区别主要答两点:<br />
a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型<br />
b.逻辑操作不会产生短路.如:<br />
int a = 0;<br />
int b = 0;<br />
<br />
if( (a = 3) &gt; 0 || (b = 3) &gt; 0 ) //操后a =3,b=0.<br />
if( (a = 3) &gt; 0 | (b = 3) &gt; 0 ) //操后a =3,b=3.<br />
&nbsp; <br />
答对第一点得5分,答对第二点得10分.<br />
<br />
本题考察最最基本的知识,但仍然有很多大牛级开发人员下马,任何语言在开始的部分<br />
都会详细介绍这些基本知识,但除了学习第一种语言时,没有人在学习新的语言时愿意<br />
花五分钟来复习一下.<br />
<br />
<br />
2.下面程序运行会发生什么结果?如果有错误,如何改正? (15分)<br />
interface&nbsp; A{<br />
&nbsp; int x = 0;<br />
}<br />
class B{<br />
&nbsp; int x =1;<br />
}<br />
class C<br />
&nbsp;&nbsp;&nbsp; extends B implements A {<br />
&nbsp; public void pX(){<br />
&nbsp;&nbsp;&nbsp; System.out.println(x);<br />
&nbsp; }<br />
&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp; new C().pX();<br />
&nbsp; }<br />
}<br />
}<br />
<br />
本题在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,<br />
两个x都匹配,就象在同时import java.util和java.sql两个包时直接声明Date一样)<br />
<br />
本题主要考察对接口和类的最最基本的结构的了解.对于父类的变量,可以用super.x来<br />
明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确.<br />
<br />
<br />
3.简述 Java Server Page 和 Servlet 的联系和区别。(20分)<br />
本题不用多说,在答相同点时应该明确知道jsp编译后是"类servlet"而"不是Servlet",<br />
答区别时应该回答出"侧重于(视图/控制逻辑)".其它可根据情况加减分值.知识很简单,<br />
但从面试的角度看,被试者不仅要能知道它们的区别,而且要能比较准确地表达出来(以<br />
后写文档要能让别人看得懂,不产生歧义),回答"jsp编译后就是servlet"视为错误,回答<br />
"jsp用于视图,servlet用于控制逻辑"视为错误,应该用侧重于,主要(多数)用于等词语<br />
表达.<br />
<br />
<br />
4.XML文档定义有几种形式？它们之间有何本质区别？<br />
解析XML文档有哪几种方式？(20分)<br />
本题三个答题点:<br />
a: 两种形式 dtd,schema<br />
b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的<br />
根本目的)<br />
c: 两种主要方式:dom,sax.答出两种得全分,如能答出saxt,或其它(在答出dom,sax的基<br />
础上,如果应试者认为其它方式也可以视为对xml的解析应该允许.但没有答出dom,sax把<br />
其它方式说成是对XML的解析不得分)应该加分.<br />
<br />
5.简述synchronized和java.util.concurrent.locks.Lock的异同 ？(15分)<br />
<br />
主要相同点:<br />
Lock能完成synchronized所实现的所有功能.(其它不重要)<br />
主要不同点:<br />
Lock有比synchronized更精确的线程语义和更好的性能(在相同点中回答此点也行)<br />
synchronized会自动释放锁.而Lock一定要求程序员手工释放.并且必须在finally从句<br />
中释放,如果没有答出在finally中释放不得分.就如Connection没有在finally中关闭一<br />
样.连最基本的资源释放都做不好,还谈什么多线程编程.<br />
<br />
<br />
6.EJB规范规定EJB中禁止的操作有哪些？(15分)<br />
共有8点,答出下列3-4点得满分.<br />
<br />
1.不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等)<br />
2.不能操作awt<br />
3.不能实现服务器功能<br />
4.不能对静态属生存取.<br />
5.不能使用IO操作直接存取文件系统<br />
6.不能加载本地库.<br />
7.不能将this作为变量和返回.<br />
8.不能循环调用.<br />
<br />
7.请问在Java的线程里有个join()函数，这个函数有什么用呀？<br />
是把调用join()的线程连结(join)到当前线程,什么意思呢?就是当前线程等待调用join()线程的结束.比如:当前线程是主线程,它结的时候要求一个被调用的线程a结束,如果我们不调用a.join();那只能轮询a的状态.<br />
<br />
while(true){<br />
&nbsp; if(!a.isAlive()) break;<br />
&nbsp; sleep(500);<br />
}<br />
System.exet(1);<br />
如果a线程isAlive,则等500ms继续下一次轮巡,如果已经不可用则结束,这种while(true)的轮询一是占用大量的CPU时间.另一是有可能在sleep(500);时,刚睡1ms时,a就已经!isAlive()了,那就多睡了499ms,浪费了时间,而如果<br />
<br />
a.join();<br />
System.exit(1);<br />
则一等a线程结束就会退出.如果没有其它操作,主线程就不会占用CPU时间.<br />
<br />
8当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递? <br />
<br />
　　是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时，参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变，但对象的引用是永远不会改变的。 <br />
<br />
9作用域public,private,protected,以及不写时的区别<br />
<font id="font_word" style="font-size: 14px; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif">答：区别如下： <br />
<br />
作用域 当前类 同一package 子孙类 其他package <br />
<br />
public &#8730; &#8730; &#8730; &#8730; <br />
<br />
protected &#8730; &#8730; &#8730; &#215; <br />
<br />
friendly &#8730; &#8730; &#215; &#215; <br />
<br />
private &#8730; &#215; &#215; &#215; <br />
<br />
不写时默认为friendly <br />
</font>10ArrayList和Vector的区别,HashMap和Hashtable的区别 <br />
<br />
答：就ArrayList与Vector主要从二方面来说. <br />
<br />
一.同步性:Vector是线程安全的，也就是说是同步的，而ArrayList是线程序不安全的，不是同步的 <br />
<br />
二.数据增长:当需要增长时,Vector默认增长为原来一培，而ArrayList却是原来的一半<br />
11一.静态内部类可以有静态成员，而非静态内部类则不能有静态成员。<br />
12静态内部类的非静态成员可以访问外部类的静态变量，而不可访问外部类的非静态变量<br />
13jsp有哪些动作?作用分别是什么? <br />
<br />
答:JSP共有以下6种基本动作 <br />
<br />
jsp:include：在页面被请求的时候引入一个文件。 <br />
<br />
jsp:useBean：寻找或者实例化一个JavaBean。 <br />
<br />
jsp:setProperty：设置JavaBean的属性。 <br />
<br />
jsp:getProperty：输出某个JavaBean的属性。 <br />
<br />
jsp:forward：把请求转到一个新的页面。 <br />
<br />
jsp:plugin：根据浏览器类型为Java插件生成OBJECT或EMBED标记 <br />
<br />
14remote接口和home接口主要作用 <br />
<br />
remote接口定义了业务方法，用于EJB客户端调用业务方法 <br />
<br />
home接口是EJB工厂用于创建和移除查找EJB实例 <br />
<br />
15客服端调用EJB对象的几个基本步骤 <br />
<br />
一、 设置JNDI服务工厂以及JNDI服务地址系统属性 <br />
<br />
二、 查找Home接口 <br />
<br />
三、 从Home接口调用Create方法创建Remote接口 <br />
<br />
四、 通过Remote接口调用其业务方法 <br />
<br />
<img src ="http://www.blogjava.net/lqxue/aggbug/174720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lqxue/" target="_blank">lqx</a> 2008-01-11 21:33 <a href="http://www.blogjava.net/lqxue/archive/2008/01/11/174720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java String ==</title><link>http://www.blogjava.net/lqxue/archive/2007/12/05/165554.html</link><dc:creator>lqx</dc:creator><author>lqx</author><pubDate>Wed, 05 Dec 2007 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/lqxue/archive/2007/12/05/165554.html</guid><wfw:comment>http://www.blogjava.net/lqxue/comments/165554.html</wfw:comment><comments>http://www.blogjava.net/lqxue/archive/2007/12/05/165554.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lqxue/comments/commentRss/165554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lqxue/services/trackbacks/165554.html</trackback:ping><description><![CDATA[一般来说，程序代码中的字符串常量经过编译之后，都具有唯一性，即，内存中不会存在两份相同的字符串常量。<br />
<br />
（通常情况下，C++，C语言程序编译之后，也具有同样的特性。）<br />
<br />
比如，我们有如下代码。<br />
<br />
String A = &#8220;atom&#8221;;<br />
<br />
String B = &#8220;atom&#8221;;<br />
<br />
我们有理由认为，A和B指向同一个字符串常量。即，A==B。<br />
<br />
注意，声明字符串变量的代码，不符合上面的规则。<br />
<br />
String C= new String(&#8220;atom&#8221;);<br />
<br />
String D = new String(&#8220;atom&#8221;);<br />
<br />
这里的C和D的声明是字符串变量的声明，所以，C != D。<br />
<br />
<img src ="http://www.blogjava.net/lqxue/aggbug/165554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lqxue/" target="_blank">lqx</a> 2007-12-05 16:14 <a href="http://www.blogjava.net/lqxue/archive/2007/12/05/165554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>  技术补习之序列化ID（serialVersionUID） </title><link>http://www.blogjava.net/lqxue/archive/2007/11/14/160545.html</link><dc:creator>lqx</dc:creator><author>lqx</author><pubDate>Wed, 14 Nov 2007 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/lqxue/archive/2007/11/14/160545.html</guid><wfw:comment>http://www.blogjava.net/lqxue/comments/160545.html</wfw:comment><comments>http://www.blogjava.net/lqxue/archive/2007/11/14/160545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lqxue/comments/commentRss/160545.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lqxue/services/trackbacks/160545.html</trackback:ping><description><![CDATA[<p><font face="Arial">简单来说，Java的序列化机制是通过在运行时判断类的<font color="#ff0000">serialVersionUID</font>来验证版本一致性的。在进行反序列化时，JVM会把传来的字节流中的serialVersionUID与本地相应实体（类）的<font color="#ff0000">serialVersionUID</font>进行比较，如果相同就认为是一致的，可以进行反序列化，否则就会出现序列化版本不一致的异常。</font></p>
<p><font face="Arial">当实现java.io.Serializable接口的实体（类）没有显式地定义一个名为<font color="#ff0000">serialVersionUID</font>，类型为<font color="#993300"><strong><em>long</em></strong></font>的变量时，Java序列化机制会根据编译的class自动生成一个<font color="#ff0000">serialVersionUID</font>作序列化版本比较用，这种情况下，只有同一次编译生成的class才会生成相同的<font color="#ff0000">serialVersionUID</font> 。</font></p>
<p>如果我们不希望通过编译来强制划分软件版本，即实现序列化接口的实体能够兼容先前版本，未作更改的类，就需要显式地定义一个名为<font color="#ff0000">serialVersionUID</font>，类型为<font color="#993300"><strong><em>long</em></strong></font>的变量，不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。 <br />
</p>
<br />
<p><br />
</p>
<p>源自：http://sharajava.javaeye.com/blog/102886<br />
</p>
<img src ="http://www.blogjava.net/lqxue/aggbug/160545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lqxue/" target="_blank">lqx</a> 2007-11-14 13:58 <a href="http://www.blogjava.net/lqxue/archive/2007/11/14/160545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[收集]java5 的一些的性</title><link>http://www.blogjava.net/lqxue/archive/2007/10/23/155340.html</link><dc:creator>lqx</dc:creator><author>lqx</author><pubDate>Tue, 23 Oct 2007 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/lqxue/archive/2007/10/23/155340.html</guid><wfw:comment>http://www.blogjava.net/lqxue/comments/155340.html</wfw:comment><comments>http://www.blogjava.net/lqxue/archive/2007/10/23/155340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lqxue/comments/commentRss/155340.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lqxue/services/trackbacks/155340.html</trackback:ping><description><![CDATA[<strong>@SuppressWarnings</strong><span style="color: black; font-family: 宋体">与前两个注释有所不同，你需要添加一个参数才能正确使用，这些参数值都是已经定义好了的，我们选择性的使用就好了，参数如下：<span lang="EN-US"><O:P></O:P></span></span>
<div align="center">
<table class="MsoTableGrid" style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span style="color: black; font-family: 宋体"><font size="3">参数<span lang="EN-US"><O:P></O:P></span></font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-color: rgb(236,233,216); padding-bottom: 0cm; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span style="color: black; font-family: 宋体"><font size="3">语义<span lang="EN-US"><O:P></O:P></span></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span lang="EN-US" style="font-family: 宋体"><font size="3">deprecation<span style="color: black"><O:P></O:P></span></font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(236,233,216); padding-bottom: 0cm; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体"><font size="3">使用了过时的类或方法时的警告<span lang="EN-US"><O:P></O:P></span></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span lang="EN-US" style="font-family: 宋体"><font size="3">unchecked<span style="color: black"><O:P></O:P></span></font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(236,233,216); padding-bottom: 0cm; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span style="font-family: 宋体"><font size="3">执行了未检查的转换时的警告，例如当使用集合时没有用泛型<span lang="EN-US"> (Generics) </span>来指定集合保存的类型<span lang="EN-US" style="color: black"><O:P></O:P></span></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span lang="EN-US" style="font-family: 宋体"><font size="3">fallthrough<span style="color: black"><O:P></O:P></span></font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(236,233,216); padding-bottom: 0cm; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span style="font-family: 宋体"><font size="3">当<span lang="EN-US"> Switch </span>程序块直接通往下一种情况而没有<span lang="EN-US"> Break </span>时的警告<span lang="EN-US" style="color: black"><O:P></O:P></span></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span lang="EN-US" style="font-family: 宋体"><font size="3">path<span style="color: black"><O:P></O:P></span></font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(236,233,216); padding-bottom: 0cm; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span style="font-family: 宋体"><font size="3">在类路径、源文件路径等中有不存在的路径时的警告<span lang="EN-US" style="color: black"><O:P></O:P></span></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span lang="EN-US" style="font-family: 宋体"><font size="3">serial<span style="color: black"><O:P></O:P></span></font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(236,233,216); padding-bottom: 0cm; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span style="font-family: 宋体"><font size="3">当在可序列化的类上缺少<span lang="EN-US"> serialVersionUID </span>定义时的警告<span lang="EN-US" style="color: black"><O:P></O:P></span></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span lang="EN-US" style="font-family: 宋体"><font size="3">finally<span style="color: black"><O:P></O:P></span></font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(236,233,216); padding-bottom: 0cm; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span style="font-family: 宋体"><font size="3">任何<span lang="EN-US"> finally </span>子句不能正常完成时的警告<span lang="EN-US" style="color: black"><O:P></O:P></span></font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span lang="EN-US" style="font-family: 宋体"><font size="3">all<span style="color: black"><O:P></O:P></span></font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(236,233,216); padding-bottom: 0cm; border-top-color: rgb(236,233,216); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent">
            <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span style="font-family: 宋体"><font size="3">关于以上所有情况的警告<span lang="EN-US" style="color: black"><O:P></O:P></span></font></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><span lang="EN-US" style="color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp; </span></span></font></p>
<strong>Override </strong><br />
<br />
　　Override表示，它所注释的方法应该重写超类中具有相同签名的方法：
<pre class="code">@Override<br />
<br />
　　public int hashCode() {<br />
<br />
　　...<br />
<br />
　　}</pre>
<br />
<br />
　　看上面的例子，如果没有在hashCode中将&#8220;C&#8221;大写，在编译时不会出现错误，但是在运行时将无法像期望的那样调用该方法。通过添加Override标签，编译器会提示它是否真正地执行了重写。<br />
<br />
　　在超类发生改变的情况中，这也很有帮助。如果向该方法中添加一个新参数，而且方法本身也被重命名了，那么子类将突然不能编译，因为它不再重写超类的任何东西。<br />
<br />
<strong>枚举<br />
<br />
　　</strong><br />
<br />
　　enum非常像public static final int声明，后者作为枚举值已经使用了很多年。对int所做的最大也是最明显的改进是类型安全――您不能错误地用枚举的一种类型代替另一种类型，这一点和int不同，所有的int对编译器来说都是一样的。除去极少数例外的情况，通常都应该用enum实例替换全部的枚举风格的int结构。<br />
<br />
　　枚举提供了一些附加的特性。EnumMap和EnumSet这两个实用类是专门为枚举优化的标准集合实现。如果知道集合只包含枚举类型，那么应该使用这些专门的集合来代替HashMap或HashSet。<br />
<br />
　　大部分情况下，可以使用enum对代码中的所有public static final int做插入替换。它们是可比的，并且可以静态导入，所以对它们的引用看起来是等同的，即使是对于内部类（或内部枚举类型）。注意，比较枚举类型的时候，声明它们的指令表明了它们的顺序值。<br />
<br />
　　<strong>&#8220;隐藏的&#8221;静态方法</strong><br />
<br />
　　两个静态方法出现在所有枚举类型声明中。因为它们是枚举子类上的静态方法，而不是Enum本身的方法，所以它们在java.lang.Enum的javadoc中没有出现。<br />
<br />
　　第一个是values()，返回一个枚举类型所有可能值的数组。<br />
<br />
　　第二个是valueOf()，为提供的字符串返回一个枚举类型，该枚举类型必须精确地匹配源代码声明。<br />
<br />
　　<strong>方法</strong><br />
<br />
　　关于枚举类型，我们最喜欢的一个方面是它可以有方法。过去您可能需要编写一些代码，对public static final int进行转换，把它从数据库类型转换为JDBC URL。而现在则可以让枚举类型本身带一个整理代码的方法。下面就是一个例子，包括DatabaseType枚举类型的抽象方法以及每个枚举实例中提供的实现：<br />
<br />
　　
<pre class="code">  public enum  DatabaseType {<br />
<br />
　　ORACLE {<br />
<br />
　　public String getJdbcUrl() {...}<br />
<br />
　　},<br />
<br />
　　MYSQL {<br />
<br />
　　public String getJdbcUrl() {...}<br />
<br />
　　};<br />
<br />
　　public abstract String getJdbcUrl();<br />
<br />
　　}</pre>
<br />
<br />
　　现在枚举类型可以直接提供它的实用方法。例如：<br />
<br />
　　DatabaseType dbType = ...;<br />
<br />
　　String jdbcURL = dbType.getJdbcUrl();<br />
<br />
　　要获取URL，必须预先知道该实用方法在哪里。<br />
<br />
<strong>可变参数(Vararg)</strong><br />
<br />
　Log.log(String code, String... args)<br />
<strong>协变返回</strong><br />
<br />
　　协变返回的基本用法是用于在已知一个实现的返回类型比API更具体的时候避免进行类型强制转换。在下面这个例子中，有一个返回Animal对象的Zoo接口。我们的实现返回一个AnimalImpl对象，但是在JDK 1.5之前，要返回一个Animal对象就必须声明。:<br />
<br />
　　
<pre class="code">    public interface Zoo  {<br />
<br />
　　public Animal getAnimal();<br />
<br />
　　}<br />
<br />
　　public class ZooImpl  implements Zoo {<br />
<br />
　　public Animal getAnimal(){<br />
<br />
　　return new AnimalImpl();<br />
<br />
　　}<br />
<br />
　　}<br />
　　协变返回的使用替换了三个反模式：</pre>
<ul>
    <li>直接字段访问。为了规避API限制，一些实现把子类直接暴露为字段： </li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZooImpl._animal<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另一种形式是，在知道实现的实际上是特定的子类的情况下，在调用程序中执行向下转换： </p>
<br />
<br />
　　
<p align="left">((AnimalImpl)ZooImpl.getAnimal()).implMethod();<br />
<br />
　　
<ul><br />
    <br />
    　　
    <li>我看到的最后一种形式是一个具体的方法，该方法用来避免由一个完全不同的签名所引发的问题： </li>
</ul>
<br />
<br />
　　
<p align="left">ZooImpl._getAnimal();<br />
<br />
　　这三种模式都有它们的问题和局限性。要么是不够整洁，要么就是暴露了不必要的实现细节。<br />
<br />
　　协变<br />
<br />
　　协变返回模式就比较整洁、安全并且易于维护，它也不需要类型强制转换或特定的方法或字段：<br />
<br />
　　public AnimalImpl getAnimal(){<br />
<br />
　　return new AnimalImpl();<br />
<br />
　　}<br />
<br />
　　使用结果：<br />
<br />
　　ZooImpl.getAnimal().implMethod();<br />
<br />
参考：http://www.linuxpk.com/43834.html</p>
<img src ="http://www.blogjava.net/lqxue/aggbug/155340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lqxue/" target="_blank">lqx</a> 2007-10-23 17:15 <a href="http://www.blogjava.net/lqxue/archive/2007/10/23/155340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[收藏]用Spring 2.0和AspectJ简化企业应用程序</title><link>http://www.blogjava.net/lqxue/archive/2007/10/18/153937.html</link><dc:creator>lqx</dc:creator><author>lqx</author><pubDate>Thu, 18 Oct 2007 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/lqxue/archive/2007/10/18/153937.html</guid><wfw:comment>http://www.blogjava.net/lqxue/comments/153937.html</wfw:comment><comments>http://www.blogjava.net/lqxue/archive/2007/10/18/153937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lqxue/comments/commentRss/153937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lqxue/services/trackbacks/153937.html</trackback:ping><description><![CDATA[http://www.infoq.com/cn/articles/Simplifying-Enterprise-Apps<br />
<img src ="http://www.blogjava.net/lqxue/aggbug/153937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lqxue/" target="_blank">lqx</a> 2007-10-18 16:27 <a href="http://www.blogjava.net/lqxue/archive/2007/10/18/153937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java进制转换</title><link>http://www.blogjava.net/lqxue/archive/2007/08/13/136376.html</link><dc:creator>lqx</dc:creator><author>lqx</author><pubDate>Mon, 13 Aug 2007 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/lqxue/archive/2007/08/13/136376.html</guid><wfw:comment>http://www.blogjava.net/lqxue/comments/136376.html</wfw:comment><comments>http://www.blogjava.net/lqxue/archive/2007/08/13/136376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lqxue/comments/commentRss/136376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lqxue/services/trackbacks/136376.html</trackback:ping><description><![CDATA[<p>十进制转成十六进制：<br>Integer.toHexString(int i)<br>十进制转成八进制<br>Integer.toOctalString(int i)oBin<br>十进制转成二进制<br>Integer.taryString(int i) </p>
<p>十六进制转成十进制<br>Integer.valueOf("FFFF",16).toString()<br>八进制转成十进制<br>Integer.valueOf("876",8).toString()<br>二进制转十进制<br>Integer.valueOf("0101",2).toString()<br></p>
<img src ="http://www.blogjava.net/lqxue/aggbug/136376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lqxue/" target="_blank">lqx</a> 2007-08-13 14:37 <a href="http://www.blogjava.net/lqxue/archive/2007/08/13/136376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>