﻿<?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-Vincent-随笔分类-Eclipse</title><link>http://www.blogjava.net/lijiajia418/category/14433.html</link><description>Vicent's blog</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 15:36:36 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 15:36:36 GMT</pubDate><ttl>60</ttl><item><title>区分eclipse中的两种JRE </title><link>http://www.blogjava.net/lijiajia418/archive/2006/08/24/65540.html</link><dc:creator>Binary</dc:creator><author>Binary</author><pubDate>Thu, 24 Aug 2006 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/lijiajia418/archive/2006/08/24/65540.html</guid><wfw:comment>http://www.blogjava.net/lijiajia418/comments/65540.html</wfw:comment><comments>http://www.blogjava.net/lijiajia418/archive/2006/08/24/65540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lijiajia418/comments/commentRss/65540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lijiajia418/services/trackbacks/65540.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font face="Times New Roman">CowNew</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">开源团队网站</span>
				<span lang="EN-US">
						<font face="Times New Roman">www.cownew.com </font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">论坛</span>
				<span lang="EN-US">
						<font face="Times New Roman">http://www.cownew.com/newpeng/<span style="mso-spacerun: yes">  </span></font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">转载请保留此信息</span>
		</p>
		<p>今天一个CownewStudio的使用者通过QQ问我他的Eclipse安装CownewStudio以后在eclipse中可以看到studio，但是运行的时候提示类加载错误。因为CownewStudio目前的版本只支持JDK5，所以我询问他Eclipse使用的是不是1.4的JRE，但是他确认它用的就是1.5的。<br />后来经过实验，我确认还是JRE版本的问题，他就把他的Eclipse截图发给了我，以证明他用的是JDK1.5，但是我发现他发过来的图片工程编译器配置对话框的。哈哈，我终于明白了，让他把Eclipse的配置详细信息（“帮助”=》“关于Eclipse”=》“配置详细信息”）发过来，果然:<br />-vm<br />c:\programe\jdk1.4.2\jre\bin\javaw.exe</p>
		<p>原来他装了多个版本的JDK。我要他把JDK1.5目录下的JRE目录拷贝到eclipse安装目录下，然后重启Eclipse，一切工作正常了。<br />其实这是很多刚刚接触Eclipse、甚至用了好长时间Eclipse的开发人员经常犯的错，也就是把Eclipse运行时的JRE与工作空间中项目所用的JRE版本弄混乱。<br />Eclipse也是一个普通的Java程序，因此必须有一个JRE做为运行环境。如果你的机器上没有安装任何JRE（或者JDK，本文不做二者的区分），那么点击eclipse.exe就会报错说找不到JRE。此时可以安装一个JRE、或者直接把JRE目录拷贝到eclipse安装目录下。<br />在Eclipse的每个项目中可以为项目指定不同的JRE版本，比如A项目使用JDK1.4编译，B项目使用JDK1.5编译。这个JDK版本是和Eclipse运行JRE没有直接关系的。<br />项目的JDK版本是很容易修改的，那么任何指定Eclipse启动所用的JRE呢？<br />Eclipse启动的时候找JRE的顺序是：如果eclipse.ini中配置了-vm参数，那么则使用这个参数指定的JRE；否则就去查看eclipse安装目录下是否有JRE文件夹，如果有的话就使用这个JRE；否则的话就去系统中查找安装的JRE，如果还找不到的话就报错。<br />所以如果不想卸载掉其他的JDK的话，可以有两种方式：（1）直接把要使用的JRE文件夹拷贝到Eclipse目录下，这是懒人常用的方法（2）修改eclipse.ini文件，添加-vm参数，指定要运行的虚拟机的地址，使用 -vm 命令行自变量例子：-vm c:\jre\bin\javaw.exe</p>
