Eclipse的重构功能介绍

1.概述

1.1为何重构

Martin Fowler在其著名的<<Refactoring---Improving the Design of Existing Code>>一书中谈到了为何重构的几点原因:

1. 重构可以改进软件设计 

如果不进行重构,程序的设计会变得越来越糟糕。通常程序员只为短期的目的,或者在没有完全理解整体设计的时候,就开始修改代码,这样程序将会逐渐失去自己的结构,程序员也愈来愈难通过阅读源码理解原本设计,相信对此每一个开发人员都深有体会。
代码结构的流失是累积性的,愈难看出代码所代表的意思,就越难保护其中的设计,于是设计也将变得越来越糟糕,经常性重构可以帮助维持设计该有的形态。

2. 重构使软件更易被理解 

很多开发人员认为代码只要能够运行起来就可以了,笔者刚开始做开发的时候也是这么认为的,也写过很多的垃圾代码,也因此吃了不少苦头。 
也许有些人可能会认为自己可能不久就会离开所在的职位,不必在意代码的质量,但作为一个开发人员来说,写出漂亮的代码是最基本的素质。 
在软件的不断修改过程中,代码的可读性越来越差也是会慢慢累积的,但这不要紧,只要记得持续重构,就能使自己的代码更容易被理解。 

3. 重构可以协助找到Bugs 

对代码的理解,可以更容易找到bug,在重构的同时,也能够更好的理解代码及其行为,从而通过重构能够帮助开发人员写出更强壮的代码。 

4. 重构可以提高编程的速度 

良好的设计是快速软件开发的根本,如果没有良好的设计,也许开始的一段时间开发人员的进展迅速,但是恶劣的设计很快就会使开发速度慢下来。也许把时间花在调试上的时间会越来越多,修改的时间会越来越长,而且这会是一个恶性的循环。
良好的设计是维持软件开发速度的根本,重构可以帮助开发人员更快速地开发软件,因为它能够阻止系统的设计变质,能够提高代码的可读性。

1.2如何借助eclipse开发工具进行重构

重构是软件开发过程中保证代码质量非常重要的手段,而手动进行重构代码的话,很容易引入一些低级错误(例如,单词拼写错误),从而导致浪费大量不必要的时间。Eclipse为重构提供了很强大的支持,很大程度上用户不必为重构的笔误而再烦恼。在 Java 软件开发过程中,通过使用 Eclipse 提供的重构工具,我们至少获得了以下好处:

1. 最终产品更为健壮:我们对程序代码的修改将不太可能出错,出现遗漏修改的可能变少,即使出现问题也能够通过 Undo 功能回退到重构前的状态。

2. 提高了生产效率。通常一次重构能够完成对程序代码的多处改动。最为明显的例子可能是 Eclipse 提供的 Rename 重构,它能够在修改名称的同时相应的更改所有的引用。

下面将介绍如何使用 Eclipse 中的一些功能强大的重构函数。

2.重构方法

按eclipse Refactor列表顺序进行介绍:如截图 
结构性重构涉及到JAVA元素的物理结构的改变,具体方法如下:

名称 快捷键 描述 中文
Rename Alt+Shift+R
Rename 应该是 Eclipse 中重常用的重构。利用这个重构,可以对变量、类、方法、包、文件夹及几乎任何的 Java
标识符进行重命名。当重命名某标识符时,对该标识符的所有引用也将被重命名。
使用:当在 Eclipse 编辑器中对某标识符调用这个快捷方式时,在此编辑器中会出现一个小对话框,可以在这个对话
框中修改这个标识符的名字。在按下 Enter键时,所有对该标识符的引用也将被相应更改。
 
Move 
Alt + Shift + V
使用 Move,可以将一个类从一个包移动到另一个包。这个类被物理地移动到目的包所对应的文件夹中,并且对这个
类的所有引用也被更改为指向新的包。如果将一个类拖放到 Package Explorer视图中的一个新包中,这个重构将会自动发生。
 
