﻿<?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-&lt;marquee behavior=scroll scrollamount=1&gt;梦想有多远我们就能走多远......&lt;/marquee&gt;-随笔分类-Java</title><link>http://www.blogjava.net/zhpeng/category/12722.html</link><description>&lt;font filter:glow(color=#ffff00,strength=5)&gt;--zhpeng&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:50:16 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:50:16 GMT</pubDate><ttl>60</ttl><item><title>Java测试规范</title><link>http://www.blogjava.net/zhpeng/archive/2006/08/19/64480.html</link><dc:creator>心随我动</dc:creator><author>心随我动</author><pubDate>Sat, 19 Aug 2006 00:32:00 GMT</pubDate><guid>http://www.blogjava.net/zhpeng/archive/2006/08/19/64480.html</guid><wfw:comment>http://www.blogjava.net/zhpeng/comments/64480.html</wfw:comment><comments>http://www.blogjava.net/zhpeng/archive/2006/08/19/64480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhpeng/comments/commentRss/64480.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhpeng/services/trackbacks/64480.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、未使用<span lang="EN-US">(</span>死<span lang="EN-US">)</span>代码<span lang="EN-US"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。存在未使用的私有静态字段<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。带有不必要的修饰符的借口<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。目前没有使用的私有字段<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。未使用的变量<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。无需的参数<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。显示导入的<span lang="EN-US">java.lang</span>包<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。目前没有使用的私有方法<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">2</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、编码标准<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一行语句中声明了多种类型的变量<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。物理位置不在一起的同名小组成员 。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。从一个抽象类库中的构造器调用的抽象方法<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。包括大量<span lang="EN-US">case</span>语句的<span lang="EN-US">switch</span>语句<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。除了第一个之外的<span lang="EN-US">main</span>（）函数<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。直接弹出的<span lang="EN-US">Exception</span>类库<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">catch</span>语句中<span lang="EN-US">Exception</span>或者<span lang="EN-US">RuntimeException <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。直接弹出的<span lang="EN-US">Error <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。没有在接口中定义的常量<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。长整数应该使用<span lang="EN-US">‘L’</span>代替小写字母<span lang="EN-US">‘l’ <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">3</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、初始化<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。没有显式初始化的静态字段<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。没有显式初始化每个数据成员的构造器<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。编译代码中可能的漏洞<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。存在错误的<span lang="EN-US">case</span>的<span lang="EN-US">switch</span>语句<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。程序体为空的<span lang="EN-US">for</span>语句<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。程序体为空的<span lang="EN-US">if</span>语句<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。需要重载的方法<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。应该使用等号代替<span lang="EN-US">== <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。程序体为空的<span lang="EN-US">else</span>语句<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。强制转换为较低精度的主要数据类型<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。在<span lang="EN-US">switch</span>子句中的文本标识<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">if</span>条件中的变量赋值<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。缺少<span lang="EN-US">default</span>子句中的<span lang="EN-US">switch</span>语句<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。存在嵌套赋值<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。比较浮点数<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。循环控制变量在循环内部被突然改变<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。方法参数名称和类成员名称冲突<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。可能与字符串串联混淆的<span lang="EN-US">+</span>操作符<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">4</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、面向对象编程<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。继承的静态成员函数被隐藏<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。可能嵌套过深的类库<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。继承的实例变量被隐藏<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。被重载<span lang="EN-US">private</span>方法<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。内部的类库不可见或外部的类库不相关<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。某个实列变量为<span lang="EN-US">public</span>或在<span lang="EN-US">package</span>中<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。没有在一开始列出的<span lang="EN-US">public</span>或<span lang="EN-US">package</span>方法和数据<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。不是<span lang="EN-US">abstract</span>或实现比较通常的接口<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。命名惯例<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个类名称不符合标准<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个接口名称不符合标准<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个列外名称不符合标准<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一种方法名称不符合标准<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个静态字段名称不符合标准<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个静态方法名称不符合标准<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一种方法参数名称不符合标准<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个实列字段不符合标准<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个本地变量名称不符合标准<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个最终静态字段中包含小写字母<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个返回布尔值的方法使用<span lang="EN-US">"is"</span>或者<span lang="EN-US">"has"</span>前缀<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个接口成员字段包含小写字母<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。使用一个非惯例的变量名称<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">5</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、优化<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。一个<span lang="EN-US">finally</span>模块中存在未关闭的流<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。使用一个<span lang="EN-US">for</span>循环代替<span lang="EN-US">System.arrarycopy()</span>拷贝数组<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。存在没有必要的<span lang="EN-US">instanceof <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。存在没有必要的强制变量类型转换<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。可以使用一个缩写的赋值语句<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。常量字符串使用<span lang="EN-US">StringBuffer</span>代替<span lang="EN-US">String <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。循环条件过于复杂<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。取反操作符使用过于频繁<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">6</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、回收<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">finalize()</span>没有调用<span lang="EN-US">super.finally() <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。最终方法的最后模块没有调用<span lang="EN-US">super.finalize() <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">finalize()</span>被显示调用<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。在将主要类型转换成<span lang="EN-US">String</span>时，使用了不必要的临时变量<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。在应该使用<span lang="EN-US">long[]</span>的位置使用了<span lang="EN-US">Date[] <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">7</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、<span lang="EN-US">javadoc</span>注释<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。误用了<span lang="EN-US">Javadoc</span>标签<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">Javadoc</span>和普通注释之间区分不明显<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">8</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、线程<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。使用<span lang="EN-US">synchronized</span>，降低了性能<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">9</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、全局静态分析<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。过度访问<span lang="EN-US">package-private</span>字段<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。过度访问<span lang="EN-US">package-private</span>方法<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。过度访问<span lang="EN-US">package-private</span>类库<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。过度访问<span lang="EN-US">public/protected</span>字段<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。过度访问<span lang="EN-US">public/protected</span>方法<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。过度访问<span lang="EN-US">public/protected</span>类库<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。没有使用全局<span lang="EN-US">package-private</span>字段<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。没有使用全局<span lang="EN-US">package-private</span>方法<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。没有使用全局<span lang="EN-US">package-private</span>类库<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。没有使用全局<span lang="EN-US">public/protected</span>字段<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。没有使用全局<span lang="EN-US">public/protected</span>方法<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。没有使用全局<span lang="EN-US">public/protected</span>类库<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">10</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、企业版<span lang="EN-US">java beans(EJB) <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">bean</span>类库没有定义成为<span lang="EN-US">public <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">bean</span>类库被错误定义成为<span lang="EN-US">abstract <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">bean</span>类库被错误定义成为<span lang="EN-US">final <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">bean</span>类库实现一个<span lang="EN-US">ejbCreate()</span>方法<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">bean</span>类库错误定义<span lang="EN-US">finalize</span>方法<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">ejbCreate()</span>访问控制符没有定义成为<span lang="EN-US">public <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">SessionBean</span>中的<span lang="EN-US">ejbCreate()</span>没有返回<span lang="EN-US">void <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。定位方法的修饰符没有定义成为<span lang="EN-US">public <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。定位方法的返回类型不是一个主键，也不是主键的类集<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">ejbPostCreate()</span>有一个非<span lang="EN-US">public</span>的访问控制修饰符<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">ejbPostCreate()</span>没有返回类型<span lang="EN-US">void <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">11</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、杂项<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。成员字段隐藏在成员方法中<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。循环记数器无法递增<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">for</span>循环中没有包含布尔条件<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。存在的<span lang="EN-US">clone()</span>方法没有调用<span lang="EN-US">super.clone() <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。<span lang="EN-US">for</span>语句缺少代码模块<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">。方法参数得到赋值</span>
<img src ="http://www.blogjava.net/zhpeng/aggbug/64480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhpeng/" target="_blank">心随我动</a> 2006-08-19 08:32 <a href="http://www.blogjava.net/zhpeng/archive/2006/08/19/64480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java服务器端编程安全必读</title><link>http://www.blogjava.net/zhpeng/archive/2006/08/18/64230.html</link><dc:creator>心随我动</dc:creator><author>心随我动</author><pubDate>Thu, 17 Aug 2006 16:19:00 GMT</pubDate><guid>http://www.blogjava.net/zhpeng/archive/2006/08/18/64230.html</guid><wfw:comment>http://www.blogjava.net/zhpeng/comments/64230.html</wfw:comment><comments>http://www.blogjava.net/zhpeng/archive/2006/08/18/64230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhpeng/comments/commentRss/64230.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhpeng/services/trackbacks/64230.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、概述																		　　																		　　　　编写安全的				Internet				应用并不是一件轻而易举的事情：只要看看各个专业公告板就可以找到连续不断的安全漏洞报告。你如何保证自己的				Internet				应用不象其他人的应用那样满是漏洞？你如何保证自己的名字不会出现在令人难堪的重大安全事...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhpeng/archive/2006/08/18/64230.html'>阅读全文</a><img src ="http://www.blogjava.net/zhpeng/aggbug/64230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhpeng/" target="_blank">心随我动</a> 2006-08-18 00:19 <a href="http://www.blogjava.net/zhpeng/archive/2006/08/18/64230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中的常用方法</title><link>http://www.blogjava.net/zhpeng/archive/2006/08/14/63444.html</link><dc:creator>心随我动</dc:creator><author>心随我动</author><pubDate>Mon, 14 Aug 2006 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/zhpeng/archive/2006/08/14/63444.html</guid><wfw:comment>http://www.blogjava.net/zhpeng/comments/63444.html</wfw:comment><comments>http://www.blogjava.net/zhpeng/archive/2006/08/14/63444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhpeng/comments/commentRss/63444.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhpeng/services/trackbacks/63444.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第一章												字符串																																		1				、				获取字符串的长度：				length()2				、				判断字符串的前缀或后缀与已知字符串是否相同																		前缀				 startsWith(String s...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhpeng/archive/2006/08/14/63444.html'>阅读全文</a><img src ="http://www.blogjava.net/zhpeng/aggbug/63444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhpeng/" target="_blank">心随我动</a> 2006-08-14 12:40 <a href="http://www.blogjava.net/zhpeng/archive/2006/08/14/63444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个理解wait()与notify()的例子</title><link>http://www.blogjava.net/zhpeng/archive/2006/08/06/62087.html</link><dc:creator>心随我动</dc:creator><author>心随我动</author><pubDate>Sun, 06 Aug 2006 14:30:00 GMT</pubDate><guid>http://www.blogjava.net/zhpeng/archive/2006/08/06/62087.html</guid><wfw:comment>http://www.blogjava.net/zhpeng/comments/62087.html</wfw:comment><comments>http://www.blogjava.net/zhpeng/archive/2006/08/06/62087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhpeng/comments/commentRss/62087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhpeng/services/trackbacks/62087.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">下面是我原来在<span lang="EN-US">CSDN</span>论坛上看到的一个贴子，涉及到同步<span lang="EN-US">,wait(),notify()</span>等概念的理解，我试着根据原来的一些回复和<span lang="EN-US">Think in Java</span>上的相关概念将<span lang="EN-US">wait()</span>和<span lang="EN-US">notify()</span>这两个方法剖析了一下，欢迎指教<span lang="EN-US">.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　问题如下：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">//</span>
				<span style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">分析这段程序，并解释一下，着重讲讲<span lang="EN-US">synchronized</span>、<span lang="EN-US">wait(),notify </span>谢谢！<span lang="EN-US"><br />class ThreadA <br />{<br />  public static void main(String[] args) <br />  {<br />    ThreadB b=new ThreadB();<br />    b.start();<br />    System.out.println("b is start....");<br />    synchronized(b)//</span>括号里的<span lang="EN-US">b</span>是什么意思<span lang="EN-US">,</span>起什么作用<span lang="EN-US">?<br />    {<br />      try<br />      {<br /> System.out.println("Waiting for b to complete...");<br /> b.wait();//</span>这一句是什么意思，究竟让谁<span lang="EN-US">wait?<br />        System.out.println("Completed.Now back to main thread");<br />      }catch (InterruptedException e){}<br />    }<br />    System.out.println("Total is :"+b.total);<br />   }<br />}<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<br />class ThreadB extends Thread<br />{<br />  int total;<br />  public void run()<br />  {<br />    synchronized(this)<br />    {<br />      System.out.println("ThreadB is running..");<br />      for (int i=0;i&lt;100;i++ )<br />      {<br />        total +=i;<br />        System.out.println("total is "+total);<br />      }<br />      notify();<br />    }<br />  }<br />}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　要分析这个程序<span lang="EN-US">,</span>首先要理解<span lang="EN-US">notify()</span>和<span lang="EN-US">wait(),</span>为什么在前几天纪录线程的时候没有纪录这两个方法呢<span lang="EN-US">,</span>因为这两个方法本来就不属于<span lang="EN-US">Thread</span>类<span lang="EN-US">,</span>而是属于最底层的<span lang="EN-US">object</span>基础类的<span lang="EN-US">,</span>也就是说不光是<span lang="EN-US">Thread</span>，每个对象都有<span lang="EN-US">notify</span>和<span lang="EN-US">wait</span>的功能，为什么？因为他们是用来操纵锁的<span lang="EN-US">,</span>而每个对象都有锁<span lang="EN-US">,</span>锁是每个对象的基础<span lang="EN-US">,</span>既然锁是基础的<span lang="EN-US">,</span>那么操纵锁的方法当然也是最基础了<span lang="EN-US">.<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　再往下看之前呢<span lang="EN-US">,</span>首先最好复习一下<span lang="EN-US">Think in Java</span>的<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span lang="EN-US">14.3.1</span></st1:chsdate>中第<span lang="EN-US">3</span>部分内容：等待和通知<span lang="EN-US">,</span>也就是<span lang="EN-US">wait()</span>和<span lang="EN-US">notify</span>了<span lang="EN-US">.<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　按照<span lang="EN-US">Think in Java</span>中的解释<span lang="EN-US">:"wait()</span>允许我们将线程置入“睡眠”状态，同时又“积极”地等待条件发生改变<span lang="EN-US">.</span>而且只有在一个<span lang="EN-US">notify()</span>或<span lang="EN-US">notifyAll()</span>发生变化的时候，线程才会被唤醒，并检查条件是否有变<span lang="EN-US">."<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　我们来解释一下这句话<span lang="EN-US">.<br /></span>　　<span lang="EN-US">"wait()</span>允许我们将线程置入“睡眠”状态<span lang="EN-US">",</span>也就是说<span lang="EN-US">,wait</span>也是让当前线程阻塞的<span lang="EN-US">,</span>这一点和<span lang="EN-US">sleep</span>或者<span lang="EN-US">suspend</span>是相同的<span lang="EN-US">.</span>那和<span lang="EN-US">sleep,suspend</span>有什么区别呢<span lang="EN-US">?<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　区别在于<span lang="EN-US">"(wait)</span>同时又“积极”地等待条件发生改变<span lang="EN-US">",</span>这一点很关键<span lang="EN-US">,sleep</span>和<span lang="EN-US">suspend</span>无法做到<span lang="EN-US">.</span>因为我们有时候需要通过同步（<span lang="EN-US">synchronized</span>）的帮助来防止线程之间的冲突，而一旦使用同步<span lang="EN-US">,</span>就要锁定对象，也就是获取对象锁<span lang="EN-US">,</span>其它要使用该对象锁的线程都只能排队等着<span lang="EN-US">,</span>等到同步方法或者同步块里的程序全部运行完才有机会<span lang="EN-US">.</span>在同步方法和同步块中<span lang="EN-US">,</span>无论<span lang="EN-US">sleep()</span>还是<span lang="EN-US">suspend()</span>都不可能自己被调用的时候解除锁定<span lang="EN-US">,</span>他们都霸占着正在使用的对象锁不放<span lang="EN-US">.<br /></span>　　而<span lang="EN-US">wait</span>却可以<span lang="EN-US">,</span>它可以让同步方法或者同步块暂时放弃对象锁<span lang="EN-US">,</span>而将它暂时让给其它需要对象锁的人<span lang="EN-US">(</span>这里应该是程序块<span lang="EN-US">,</span>或线程<span lang="EN-US">)</span>用<span lang="EN-US">,</span>这意味着可在执行<span lang="EN-US">wait()</span>期间调用线程对象中的其他同步方法<span lang="EN-US">!</span>在其它情况下<span lang="EN-US">(sleep</span>啊<span lang="EN-US">,suspend</span>啊<span lang="EN-US">),</span>这是不可能的<span lang="EN-US">.<br /></span>　　但是注意我前面说的<span lang="EN-US">,</span>只是暂时放弃对象锁<span lang="EN-US">,</span>暂时给其它线程使用<span lang="EN-US">,</span>我<span lang="EN-US">wait</span>所在的线程还是要把这个对象锁收回来的呀<span lang="EN-US">.wait</span>什么<span lang="EN-US">?</span>就是<span lang="EN-US">wait</span>别人用完了还给我啊！<span lang="EN-US"><br /></span>　　好<span lang="EN-US">,</span>那怎么把对象锁收回来呢<span lang="EN-US">?<br /></span>　　第一种方法<span lang="EN-US">,</span>限定借出去的时间<span lang="EN-US">.</span>在<span lang="EN-US">wait()</span>中设置参数<span lang="EN-US">,</span>比如<span lang="EN-US">wait(1000),</span>以毫秒为单位<span lang="EN-US">,</span>就表明我只借出去<span lang="EN-US">1</span>秒中<span lang="EN-US">,</span>一秒钟之后<span lang="EN-US">,</span>我自动收回<span lang="EN-US">.<br /></span>　　第二种方法<span lang="EN-US">,</span>让借出去的人通知我<span lang="EN-US">,</span>他用完了<span lang="EN-US">,</span>要还给我了<span lang="EN-US">.</span>这时<span lang="EN-US">,</span>我马上就收回来<span lang="EN-US">.</span>哎<span lang="EN-US">,</span>假如我设了<span lang="EN-US">1</span>小时之后收回<span lang="EN-US">,</span>别人只用了半小时就完了<span lang="EN-US">,</span>那怎么办呢<span lang="EN-US">?</span>靠<span lang="EN-US">!</span>当然用完了就收回了<span lang="EN-US">,</span>还管我设的是多长时间啊<span lang="EN-US">.<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　那么别人怎么通知我呢<span lang="EN-US">?</span>相信大家都可以想到了<span lang="EN-US">,notify(),</span>这就是最后一句话<span lang="EN-US">"</span>而且只有在一个<span lang="EN-US">notify()</span>或<span lang="EN-US">notifyAll()</span>发生变化的时候，线程才会被唤醒<span lang="EN-US">"</span>的意思了<span lang="EN-US">.<br /></span>　　因此<span lang="EN-US">,</span>我们可将一个<span lang="EN-US">wait()</span>和<span lang="EN-US">notify()</span>置入任何同步方法或同步块内部，无论在那个类里是否准备进行涉及线程的处理。而且实际上<span lang="EN-US">,</span>我们也只能在同步方法或者同步块里面调用<span lang="EN-US">wait()</span>和<span lang="EN-US">notify().<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 200%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 10pt; COLOR: #646464; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　这个时候我们来解释上面的程序<span lang="EN-US">,</span>简直是易如反掌了<span lang="EN-US">.<o:p></o:p></span></span>
		</p>
		<span style="FONT-SIZE: 10pt; COLOR: #646464; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">　　<span lang="EN-US">synchronized(b){...}</span>；的意思是定义一个同步块<span lang="EN-US">,</span>使用<span lang="EN-US">b</span>作为资源锁。<span lang="EN-US">b.wait();</span>的意思是临时释放锁，并阻塞当前线程<span lang="EN-US">,</span>好让其他使用同一把锁的线程有机会执行<span lang="EN-US">,</span>在这里要用同一把锁的就是<span lang="EN-US">b</span>线程本身<span lang="EN-US">.</span>这个线程在执行到一定地方后用<span lang="EN-US">notify()</span>通知<span lang="EN-US">wait</span>的线程<span lang="EN-US">,</span>锁已经用完<span lang="EN-US">,</span>待<span lang="EN-US">notify()</span>所在的同步块运行完之后<span lang="EN-US">,wait</span>所在的线程就可以继续执行<span lang="EN-US">.</span></span>