<img src ="http://www.blogjava.net/lijiajia418/aggbug/65540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lijiajia418/" target="_blank">Binary</a> 2006-08-24 15:54 <a href="http://www.blogjava.net/lijiajia418/archive/2006/08/24/65540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Eclipse进行重构(下)</title><link>http://www.blogjava.net/lijiajia418/archive/2006/08/24/65517.html</link><dc:creator>Binary</dc:creator><author>Binary</author><pubDate>Thu, 24 Aug 2006 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/lijiajia418/archive/2006/08/24/65517.html</guid><wfw:comment>http://www.blogjava.net/lijiajia418/comments/65517.html</wfw:comment><comments>http://www.blogjava.net/lijiajia418/archive/2006/08/24/65517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lijiajia418/comments/commentRss/65517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lijiajia418/services/trackbacks/65517.html</trackback:ping><description><![CDATA[
		<div>
				<strong>Extract Method</strong>
		</div>
		<div>
				<span>       </span>如果方法中含有过多特定的操作，方法太长，或者其中的某段代码被多次使用，这时，可以用提炼方法重构将这部分代码提取到单独的方法中。在Eclipse中应用此重构方便快捷。</div>
		<div>
				<span>       </span>选中要提炼的代码段，从<strong>重构</strong>菜单中选择<strong>提炼方法</strong>项，或者使用快捷键Alt + Shift + M。</div>
		<div>
				<span>       </span>在提炼方法对话框中，输入新方法的名字，选择修饰词，选择是否让新方法抛出运行时异常。在底部提供了新方法的预览。</div>
		<div> </div>
		<div> </div>
		<div>
				<strong>Extract Local Variable</strong>
		</div>
		<div>
				<span>       </span>使用一个变量来代替一个表达式有很多好处。如果表达式在多处被使用，这样能够提高性能，而且也提高了代码的可读性。要把一个表达式提炼为局部变量，选择要提炼的表达式，从<strong>重构</strong>菜单中选择<strong>提炼局部变量</strong>项，或者使用快捷键Alt + Shift + L。</div>
		<div>
				<span>       </span>在提炼局部变量对话框中输入新变量的名字，选择是否要替换所有的表达式，是否使此变量为final。在对话框的底部提供变量的预览。</div>
		<div>
				<span>       </span>
		</div>
		<div>
				<strong>Extract Constant</strong>
		</div>
		<div>
				<span>       </span>提炼常量与提炼局部变量很相似，唯一的区别是提炼常量重构可以选择提炼出的常量的修饰词，而且此常量将作为类的成员变量。</div>
		<div> </div>
		<div>
				<strong>Introduce Parameter</strong>
		</div>
		<div>
				<span>       </span>介绍参数重构在方法中创建新的参数，然后用此新参数取代局部变量或者成员变量的实例。要是用此重构，选中方法中一个成员变量或局部变量的引用，然后从<strong>重构</strong>菜单中选择<strong>介绍参数</strong>项。</div>
		<div> </div>
		<div> </div>
		<div>
				<strong>Introduce Factory</strong>
		</div>
		<div>
				<span>       </span>工厂是用来创建新对象，返回新创建对象的方法。你可以选择一个类的构造方法，从<strong>重构</strong>菜单中选择<strong>介绍工厂</strong>项，应用此重构，为此类创建工厂方法。</div>
		<div>
				<span>       </span>
		</div>
		<div>在<strong>介绍工厂</strong>对话框，输入工厂方法的名字和需要工厂方法创建的对象的名字。选择构造方法的修饰词是否为私有。</div>
		<div>
				<span>       </span>点击OK按钮后，在指定的类中会出现此指定工厂方法。此方法创建一个当前类的实例，然后返回此实例。</div>
		<div> </div>
		<div>
				<strong>Convert Local Variable to Field</strong>
		</div>
		<div>
				<span>       </span>转换局部变量为成员变量重构，将方法内的变量声明移动到方法所在类中，使该变量对整个类可见。选择一个局部变量，从<strong>重构</strong>菜单中选择<strong>转换局部变量为成员变量</strong>项，随后打开配置的对话框。</div>
		<div>
				<span>       </span>
		</div>
		<div>
				<span>       </span>在此对话框中，添入成员变量的名字，选择修饰词，选择在哪里实例化此成员变量。随后的<strong>声明为静态</strong>，<strong>声明为</strong><strong>final</strong> 选择项是否可以使用，取决于实例化位置的选择情况。</div>
		<div> </div>
		<div>
				<strong>Encapsulate Field</strong>
		</div>
		<div>
				<span>       </span>要正确的实践面向对象编程，应该将成员变量的修饰词置为私有，提供相应的访问器来访问这些成员变量。但是这些操作很烦琐。如果使用了封装成员变量重构，则十分方便。选择一个成员变量，从<strong>重构</strong>菜单中选择封装<strong>成员变量</strong>项。</div>
		<div> </div>
		<div>
				<span>       </span>在封装局部变量对话框中，添入Getter, Setter方法的名字，选择新方法在哪个方法后出现。选择合适的修饰词。应用了此重构会创建两个新方法，将此成员变量的修饰词置为私有，将对此成员变量的引用改变为对新方法的引用。</div>
		<div> </div>
		<div>
				<strong>重构项列表：</strong>
		</div>
		<div>
				<span>       </span>下表从Eclipse帮助中提取，列出了各种重构支持的Java资源类型，对应的快捷键。</div>
		<div> </div>
		<p>
		</p>
		<table 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; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>名字</div>
								</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; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>可应用的Java元素</div>
								</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; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>快捷键</div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>Undo</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>在一次重构后可执行</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Alt + Shift + Z</span>
										</div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>Redo</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>在一次撤销重构后可执行</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Alt + Shift + Y</span>
										</div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>Rename</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对方法，成员变量，局部变量，方法参数，对象，类，包，源代码目录，工程可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Alt + Shift + R</span>
										</div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>Move</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对方法，成员变量，局部变量，方法参数，对象，类，包，源代码目录，工程可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Alt + Shift + V</span>
										</div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Change Method Signature</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对方法可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>
												<span style="FONT-SIZE: 10pt">Alt + Shift + C</span>
										</div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Convert Anonymous Class to Nested</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对匿名内部类可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Move Member Type to New File</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对嵌套类可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Push Down</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对同一个类中成员变量和方法可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Pull Up</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对同一个类中成员变量和方法，嵌套类可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Extract Interface</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对类可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Generalize Type</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对对象的声明可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Use Supertype Where Possible</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对类可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>Inline</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对方法，静态final类，局部变量可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Alt + Shift + I</span>
										</div>
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Extract Method</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对方法中的一段代码可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Alt + Shift + M</span>
										</div>
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Extract Local Variable</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对选中的与局部变量相关的代码可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Alt + Shift + L</span>
										</div>
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Extract Constant</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对静态final类变量，选中的与静态final类变量相关的代码可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Introduce Parameter</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对方法中对成员变量和局部变量的引用可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Introduce Factory</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对构造方法可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Convert Local Variable to Field</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对局部变量可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>
												<span style="FONT-SIZE: 10pt">Alt + Shift + F</span>
										</div>
								</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; WIDTH: 142pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div align="left">
												<span style="FONT-SIZE: 10pt">Encapsulate Field</span>
										</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div>对成员变量可用。</div>
								</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; WIDTH: 142.05pt; BORDER-TOP-COLOR: rgb(236,233,216); PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="189">
										<div> </div>
								</td>
						</tr>
				</tbody>
		</table>
		<div>
				<span>       </span>本文介绍了Eclipse提供的各种重构。这些重构易于使用，可以确保代码重构更加方便安全。而且可以自动生成代码以提高生产率。</div>
		<p>
				<span style="FONT-SIZE: 10.5pt">       </span>
				<span style="FONT-SIZE: 10.5pt">某些重构改变了某些类的结构，但没有改变项目中其他类的结构，如下推，上移重构。这时，就要确保项目中所有对改变元素的引用都要被更新。这也是为什么要有一个好的测试套。同时，你也要更新测试套中的对改变元素的引用。所以说，重构和单元测试的有机结合对于软件开发是多么的重要。</span>
		</p>