Change Method Signature 
Alt + Shift + C
改变方法的定义,例如改变方法的参数名称、类型和个数、返回值的类型,方法的可见性以及方法的名称等。 修改方法签名 
Extract Method Alt + Shift + M
Extract Method 重构允许您选择一块代码并将其转换为一个方法。Eclipse 会自动地推知方法参数及返回类型。
如果一个方法太大并且您想要把此方法再细分为不同的方法,这个重构将很有用。
如果有一段代码在很多方法中反复使用,这个重构也能派上用场。当选择这些代码块中的某一个代码块进行重构
时,Eclipse 将找到出现这个代码块的其他地方,并用一个对这个新方法的调用替代它。
使用:请选择编辑器中的一个代码块,然后按下 Alt+Shift+M。这时会出现一个对话框,要求输入这个新方法的
名称及可见性(公开的、私有的、保护的或是默认的)。甚至可以更改参数和返回类型。当重构了新方法内的所选
代码块以便恰当使用新方法的参数和返回类型后,新方法就创建完成了。
 
Extract Local Variable 
Alt + Shift + L
使用 Extract Local Variable 重构,可以将一个 Java 表达式的结果分配给一个新的本地变量。这个重构的一个用途就是通过
将一个复杂的 Java 表达式分成多行来简化该表达式。或者,在编辑代码时,先键入此表达式并使用这种重构自动创建一个新
本地变量来指定表达式的结果。当返回值的类型很复杂时,这个重构将很有用,因为变量的类型是自动生成的。
提取局部变量 
Extract Constant  
  Extract Constant 重构可以将代码中的任何数字或字符串文字转换成一个静态终态字段(final field)。在重构后,所有对这个
类中的数字或字符串文字的使用都将指向该字段,而不是指向数字或字符串文字本身。这样,在一个位置(字段的值)就可以实
现对所有数字或字符串文字的修改,再也无需在整篇代码中执行查询和替代了。
使用:请选择编辑器中的数字或字符串文字,然后按下 Ctrl+1 并选择 Extract to Constant。
提取常量
 Inline  
Alt + Shift + I
Inline 重构可以内联 对变量或方法的引用。当使用这个重构后,它会用分配给此变量的值或此方法的实现来分别替代对这个变量或方法的引用。这个重构在下列情形中将对于清理代码十分有用:
当一个方法只被另一个方法调用一次,并且作为一个代码块更有意义时。
与把值分配给不同变量而将表达式分成多行相比较,将一个表达式放在一行上看着更整齐时
使用:将光标放在一个变量或方法上,并按下 Alt+Shift+I

内联
Convert Local Variable to Field 
  能够获取一个本地变量并将这个变量转换为此类的一个私有字段。此后,所有对这个本地变量的引用也将指向该字段。使用:请选择一个本地变量,然后按下 Ctrl+1 并选择 Convert Local Variable to Field 把局部变量转变为全局变量
Convert Anonymous Class to Nested 
  把匿名类改成内部类,这样同一个类的其它部分也可以共享此类了
使用:请将光标放入这个匿名类并从菜单中选择 Refactor > Convert Anonymous Class to Nested。这时会出现一个对话框,要求输入新类的名称。此外,还可以设置类的属性,比如指定对这个类的访问是公共的、受保护的、私有的还是默认的。也可以指定这个类是终态的、静态的还是两者都是。
匿名类转换为嵌套内部类
Extract Interface 
  能够从一个已存在的类中提取接口,它可以从某个类中选择方法,把这些方法提取到一个单独的接口中。
使用:选择提取接口的类,右键选择Refactor菜单的“Extract Interface”菜单项,打开“Extract Interface”对话框,
只有公用方法才可以被提取为接口的方法。
 
Push Down 
  把父类的方法和属性移动到所有的子类中,父类的方法可以选择性的保留抽象方法
使用:首先选择父类,右键选择Refactor菜单的“Push Down”菜单项,可以通过“Push Down”对话框选择重构
 
Pull Up 
  与push down 相反,把方法和属性移动到其父类中去
使用:选择需要重构的子类,从右键菜单选择Refactor菜单的“Pull up”菜单项,通过“Pull Up”对话框进行重构
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值