<img src ="http://www.blogjava.net/zhpeng/aggbug/62087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhpeng/" target="_blank">心随我动</a> 2006-08-06 22:30 <a href="http://www.blogjava.net/zhpeng/archive/2006/08/06/62087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Java栈与堆的思考</title><link>http://www.blogjava.net/zhpeng/archive/2006/08/03/61603.html</link><dc:creator>心随我动</dc:creator><author>心随我动</author><pubDate>Thu, 03 Aug 2006 14:04:00 GMT</pubDate><guid>http://www.blogjava.net/zhpeng/archive/2006/08/03/61603.html</guid><wfw:comment>http://www.blogjava.net/zhpeng/comments/61603.html</wfw:comment><comments>http://www.blogjava.net/zhpeng/archive/2006/08/03/61603.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhpeng/comments/commentRss/61603.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhpeng/services/trackbacks/61603.html</trackback:ping><description><![CDATA[
		<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #646464; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">    1. </span>
		<span style="FONT-SIZE: 10pt; COLOR: #646464; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">栈<span lang="EN-US">(stack)</span>与堆<span lang="EN-US">(heap)</span>都是<span lang="EN-US">Java</span>用来在<span lang="EN-US">Ram</span>中存放数据的地方。与<span lang="EN-US">C++</span>不同，<span lang="EN-US">Java</span>自动管理栈和堆，程序员不能直接地设置栈或堆。<span lang="EN-US"><br /></span>　　<span lang="EN-US">2. </span>栈的优势是，存取速度比堆要快，仅次于直接位于<span lang="EN-US">CPU</span>中的寄存器。但缺点是，存在栈中的数据大小与生存期必须是确定的，缺乏灵活性。另外，栈数据可以共享，详见第<span lang="EN-US">3</span>点。堆的优势是可以动态地分配内存大小，生存期也不必事先告诉编译器，<span lang="EN-US">Java</span>的垃圾收集器会自动收走这些不再使用的数据。但缺点是，由于要在运行时动态分配内存，存取速度较慢。<span lang="EN-US"><br /></span>　　<span lang="EN-US">3. Java</span>中的数据类型有两种。<span lang="EN-US"><br /></span>　　一种是基本类型<span lang="EN-US">(primitive types), </span>共有<span lang="EN-US">8</span>种，即<span lang="EN-US">int, short, long, byte, float, double, boolean, char(</span>注意，并没有<span lang="EN-US">string</span>的基本类型<span lang="EN-US">)</span>。这种类型的定义是通过诸如<span lang="EN-US">int a = 3; long b = <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><st1:chmetcnv w:st="on" unitname="l" sourcevalue="255" hasspace="False" negative="False" numbertype="1" tcsc="0">255L</st1:chmetcnv>;</span>的形式来定义的，称为自动变量。值得注意的是，自动变量存的是字面值，不是类的实例，即不是类的引用，这里并没有类的存在。如<span lang="EN-US">int a = 3; </span>这里的<span lang="EN-US">a</span>是一个指向<span lang="EN-US">int</span>类型的引用，指向<span lang="EN-US">3</span>这个字面值。这些字面值的数据，由于大小可知，生存期可知<span lang="EN-US">(</span>这些字面值固定定义在某个程序块里面，程序块退出后，字段值就消失了<span lang="EN-US">)</span>，出于追求速度的原因，就存在于栈中。<span lang="EN-US"><br /></span>　　另外，栈有一个很重要的特殊性，就是存在栈中的数据可以共享。假设我们同时定义<span lang="EN-US"><br /></span>　　<span lang="EN-US">int a = 3; <br /></span>　　<span lang="EN-US">int b = 3</span>；<span lang="EN-US"><br /></span>　　编译器先处理<span lang="EN-US">int a = 3</span>；首先它会在栈中创建一个变量为<span lang="EN-US">a</span>的引用，然后查找有没有字面值为<span lang="EN-US">3</span>的地址，没找到，就开辟一个存放<span lang="EN-US">3</span>这个字面值的地址，然后将<span lang="EN-US">a</span>指向<span lang="EN-US">3</span>的地址。接着处理<span lang="EN-US">int b = 3</span>；在创建完<span lang="EN-US">b</span>的引用变量后，由于在栈中已经有<span lang="EN-US">3</span>这个字面值，便将<span lang="EN-US">b</span>直接指向<span lang="EN-US">3</span>的地址。这样，就出现了<span lang="EN-US">a</span>与<span lang="EN-US">b</span>同时均指向<span lang="EN-US">3</span>的情况。<span lang="EN-US"><br /></span>　　特别注意的是，这种字面值的引用与类对象的引用不同。假定两个类对象的引用同时指向一个对象，如果一个对象引用变量修改了这个对象的内部状态，那么另一个对象引用变量也即刻反映出这个变化。相反，通过字面值的引用来修改其值，不会导致另一个指向此字面值的引用的值也跟着改变的情况。如上例，我们定义完<span lang="EN-US">a</span>与<span lang="EN-US"> b</span>的值后，再令<span lang="EN-US">a=4</span>；那么，<span lang="EN-US">b</span>不会等于<span lang="EN-US">4</span>，还是等于<span lang="EN-US">3</span>。在编译器内部，遇到<span lang="EN-US">a=4</span>；时，它就会重新搜索栈中是否有<span lang="EN-US">4</span>的字面值，如果没有，重新开辟地址存放<span lang="EN-US">4</span>的值；如果已经有了，则直接将<span lang="EN-US">a</span>指向这个地址。因此<span lang="EN-US">a</span>值的改变不会影响到<span lang="EN-US">b</span>的值。<span lang="EN-US"><br /></span>　　另一种是包装类数据，如<span lang="EN-US">Integer, String, Double</span>等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中，<span lang="EN-US">Java</span>用<span lang="EN-US">new()</span>语句来显示地告诉编译器，在运行时才根据需要动态创建，因此比较灵活，但缺点是要占用更多的时间。<span lang="EN-US"><br /></span>　　<span lang="EN-US">4. String</span>是一个特殊的包装类数据。即可以用<span lang="EN-US">String str = new String("abc");</span>的形式来创建，也可以用<span lang="EN-US">String str = "abc"</span>；的形式来创建<span lang="EN-US">(</span>作为对比，在<span lang="EN-US">JDK 5.0</span>之前，你从未见过<span lang="EN-US">Integer i = 3;</span>的表达式，因为类与字面值是不能通用的，除了<span lang="EN-US">String</span>。而在<span lang="EN-US">JDK 5.0</span>中，这种表达式是可以的！因为编译器在后台进行<span lang="EN-US">Integer i = new Integer(3)</span>的转换<span lang="EN-US">)</span>。前者是规范的类的创建过程，即在<span lang="EN-US">Java</span>中，一切都是对象，而对象是类的实例，全部通过<span lang="EN-US">new()</span>的形式来创建。<span lang="EN-US">Java </span>中的有些类，如<span lang="EN-US">DateFormat</span>类，可以通过该类的<span lang="EN-US">getInstance()</span>方法来返回一个新创建的类，似乎违反了此原则。其实不然。该类运用了单例模式来返回类的实例，只不过这个实例是在该类内部通过<span lang="EN-US">new()</span>来创建的，而<span lang="EN-US">getInstance()</span>向外部隐藏了此细节。那为什么在<span lang="EN-US">String str = "abc"</span>；中，并没有通过<span lang="EN-US">new()</span>来创建实例，是不是违反了上述原则？其实没有。<span lang="EN-US"><br /></span>　　<span lang="EN-US">5. </span>关于<span lang="EN-US">String str = "abc"</span>的内部工作。<span lang="EN-US">Java</span>内部将此语句转化为以下几个步骤：<span lang="EN-US"><br /></span>　　<span lang="EN-US">(1)</span>先定义一个名为<span lang="EN-US">str</span>的对<span lang="EN-US">String</span>类的对象引用变量：<span lang="EN-US">String str</span>；<span lang="EN-US"><br /></span>　　<span lang="EN-US">(2)</span>在栈中查找有没有存放值为<span lang="EN-US">"abc"</span>的地址，如果没有，则开辟一个存放字面值为<span lang="EN-US">"abc"</span>的地址，接着创建一个新的<span lang="EN-US">String</span>类的对象<span lang="EN-US">o</span>，并将<span lang="EN-US">o </span>的字符串值指向这个地址，而且在栈中这个地址旁边记下这个引用的对象<span lang="EN-US">o</span>。如果已经有了值为<span lang="EN-US">"abc"</span>的地址，则查找对象<span lang="EN-US">o</span>，并返回<span lang="EN-US">o</span>的地址。<span lang="EN-US"><br /></span>　　<span lang="EN-US">(3)</span>将<span lang="EN-US">str</span>指向对象<span lang="EN-US">o</span>的地址。<span lang="EN-US"><br /></span>　　值得注意的是，一般<span lang="EN-US">String</span>类中字符串值都是直接存值的。但像<span lang="EN-US">String str = "abc"</span>；这种场合下，其字符串值却是保存了一个指向存在栈中数据的引用！<span lang="EN-US"><br /></span>　　为了更好地说明这个问题，我们可以通过以下的几个代码进行验证。<span lang="EN-US"><br /></span>　　<span lang="EN-US">String str1 = "abc";<br /></span>　　<span lang="EN-US">String str2 = "abc";<br /></span>　　<span lang="EN-US">System.out.println(str1==str2);  //true<br /></span>　　注意，我们这里并不用<span lang="EN-US">str1.equals(str2)</span>；的方式，因为这将比较两个字符串的值是否相等。<span lang="EN-US">==</span>号，根据<span lang="EN-US">JDK</span>的说明，只有在两个引用都指向了同一个对象时才返回真值。而我们在这里要看的是，<span lang="EN-US">str1</span>与<span lang="EN-US">str2</span>是否都指向了同一个对象。<span lang="EN-US"><br /></span>　　结果说明，<span lang="EN-US">JVM</span>创建了两个引用<span lang="EN-US">str1</span>和<span lang="EN-US">str2</span>，但只创建了一个对象，而且两个引用都指向了这个对象。<span lang="EN-US"><br /></span>　　我们再来更进一步，将以上代码改成：<span lang="EN-US"><br /></span>　　<span lang="EN-US">String str1 = "abc";<br /></span>　　<span lang="EN-US">String str2 = "abc";<br /></span>　　<span lang="EN-US">str1 = "bcd";<br /></span>　　<span lang="EN-US">System.out.println(str1 + "," + str2);  //bcd, abc<br /></span>　　<span lang="EN-US">System.out.println(str1==str2);  //false<br /></span>　　这就是说，赋值的变化导致了类对象引用的变化，<span lang="EN-US">str1</span>指向了另外一个新对象！而<span lang="EN-US">str2</span>仍旧指向原来的对象。上例中，当我们将<span lang="EN-US">str1</span>的值改为<span lang="EN-US">"bcd"</span>时，<span lang="EN-US">JVM</span>发现在栈中没有存放该值的地址，便开辟了这个地址，并创建了一个新的对象，其字符串的值指向这个地址。<span lang="EN-US"><br /></span>　　事实上，<span lang="EN-US">String</span>类被设计成为不可改变<span lang="EN-US">(immutable)</span>的类。如果你要改变其值，可以，但<span lang="EN-US">JVM</span>在运行时根据新值悄悄创建了一个新对象，然后将这个对象的地址返回给原来类的引用。这个创建过程虽说是完全自动进行的，但它毕竟占用了更多的时间。在对时间要求比较敏感的环境中，会带有一定的不良影响。<span lang="EN-US"><br /></span>　　再修改原来代码：<span lang="EN-US"><br /></span>　　<span lang="EN-US">String str1 = "abc";<br /></span>　　<span lang="EN-US">String str2 = "abc";<br /></span>　　<span lang="EN-US">str1 = "bcd";<br /></span>　　<span lang="EN-US">String str3 = str1;<br /></span>　　<span lang="EN-US">System.out.println(str3);  //bcd<br /></span>　　<span lang="EN-US">String str4 = "bcd";<br /></span>　　<span lang="EN-US">System.out.println(str1 == str4);  //true<br /></span>　　<span lang="EN-US">str3 </span>这个对象的引用直接指向<span lang="EN-US">str1</span>所指向的对象<span lang="EN-US">(</span>注意，<span lang="EN-US">str3</span>并没有创建新对象<span lang="EN-US">)</span>。当<span lang="EN-US">str1</span>改完其值后，再创建一个<span lang="EN-US">String</span>的引用<span lang="EN-US">str4</span>，并指向因<span lang="EN-US">str1</span>修改值而创建的新的对象。可以发现，这回<span lang="EN-US">str4</span>也没有创建新的对象，从而再次实现栈中数据的共享。<span lang="EN-US"><br /></span>　　我们再接着看以下的代码。<span lang="EN-US"><br /></span>　　<span lang="EN-US">String str1 = new String("abc");<br /></span>　　<span lang="EN-US">String str2 = "abc";<br /></span>　　<span lang="EN-US">System.out.println(str1==str2);  //false<br /></span>　　创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。<span lang="EN-US"><br /></span>　　<span lang="EN-US">String str1 = "abc";<br /></span>　　<span lang="EN-US">String str2 = new String("abc");<br /></span>　　<span lang="EN-US">System.out.println(str1==str2);  //false<br /></span>　　创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。<span lang="EN-US"><br /></span>　　以上两段代码说明，只要是用<span lang="EN-US">new()</span>来新建对象的，都会在堆中创建，而且其字符串是单独存值的，即使与栈中的数据相同，也不会与栈中的数据共享。<span lang="EN-US"><br /></span>　　<span lang="EN-US">6. </span>数据类型包装类的值不可修改。不仅仅是<span lang="EN-US">String</span>类的值不可修改，所有的数据类型包装类都不能更改其内部的值。<span lang="EN-US"><br /></span>　　<span lang="EN-US">7. </span>结论与建议：<span lang="EN-US"><br /></span>　　<span lang="EN-US">(1)</span>我们在使用诸如<span lang="EN-US">String str = "abc"</span>；的格式定义类时，总是想当然地认为，我们创建了<span lang="EN-US">String</span>类的对象<span lang="EN-US">str</span>。担心陷阱！对象可能并没有被创建！唯一可以肯定的是，指向<span lang="EN-US"> String</span>类的引用被创建了。至于这个引用到底是否指向了一个新的对象，必须根据上下文来考虑，除非你通过<span lang="EN-US">new()</span>方法来显要地创建一个新的对象。因此，更为准确的说法是，我们创建了一个指向<span lang="EN-US">String</span>类的对象的引用变量<span lang="EN-US">str</span>，这个对象引用变量指向了某个值为<span lang="EN-US">"abc"</span>的<span lang="EN-US">String</span>类。清醒地认识到这一点对排除程序中难以发现的<span lang="EN-US">bug</span>是很有帮助的。<span lang="EN-US"><br /></span>　　<span lang="EN-US">(2)</span>使用<span lang="EN-US">String str = "abc"</span>；的方式，可以在一定程度上提高程序的运行速度，因为<span lang="EN-US">JVM</span>会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于<span lang="EN-US">String str = new String("abc")</span>；的代码，则一概在堆中创建新对象，而不管其字符串值是否相等，是否有必要创建新对象，从而加重了程序的负担。这个思想应该是享元模式的思想，但<span lang="EN-US">JDK</span>的内部在这里实现是否应用了这个模式，不得而知。<span lang="EN-US"><br /></span>　　<span lang="EN-US">(3)</span>当比较包装类里面的数值是否相等时，用<span lang="EN-US">equals()</span>方法；当测试两个包装类的引用是否指向同一个对象时，用<span lang="EN-US">==</span>。<span lang="EN-US"><br /></span>　　<span lang="EN-US">(4)</span>由于<span lang="EN-US">String</span>类的<span lang="EN-US">immutable</span>性质，当<span lang="EN-US">String</span>变量需要经常变换其值时，应该考虑使用<span lang="EN-US">StringBuffer</span>类，以提高程序效率。</span>