<img src ="http://www.blogjava.net/lijiajia418/aggbug/65517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lijiajia418/" target="_blank">Binary</a> 2006-08-24 15:01 <a href="http://www.blogjava.net/lijiajia418/archive/2006/08/24/65517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Eclipse进行重构（上)</title><link>http://www.blogjava.net/lijiajia418/archive/2006/08/24/65516.html</link><dc:creator>Binary</dc:creator><author>Binary</author><pubDate>Thu, 24 Aug 2006 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/lijiajia418/archive/2006/08/24/65516.html</guid><wfw:comment>http://www.blogjava.net/lijiajia418/comments/65516.html</wfw:comment><comments>http://www.blogjava.net/lijiajia418/archive/2006/08/24/65516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lijiajia418/comments/commentRss/65516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lijiajia418/services/trackbacks/65516.html</trackback:ping><description><![CDATA[
		<div style="TEXT-INDENT: 21pt">重构和单元测试是程序员的两大法宝，他们的作用就像空气和水对于人一样，平凡，不起眼，但是意义深重。预善事，必先利器，本文就介绍怎样在Eclipse中进行重构。</div>
		<div> </div>
		<div style="TEXT-INDENT: 21pt">本文介绍了Eclipse支持的重构种类，它们的含义，以及怎样重构。本文同时也可以作为学习重构知识的快速手册。</div>
		<div> </div>
		<div>什么是重构</div>
		<div style="TEXT-INDENT: 21pt">重构是指在保持程序的全部功能的基础上改变程序结构的过程。重构的类型有很多，如更改类名，改变方法名，或者提取代码到方法中。每一次重构，都要执行一系列的步骤，这些步骤要保证代码和原代码相一致。</div>
		<div style="TEXT-INDENT: 21pt"> </div>
		<div>为什么重构很重要<span>    </span></div>
		<div>
				<span>         </span>手工重构时，很容易在代码中引入错误，例如拼写错误或者漏掉了重构的某一步。为了防止引入错误，在每次重构前后，都要执行充分的测试。你可能会好奇重构是否是值得的。</div>
		<div style="TEXT-INDENT: 21pt">重构的理由很多。你可能想要更新一段代码很烂的程序。或者最初的设计队伍都不在了，现在队伍中每人了解这些程序。为了更新，你必须要重新设计构建程序来满足你的需求。另一个原因是原来的设计无法使你将新的特性添加进去。为了添加进去，你要重构这些代码。第三个原因是一个自动重构的工具可以为你自动生成代码，例如Eclipse中的重构功能。使用重构，你可以在重写尽量少的代码和仍保持软件功能的同时，使代码的逻辑性更好。</div>
		<div style="TEXT-INDENT: 21pt"> </div>
		<div style="TEXT-INDENT: 21pt"> </div>
		<div>测试</div>
		<div style="TEXT-INDENT: 21pt">在重构时，测试是十分重要的。应为重构改变了代码的结构，你要保证重构后代码的功能没有被改变。手工重构时，一个好的测试套是必须的。使用自动重构工具是，测试也是必要的，但不需要很频繁，应为自动重构工具不会产生手工重构时的那些错误，如拼写错误。</div>
		<div style="TEXT-INDENT: 21pt">在Eclipse中可以使用JUnit方便的为程序创建测试代码，具体方法不在本文描述。</div>
		<div style="TEXT-INDENT: 21pt"> </div>
		<div style="TEXT-INDENT: 21pt"> </div>
		<div>Eclipse中的重构</div>
		<div style="TEXT-INDENT: 21.75pt">JDT，Eclipse中的Java插件，能够对Java项目，类，或成员进行多种类型的自动重构。可以采取多种方法快速的为Java项目中的某个元素进行重构。</div>
		<div style="TEXT-INDENT: 21.75pt">为某些元素进行重构的前提是你必须选中他们。你可以在多个视图中选择这些元素，像大纲视图或包浏览视图。可以按住Ctrl或Shift键，在视图中选择多个元素。另外一种选择的方法是使该元素的编辑区高亮显示，或者把鼠标定位到源程序文件。在选中希望重构的元素后，可以从重构菜单的下拉项选择重构，也可以从右键单击后弹出菜单中选择重构子菜单。同时，Eclipse还提供了重构的快捷键操作。</div>
		<div style="TEXT-INDENT: 21.75pt">某些重构可以应用在任意元素上，有些则只能用在特定类型的元素上，如类或方法。在本文的最后的表格中，列出了重构能够应用的元素类型，以及重构的快捷键。</div>
		<div style="TEXT-INDENT: 21.75pt">在Eclipse中，所有的重构都能够在正式执行之前预览一下。在重构对话框中点击“预览”按钮，可以查看所有将要被改变的地方。唯一没有预览按钮的的重构是Pull Up，在它的重构向导中，到最后，预览面板总会出现。可以将其中的个别变化反选掉，这样这些改变就不会生效。</div>
		<div style="TEXT-INDENT: 21.75pt"> </div>
		<div style="TEXT-INDENT: 21.75pt"> </div>
		<div>撤销和重做</div>
		<div>
				<span>       </span>在重构菜单中有撤销和重做项。他们和编辑菜单中的撤销重做不同。即使重构改变了很多文件，编辑菜单中的撤销重做只会更改当前文件。重构菜单中的撤销和重做则会对一次重构的所有文件进行撤销和重做操作。但是在使用时，它们有一定的限制。</div>
		<div style="TEXT-INDENT: 21.75pt">重构后，无论重构改变了文件与否，如果任一个文件被另外改变而且保存了，你就无法撤销或重做这个重构。假如一个文件在重构中被修改了，然后又被编辑了，但是还没有保存，这时就会有错误信息提示，如果你想要撤销或重做该重构，必须撤销未保存的文件。</div>
		<div style="TEXT-INDENT: 21.75pt">只要注意到以上的限制条件，你就可以随心所欲的对重构进行撤销或重做。你甚至能够编译，运行你的程序测试一下，然后再撤销该重构，只要你没有改变并保存任何文件。</div>
		<div style="TEXT-INDENT: 21.75pt"> </div>
		<div>Eclipse中的重构类型</div>
		<div>
				<span>       </span>如果你看一下Eclipse的重构菜单，可以看到四部分。第一部分是撤销和重做。其他的三部分包含Eclipse提供的三种类型的重构。</div>
		<div style="TEXT-INDENT: 21.75pt">第一种类型的重构改变代码的物理结构，像Rename和Move。第二种是在类层次上改变代码结构，例如Pull Up和Push Down。第三种是改变类内部的代码，像Extract Method和Encapsulate Field。这三部分的重构列表如下。</div>
		<div style="TEXT-INDENT: 21.75pt"> </div>
		<div style="TEXT-INDENT: 21.75pt">类型1 物理结构</div>
		<div style="MARGIN: 0cm 0cm 0pt 63.75pt; TEXT-INDENT: -0.75pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Rename</div>
		<div style="MARGIN: 0cm 0cm 0pt 63.75pt; TEXT-INDENT: -0.75pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Move</div>
		<div style="MARGIN: 0cm 0cm 0pt 63.75pt; TEXT-INDENT: -0.75pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Change Method signature</div>
		<div style="MARGIN: 0cm 0cm 0pt 63.75pt; TEXT-INDENT: -0.75pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Convert Anonymous Class to Nested</div>
		<div style="MARGIN: 0cm 0cm 0pt 63.75pt; TEXT-INDENT: -0.75pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Convert Member Type to New File </div>
		<div style="TEXT-INDENT: 21.75pt"> </div>
		<div style="TEXT-INDENT: 21.75pt">类型2 类层次结构</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Push Down</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Push Up</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Extract Interface</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Generalize Type (Eclipse 3)</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>User Supertype Where Possible</div>
		<div style="TEXT-INDENT: 21.75pt">类型3 类内部结构</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Inline</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Extract Method</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Extract Local Variable</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Extract Constant</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Introduce Parameter</div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Introduce Factory </div>
		<div style="MARGIN: 0cm 0cm 0pt 84.75pt; TEXT-INDENT: -21pt">
				<span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>Encapsulate Field</div>
		<div> </div>
		<div> </div>
		<div> </div>
		<div>Rename:</div>
		<div>
				<span>       </span>Rename用来改变一个Java元素的名字。虽然你可以手工改变Java文件Java元素的名字，但是这样不能自动更新所有引用它们的文件或Java元素。你必须在项目中搜索文件然后手工替换这些引用。很可能你就会漏掉一个或者改错一个。Rename 重构会智能的更新所有有此引用的地方。</div>
		<div>
				<span>       </span>有时候，Java元素的名字不是很明了，或者它的功能已经改变了。为了保持代码的可读性，该元素的名字也要更新。使用Rename重构，能够十分快捷的更新元素的名字和所有引用它的地方。</div>
		<div>
				<span>       </span>要为一个Java元素改名，在包浏览视图或大纲视图选中该元素，从重构菜单中选择Rename项，或者使用快捷键Alt+Shift+R。Rename对话框会出现。在这里添入新的名字，选择是否更新该元素的引用。点击预览按钮，会打开预览窗口，在这里，你可以看到那些内容会被改变。点击OK按钮，重构结束。</div>
		<div align="center"> </div>
		<div>Move</div>
		<div>
				<span>       </span>Move和Rename很相似。它用来把元素从一个位置移动到另一个位置。它主要用来将类从一个包移动到另一个包。选中要移动的元素，从重构菜单中选择Move,或者使用快捷键，Alt+Shift+V,在弹出窗口中选择要移动的目的地。你仍然可以用预览功能检查一下有什么改变，也可以按OK按钮直接让其生效。</div>
		<div align="center"> </div>
		<div> </div>
		<div>Change Method Signature</div>
		<div>
				<span>       </span>更改方法签名能够改变参数名，参数类型，参数顺序，返回类型，以及方法的可见性。也可以添加，删除参数。</div>
		<div>
				<span>       </span>要执行此重构，选择要重构的方法，选中重构菜单的更改方法签名项，会出现更改方法签名对话框。</div>
		<div align="center"> </div>
		<div style="TEXT-INDENT: 21pt">在此对话框中选择方法的修饰词，返回类型，参数。参数的添加，修改，移动，删除可以通过右边的按钮控制。当添加新的参数时，会自动赋予默认值。凡是调用此方法的地方都会用此默认值作为参数输入。</div>
		<div>
				<span>       </span>改变方法签名可能在方法中导致问题，如果有问题，当你点击预览或OK时，会被标记出来。</div>
		<div>
				<span>       </span>
		</div>
		<div> </div>
		<div>Move Members Type to New File</div>
		<div align="left">
				<span>       </span>此重构将嵌套类转为一个单独类。将会创建一个新的Java文件包含此嵌套类。选中要重构的类，在重构菜单上选择<span>Move Member Type to New File项，在弹出的对话框中添入要创建的实例的名字。</span></div>
		<div align="left"> </div>
		<div>
				<span>       </span>
		</div>
		<div> </div>
		<div align="left">
				<span style="FONT-SIZE: 12pt">Push Down</span>
		</div>
		<div align="left">
				<span>       此重构将算中的方法和成员从父类中移动到它的直接子类中，所有下推的方法都可选作为一个抽象方法留在父类中。下推重构对于重新构建项目设计十分有用。</span>
		</div>
		<div align="left">
				<span style="FONT-SIZE: 10pt">         </span>
				<span style="FONT-SIZE: 10pt">选择若干方法或成员，从重构菜单中选择下推项，弹出下推对话框。</span>
		</div>
		<div align="left">
				<span style="FONT-SIZE: 10pt">         </span>
		</div>
		<div align="left">
				<span>       </span>在此对话框中，可以分别选择方法或成员，所有选中元素都会移动到当前类的子类中。当点击Add Required按钮时，所有已选择元素所必需的元素也会自动选上，此行为并不能保证所有必须的元素都能自动选中，还是需要人工确认。当有方法被选中时，编辑按钮就会可用，点击编辑按钮，弹出编辑对话框。在其中可以选择为选中方法在当前类中遗留抽象方法，还是在当前类中删除这些方法。双击一天选中的方法，也可以打开编辑对话框。在方法的Action列点击，会出现一个下拉列表，可以在其中选择遗留抽象方法还是在当前类中删除方法。按回车键确认编辑结果。</div>
		<div> </div>
		<div> </div>
		<div>Pull Up</div>
		<div>
				<span>       </span>上移与下推类似，也是在类之间移动方法和成员。上移将方法或成员从一个类移动到它的一个父类中。选中若干个方法或成员，在重构菜单中选择上移项，上移向导马上会出现。</div>
		<div>
				<span>       </span>在选择目标类多选框中，列出了当前类继承的所有父类。你只能将方法或成员移动到它们其中的一个里面。</div>
		<div>
				<span>       </span>如果在选中方法的Action列，被设置成在目标类中声明抽象方法，那么在目标类的非抽象子类中创建必须的方法选项变为可选。当它选中时，目标类的所有子类，如果它们中没有选中的方法，则会为它们创建选中的方法。</div>
		<div>
				<span>       </span>和在下推中一样，选择多个方法，点击编辑按钮，或者双击一个方法，都会打开编辑成员对话框。其中有两个选项，上移和在目标类中声明抽象方法。上移只是简单的复制方法到到父类中，并提供选择是否在当前类中删除该方法。在目标类中声明抽象方法会在父类中创建一个选中方法的抽象方法，如果父类不是抽象类则置为抽象类，最后选中方法留在当前类中。和在下推中一样，也可以点击Action列，可以在出现的下拉列表中选择。</div>
		<div>
				<span>       </span>如果方法的Action列选为上移，在下一步的向导中，将会要求你选择是否在当前类中删除这些方法，选中的方法会在当前类中被删除。</div>
		<div>
				<span>       </span>在向导的任意一步都可以按完成按钮，结束重构操作，此时按照默认规则进行重构。</div>
		<div> </div>
		<div> </div>
		<div>Extract Interface</div>
		<div>
				<span>       </span>提炼接口可以从一个存在的类中创建一个接口。你可以选择在接口中包含着个类的那些方法。选中一个类，从重构菜单选择提炼接口项，就可以打开提炼接口对话框。</div>
		<div>
				<span>       </span>这此对话框中添入接口的名字，选择希望包含的方法，在这个列表里面只列出了公共方法。选中改变对类[当前类名]的应用为对接口的引用选择框，将把所有对当前类的引用更新为对此接口的引用。</div>
		<div> </div>
		<div> </div>
		<div>Generalize Type</div>
		<div>
				<span>       </span>泛化类型重构可以将一个声明对象的类型改变为它的超类，选择变量，参数，对象成员，方法返回类型，然后选择重构菜单的泛化类型项。在打开的泛化类型对话框，选择希望的新类型，然后点击完成按钮，结束重构。</div>
		<div> </div>
		<div> </div>
		<div>Use Supertype Where Possible</div>
		<div>
				<span>       </span>使用超类会将对一个特定类型的引用改变为对它的超类的引用。选择一个类，选中重构菜单的使用超类项，会打开使用超类对话框。选中希望的超类类型，点击完成按钮完成重构。重构后，instanceof 表达式也会做相应的替换。</div>
		<div> </div>
		<div> </div>
		<div> </div>
		<div>Inline</div>
		<div>
				<span>       </span>内联是用代码或值来取代调用方法的地方，静态final对象成员，或局部变量。比如说，如果你内联一个方法调用，这个调用的地方就会被替换为该方法体。要内联一个方法，静态final对象成员，局部变量，选中这些元素，在重构菜单中选择内联项，或者使用快捷键Alt + Ctrl + I。在随后打开的内联对话框，你可以选择是否要内联所有的调用，或者是选择的调用。如果选择所有调用，你还可以选择是否删除声明本身。</div>
<img src ="http://www.blogjava.net/lijiajia418/aggbug/65516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lijiajia418/" target="_blank">Binary</a> 2006-08-24 15:00 <a href="http://www.blogjava.net/lijiajia418/archive/2006/08/24/65516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>