<img src ="http://www.blogjava.net/zhpeng/aggbug/61603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhpeng/" target="_blank">心随我动</a> 2006-08-03 22:04 <a href="http://www.blogjava.net/zhpeng/archive/2006/08/03/61603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java是传值还是传引用</title><link>http://www.blogjava.net/zhpeng/archive/2006/08/02/61396.html</link><dc:creator>心随我动</dc:creator><author>心随我动</author><pubDate>Wed, 02 Aug 2006 13:09:00 GMT</pubDate><guid>http://www.blogjava.net/zhpeng/archive/2006/08/02/61396.html</guid><wfw:comment>http://www.blogjava.net/zhpeng/comments/61396.html</wfw:comment><comments>http://www.blogjava.net/zhpeng/archive/2006/08/02/61396.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhpeng/comments/commentRss/61396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhpeng/services/trackbacks/61396.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. 														简单类型是按值传递的																																						　　Java 方法的参数是简单类型的时候，是按值传递的 (pass by value)。这一点我们可以通过一个简单的例子来说明：								/* 				例 1 */												...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhpeng/archive/2006/08/02/61396.html'>阅读全文</a><img src ="http://www.blogjava.net/zhpeng/aggbug/61396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhpeng/" target="_blank">心随我动</a> 2006-08-02 21:09 <a href="http://www.blogjava.net/zhpeng/archive/2006/08/02/61396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC优化数据库连接-IBM</title><link>http://www.blogjava.net/zhpeng/archive/2006/07/25/60091.html</link><dc:creator>心随我动</dc:creator><author>心随我动</author><pubDate>Tue, 25 Jul 2006 15:53:00 GMT</pubDate><guid>http://www.blogjava.net/zhpeng/archive/2006/07/25/60091.html</guid><wfw:comment>http://www.blogjava.net/zhpeng/comments/60091.html</wfw:comment><comments>http://www.blogjava.net/zhpeng/archive/2006/07/25/60091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhpeng/comments/commentRss/60091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhpeng/services/trackbacks/60091.html</trackback:ping><description><![CDATA[      企业数据库连接性的恰当构建是非常重要的，并且在为有限连接设备配置（Connection Limited Device Configuration（CLDC））构建应用程序和编写特定于 MIDP（移动接口）的接口之间，哪一种是最佳选择取决于 J2ME 和 Java 技术。 
<p>　　<strong>方式</strong><br />　　介绍在把企业数据桥接到无线移动设备时建立 JDBC 连接的一条简单原则，这可以帮助您使解决方案具有更好的可扩展性和更高效的性能。</p><p>　　<strong>连接池</strong><br />　　任何应用程序都必须先访问活动的数据库连接，然后才能访问数据库。数据库连接是一个很占资源且 I/O 开销很大的操作，并且如果每次想使用数据库连接时都必须创建它，那么它将会成为您的性能瓶颈。</p><p>　　例如，如果您使用 Java servlet（Java servlet 通过 init() 方法创建并在其生命周期结束时被销毁（通过 destroy() 方法））的方式，您是虽然避免了每次 servlet 被实例化时重新建立连接。这样一种方式会明显地降低应用程序的性能。完成相同功能的更好的途径是使用“连接池（Connection Pool）”，您可以在连接池中初始化多个连接（并且参数可以从 XML 配置文件中读取）。</p><p>　　连接本身由一组集合对象和一个在整个请求过程中使连接保持打开的用户请求组成。创建连接池的关键是在数据库访问代码中使用如下一些块：try{}.. catch{}... finally{}..。然后您使用 close() 方法来确认连接确实被返回到了连接池而不是被彻底关闭了。在“finally{}”块中指定 close() 方法使得执行过程中发生的异常会被捕获到，并且该语句仍被执行 — 连接返回到连接池，这就防止了应用程序中“连接泄漏（connection leak）”的发生。</p><p>　　以下是构建一个 JDBC 连接的示例：</p><p>Connection con = null;<br />try {  ds = (DataSource)myContext.lookup("&lt;specify JDBC driver&gt;");<br />  pooledCon = ds.getConnection("scott", "tiger");<br /> // Processing Code goes here<br />} catch (Exception ignored) {<br /> // catch JNDI or JDBC exceptions here <br />} finally {<br /> if(pooledCon != null)<br />   pooledCon.close();<br />}</p><p>　　<strong>使用 PreparedStatement</strong><br />　　人们认为 PreparedStatement 对象的效率比多个 Statement 对象更高，尤其是如果您必须多次执行同一条语句而差别仅在于参数不同时更是如此。PreparedStatement 允许您将 SQL 语句“编译”一次（尽管这种编译第一次要消耗较多的时间），然后将它保存在高速缓存中，从而实现有效的重用。同时它也提供了可读性更好的代码。</p><p>　　另一个额外的优势是由驱动程序完成的对用户传递给语句的字符串的自动转义。举例来说，这意味着当您试图将字符串“D'Marco”插入到一个基于字符的数据域（它可能是 VARCHAR, VARCHAR2, CHAR 等）中时，SQL 语句不会在遇到第一个撇号时就产生灾难性的失败。</p><p>　　使用 PreparedStatement 对象时的另一个良好习惯是调用对象自身的 close() 方法来“关闭对象”，这个方法将被用来运行 SQL 语句。这会关闭任何与正在执行的 SQL 语句相关联的游标，这样就能防止打开的游标把数据库弄得十分凌乱。</p><p>　　以下是一个创建 PreparedSatement 的示例： </p><p>PreparedStatement sqlstmt = dbCon.prepareStatement("select * <br />from table1 where field_1=?");<br />sqlstmt.setInt(1, 12);<br />ResultSet rs = sqlstmt.executeQuery();<br />// close the resultset statement to avoid hanging cursors in database<br />sqlstmt.close();<br />// processing of new statement<br />sqlstmt = dbCon.prepareStatement("select * from table2 where field_2 = ?");<br />// repeat creating the result set </p><p>　　<strong>恰当地利用事务<br /></strong>　　在更新动态数据库表和数据时常常会遗忘的一个方面，就是在向超过一个表示一个逻辑事务的表更新或插入数据时，这个事务应该反映到所有的表中，或者在碰到事务失败时，通过“回滚”该事务而在每一个表中都没有反映。</p><p>　　一些核心的 JDBC 包支持了四种事务隔离模式（transaction isolation mode），这些模式允许程序指定它们想事务表现出怎样的行为。大多数程序都至少支持两种模式：“读取提交（read committed）”（缺省值）和“可序列化的（serializable）”。当不可重复读取应该允许在多个查询之间由一个事务作出的修改对于另一个事务可见时，请使用“读取提交”；要使由另一个事务作出的修改在一个查询运行时成为可见的，请使用幻象读取（phantom read）。当您需要一个跨多个操作前后完全一致的数据库视图时，就应该使用更为严格的“可序列化的”设置。把连接的自动提交设置为“假”（autocommit = "false"），记住这一点是很有用的。</p><p>　　以下是构建一个连接并设置其各个属性参数的示例：</p><p>Connection con = null;<br />try {<br /> dtsr = (DataSource &lt;the JDBC driver you use&gt;");<br /> pConn = dtsr.getConnection("&lt;specify login&gt;", "&lt;specify password&gt;");<br /> pConn.setAutoCommit(false); // transaction are not committed uponm execution</p><p> pConn.setTransactionIsolation(<br /> Connection.TRANSACTION_SERIALIZABLE);<br /> // pConn is pooled connection<br /> pConn.commit();<br />} catch (Exception ignored) {<br /> try { pConnn.rollback(); } catch (SQLException esgl) {} <br />} finally {<br /> if(pConn != null) {<br />    pConn.setAutoCommit(true); //reset autocommit<br />   pConn.close();<br /> }<br />}</p><p>　　您也可以利用一个可选的 JDBC 包 — JTA（Java Transaction API），它允许容易地和完全独立的事务服务器进行集成。</p><img src ="http://www.blogjava.net/zhpeng/aggbug/60091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhpeng/" target="_blank">心随我动</a> 2006-07-25 23:53 <a href="http://www.blogjava.net/zhpeng/archive/2006/07/25/60091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>