- 浏览: 4787 次
- 性别:
- 来自: 北京
最新评论
Eclipse 快捷键技巧 + 重构
第一讲 Eclipse的基本使用1.Eclipse工程的建立
2.源文件夹等概念
Eclipse会自动编译放置在源文件夹内的源文件
一些不需要编译的文件需要放置在普通文件夹下
3.基本代码的编写
代码提示强制显示:alt + /
第二讲 Eclipse基本操作(1)
1.建立包、建立接口及其他
层级包的显示:平级显示;层级显示
2.工程的高级配置
3.工程的构建
自动编译设定:Project——>Build Automatically
4.代码的自动完成、自动修正功能(在警告或者错误处点击左键,出现解决方案)
黄色的、红色的标示
黄色:警告
红色:错误
传递性...
(1)方法的自动生成
错误处点击左键,选择创建方法
(2)导入import
快捷键:Ctrl + Shift + O
(3)清除无用的import
错误处点击左键,选择删除
(4)自动清除无用的方法、常量
错误处点击左键,选择删除
(5)自动实现接口的、抽象类的方法,自动重载父类的方法
implements extends extends
Source——>重载/实现方法菜单...
点击左边的向上箭头,查看父类信息...
第三讲 Eclipse基本操作(2)
1.Java的调试
(1)断点、条件断点、异常断点
断点:
在左侧双击设置/删除断点,或者右键选择相应菜单设置/删除断点
调试需要通过远程端口进行调试
查看一个变量、表达式值的三种方法:
1.鼠标放置查看处,自动显示
2.右键,Watch菜单,也可以在Watch窗口添加表达式
3.Window——>Show View——>Display,输入表达式,右键,Watch菜单
条件断点:
设置断点后,右键断点,断点属性菜单
异常断点:
运行时异常处,会自动中断
非运行时异常处,不会自动中断,需要在Breakpoints页面加入Java异常断点
(2)断点中变量的查看,语句的执行
2.智能纠错、自动完成
(1)自动生成try...catch,自动列出异常列表,自动转型...
必须捕获的异常,对应必须需要try...catch或者抛出
在红色提示上点击鼠标,常常可以得到惊喜
(2)自动生成set、get方法
Sources——>生成Sets和Gets方法
(3)自动生成构造函数
Sources——>生成构造函数(两个)
(4)javadoc的自动生成
规范Java代码编写!!
在函数上一行,输入 /** 再回车
第四讲 eclipse高级操作(1) 重构
重构不高深——实战重构
1.方法抽取 Extract Method
比如方法首部校验部分的抽取
选中代码——>右键——>Refactor——>Extract Method...,具体设置部分在使用时学习
2.重命名 Rename
重命名类名
选中类名——>右键——>Refactor——>Rename...,具体设置部分在使用时学习
3.内联 Inlining
内联方法
选中函数名——>右键——>Refactor——>Inline...,具体设置部分在使用时学习
4.常量抽取 Extract Constant
将“XXX”抽取成常量
选中常量字符串(包括引号)——>右键——>Refactor——>Extract Constant...,具体设置部分在使用时学习
5.抽取局部变量 Extract Local Variable
将XXX抽取成变量
选中类成员变量——>右键——>Refactor——>Extract Local Variable...,具体设置部分在使用时学习
6.包装字段 Encapsulate Field
不要暴露字段!!
重构XXX类,用set get包装
选中类成员变量——>右键——>Refactor——>Encapsulate Field...,具体设置部分在使用时学习
7.抽取接口 Extract Interface
XXX类中抽取XXX接口
选中类成员方法——>右键——>Refactor——>Extract Interface...,具体设置部分在使用时学习
第五讲 eclipse高级操作(1) 常用技巧
1.
(1)代码完成功能
Alt + /
(2)代码格式化功能
java代码规范
先Ctrl + A选中所有代码——>再Ctrl + Shift + F
设置自定义的格式化风格:
Window——>Preferences——>Java——>Code Style——>Formatter——>New
在Braces页面可以设置大括号的位置
(3)jar包关联源代码
注意:jar包和源代码是分离的
jar包上——>右键——>Preferences——Java Source Attachment——>External File...——>JDK中的src.zip
或者在页面中点击Attach Source按钮
(4)打开类型、查看父类实现、查看类型层次结构、查看方法调用
打开需要查看的类:
Navigate——>Open Type...——>输入需要查询的类名,支持通配符
查看父类实现:
左侧出现向上箭头,点击箭头,查看父类
查看类型层次结构:
选中类名——>右键——>Open Type Hierarchy
查看方法调用:
选中方法名——>右键——>Open Call Hierarchy
2.代码搜索
查找一定的信息
Search——>File...
搜索,工作集等的概念...
重构是对软件内部结构的一种调整,目的是在不改变软件行为的前提下,提高其可理解性,降低其修改成本。开发人员可以使用一系列重构准则,在不改变软件行为的前提下,调整软件的结构。
有很多种原因,开发人员应该重构代码,例如之前的开发人员代码写得很烂、自己以前设计时有缺陷、需求变更需要添加一些新的功能或修改原有功能等等。Martin Fowler在其著名的<<Refactoring—Improving the Design of Existing Code>>一书中谈到了为何重构的几点原因:
1. 重构可以改进软件设计
如果不进行重构,程序的设计会变得越来越糟糕。通常程序员只为短期的目的,或者在没有完全理解整体设计的时候,就开始修改代码,这样程序将会逐渐失去自己的结构,程序员也愈来愈难通过阅读源码理解原本设计,相信对此每一个开发人员都深有体会。
代码结构的流失是累积性的,愈难看出代码所代表的意思,就越难保护其中的设计,于是设计也将变得越来越糟糕,经常性重构可以帮助维持设计该有的形态。
2. 重构使软件更易被理解
很多开发人员认为代码只要能够运行起来就可以了,笔者刚开始做开发的时候也是这么认为的,也写过很多的垃圾代码,也因此吃了不少苦头。
也许有些人可能会认为自己可能不久就会离开所在的职位,不必在意代码的质量,但作为一个开发人员来说,写出漂亮的代码是最基本的素质。
在软件的不断修改过程中,代码的可读性越来越差也是会慢慢累积的,但这不要紧,只要记得持续重构,就能使自己的代码更容易被理解。
3. 重构可以协助找到Bugs
对代码的理解,可以更容易找到bug,在重构的同时,也能够更好的理解代码及其行为,从而通过重构能够帮助开发人员写出更强壮的代码。
4. 重构可以提高编程的速度
良好的设计是快速软件开发的根本,如果没有良好的设计,也许开始的一段时间开发人员的进展迅速,但是恶劣的设计很快就会使开发速度慢下来。也许把时间花在调试上的时间会越来越多,修改的时间会越来越长,而且这会是一个恶性的循环。
良好的设计是维持软件开发速度的根本,重构可以帮助开发人员更快速地开发软件,因为它能够阻止系统的设计变质,能够提高代码的可读性。
使用Eclipse进行代码重构
重构是软件开发过程中保证代码质量非常重要的手段,而手动进行重构代码的话,很容易引入一些低级错误(例如,单词拼写错误),从而导致浪费大量不必要的时间。Eclipse为重构提供了很强大的支持,很大程度上用户不必为重构的笔误而再烦恼。
在Eclipse中,可以使用JDT提供的重构功能对Java项目、类和其成员进行重构,所有这些被重构的部分都可以看成一个JDT能识别的Java元素。要执行重构,首先必须选择相应重构的Java元素,一些重构是适合任何Java元素的,而一部分重构只适合特定的Java元素,几乎所有的重构都能够在重构对话框中看到预览的效果。
要使用Eclipse的重构功能,可以先选择相应的Java元素(Java工程中的资源,包括工程、文件、方法、变量等),通过右键菜单选择Refactor菜单下的重构功能,如图1所示。
图1 选择重构菜单
在Eclipse中,可以简单的把重构分为结构性重构、类级别重构和类内部重构,每种类型的重构又分别包含了一些具体的实现,接下来将分别介绍Eclipse如何对Java元素进行重构。
提示:在JDT可识别的范围内,可以认为工程中资源都是Java元素,包括Java文件名、类、方法、变量等。
结构性重构
结构性重构涉及到JAVA元素的物理结构的改变,包括“Rename”、“Move”、“Change Method Signature”、“Convert Anonymous Class to Nested”和“Move Member Type to New File”,下面将一一介绍这些重构在Eclipse中的实现。
1. Rename
Rename重构的功能就是重命名Java元素。虽然可以通过手动修改文件的文件名或其它Java元素的名称,但这种方式不会更新与此Java元素相关联的引用,用户必须手动查找和此Java元素相关的位置,然后进行手动修改。通过手动修改名称的方式,造成笔误的可能性会太太增加。通过Eclipse提供的Rename的功能,Eclipse会自动完成更新相关引用的操作。
当Java元素的命名不清晰或功能发生改变的时,为了保持代码的可读性,可以通过Eclipse的重构功能重命名Java元素。选择相应的Java元素,选择右键Refactor菜单下的Rename菜单,可以对当前选择的元素进行重命名,在弹出的重命名对话框中修改相应的元素名称即可,例如修改一个包的重命名,如图2所示。
图2 Rename对话框
要修改包名的同时,可以选择是否更新引用和更新子目录,甚至是非Java文件也可以选择性的更新。选择Preview按钮可以预览重命名重构后的效果,如图3所示。
图3 预览重命名包名
可以查看预览的内容是否一致,确认是否要进行重命名的重构。可以进行重命名的Java元素有Java项目、Java文件、包、方法和属性字段等。
提示:非Java项目和Java文件等也可以通过重构菜单的Rename进行重命名。
2. Move
Move的重构和Rename的重构类似,它可以把一个Java元素从一个地方移动到另一个地方,Move的重构主要用来移动一个类到不同的包下。首先选中一个Java文件,选择Refactor菜单下的Move菜单项,弹出Move的重构对话框,如图4所示。
图4 Move对话框
可以选择是否更新引用,设定移动文件重构的一些参数。
提示:也可以通过拖动的方式把一个文件从一个包移动到另一个包,实现移动文件的重构。
3. Change Method Signature
“Change Method Signature”重构的功能是改变方法的定义,例如改变方法的参数名称、类型和个数、返回值的类型,方法的可见性以及方法的名称等。
要改变方法的定义,可以先选择方法,通过右键菜单选择Refactor菜单的“Change Method Signature”子菜单项,弹出“Change Method Signature”对话框,如图5所示。
图5 “Change Method Signature”对话框
可以通过“Change Method Signature”对话框改变方法的参数名称、类型和个数、返回值的类型,方法的可见性以及方法名称等。
4. Convert Anonymous Class to Nested
“Convert Anonymous Class to Nested”重构的功能是把匿名类改成内部类,这样同一个类的其它部分也可以共享此类了。
例如有例程1所示的类。
例程1 KeyListenerExample.java
public class KeyListenerExample { Display display; Shell shell; KeyListenerExample() { display = new Display(); shell = new Shell(display); shell.setSize(250,
200); shell.setText("A KeyListener Example"); Text text = new Text(shell, SWT.BORDER); text.setBounds(50, 50, 100, 20); text.addKeyListener(new KeyListener() { public void keyPressed(KeyEvent e) { System.out.println("key Pressed -" + e.character); } public
void keyReleased(KeyEvent e) { System.out.println("key Released -" + e.character); } }); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } public static void main(String[] args) { new KeyListenerExample();
} }
在KeyListenerExample类有一个匿名类,实现了KeyListener接口,可以把这个匿名类改成内部类,首先选择匿名类,右键选择Refactor的“Convert Anonymous Class to Nested”菜单,输入内部类的名称,如图6所示。
图6 “Convert Anonymous Class to Nested”对话框
重构后的结果是Eclipse为此创建了一个内部类,名称为TestKeyListener,重构后的代码如例程2所示。
例程2 重构后的KeyListenerExample.java
public class KeyListenerExample { private final class TestKeyListener implements KeyListener { public void keyPressed(KeyEvent e) { System.out.println("key
Pressed -" + e.character); } public void keyReleased(KeyEvent e) { System.out.println("key Released -" + e.character); } } Display display; Shell shell; KeyListenerExample() { display = new Display(); shell = new Shell(display); shell.setSize(250, 200); shell.setText("A
KeyListener Example"); Text text = new Text(shell, SWT.BORDER); text.setBounds(50, 50, 100, 20); text.addKeyListener(new TestKeyListener()); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }
public static void main(String[] args) { new KeyListenerExample(); } }
也可以通过“Convert Anonymous Class to Nested”对话框定义新生成的内部类的可访问性。
5. Move Member Type to Top Level
通过“Move Member Type to Top Level”的重构方式,可以把内部类改成非内部类,并且重新创建一个新的文件,这样其它的类就可以共享此类。
例程2创建了一个内部类TestKeyListener,现在可以通过“Move Member Type to Top Level”重构的方式,把TestKeyListener放入一个单独的类中。首先选择TestKeyListener类,从右键菜单Refactor中选择“Move Member Type
to Top Level”,打开“Move Member Type to Top Level”对话框,如图7所示。
图7 “Move Member Type to Top Level”对话框
通过上面“Move Member Type to Top Level”重构,可以把内部类改成非内部类。
提示:有些时候,重构并不是一步完成的,可以一步一步重构,例如,首先把匿名类改成内部类,再接着把内部类改成非内部类。
类级别重构
类级别重构有如下一些:
1. Push Down
“Push Down”重构功能是把父类的方法和属性移动到所有的子类中,父类的方法可以选择性的保留抽象方法。首先选择父类,右键选择Refactor菜单的“Push Down”菜单项,可以通过“Push Down”对话框选择重构,如图8所示。
图8 “Push Down”对话框
“Push Down”重构在重新设计类的时候是非常有用的,它可以比较有较的改善类的继承关系,清楚定义类的行为。
2. Pull Up
“Pull Up”重构和“Push Down”重构正好相反,它的作用是把方法和属性移动到其父类中去。选择需要重构的子类,从右键菜单选择Refactor菜单的“Pull up”菜单项,通过“Pull Up”对话框进行重构,如图9所示。
图9 “Pull Up”对话框
提示:“Pull Up”重构和“Push Down”重构后可能会出错,在使用此重构的同时,应该先弄清楚某些方法中是否有引用到其它方法或属性。
3. Extract Interface
“Extract Interface”重构能够从一个已存在的类中提取接口,它可以从某个类中选择方法,把这些方法提取到一个单独的接口中。选择提取接口的类,右键选择Refactor菜单的“Extract Interface”菜单项,打开“Extract Interface”对话框,如图10所示。
图10 “Extract Interface”对话框
单元OK按钮,将会提取TestInterface的接口,提取接口后,当前选择的类将会实现此接口。
提示:只有公用方法才可以被提取为接口的方法。
4. Generalize Declared Type
“Generalize Declared Type”重构能够改变变量、参数、属性以及函数的返回值的类型,可以把这些类型改成其父类的类型。在Refactor菜单中选择“Generalize Declared Type”,如图11所示。
图11 “Generalize Declared Type”对话框
单击OK按钮,能够把声明的类型改成当对话框中选择的类型。
5. User Supertype Where Possible
“User Supertype Where Possible”重构能够用某一个类的父类的类型替换当前类的类型,选择需要被替换引用的类。在Refactor菜单中选择“User Supertype Where Possible”打开“User Supertype Where Possible”对话框,如图12所示。
图12 “User Supertype Where Possible”对话框
“Generalize Declared Type”重构和“User Supertype Where Possible”重构在面向接口编程方面是很有用的,可以把引用的对象尽可能用接口进行实现。
提示:“User Supertype Where Possible”重构将替换其它类中的引用,要想看到重构的效果,应该找到其它类引用的位置,此操作不会修改当前文件。
类内部重构
类内部重构有如下一些:
1. Inline
“Inline”重构能用函数的内容替换掉函数的引用。首先选择函数的引用,在Refactor菜单中选择“Inline”打开“Inline”对话框,如图13所示。
图13 “Inline”对话框
单击确定按钮,Eclipse将会用方法实现的部分替换引用的部分,即当前不采用方法调用的方式进行操作。也可以选择“All invocations”和“Delete method declaration”,Eclipse会替换掉所有引用方法的位置,并且删除方法。
提示:Inline会用方法的实现部分替换所有调用方法的地方。
2. Extract Method
“Extract Method”重构和“Inline”重构相反,它能够从冗长的方法中提取小的方法,把大的方法分解成多个小方法来实现,通过此重构能够使代码看上去更简单漂亮,也很大程度上提高代码的复用性。可以选择要提取方法的代码,在Refactor菜单中选择“Extract Method”打开“Extract
Method”对话框,如图14所示。
图14 “Extract Method”对话框
“Extract Method”重构是非常好的重构方式,能够把大的方法体重构成多个方法的实现,使代码更清楚易懂。
提示:“Extract Method”重构和“Inline”重构是对应的,有些时候为了组织一些不合的函数,可以先通过“Inline”的方式生成一个大的函数,再通过“Extract Method”来重构大的函数,使代码更趋于合理。
3. Extract Local Variable
在开发过程中,使用变量代替表达式是非常好的,这样能使代码更容易被理解。Eclipse中可以通过“Extract Local Variable”重构实现提取局部的表达式。首先选择表达式,在Refactor菜单中选择“Extract Local Variable”打开“Extract Local
Variable”对话框,如图15所示。
图15 “Extract Local Variable”对话框
4. Extract Constant
“Extract Constant”重构和“Extract Local Variable”重构类似,它可以把表达式定义为常量,另外“Extract Constant”重构能够设定常量的可见性。选择表达式,在Refactor菜单中选择“Extract Constant”打开“Extract
第一讲 Eclipse的基本使用1.Eclipse工程的建立
2.源文件夹等概念
Eclipse会自动编译放置在源文件夹内的源文件
一些不需要编译的文件需要放置在普通文件夹下
3.基本代码的编写
代码提示强制显示:alt + /
第二讲 Eclipse基本操作(1)
1.建立包、建立接口及其他
层级包的显示:平级显示;层级显示
2.工程的高级配置
3.工程的构建
自动编译设定:Project——>Build Automatically
4.代码的自动完成、自动修正功能(在警告或者错误处点击左键,出现解决方案)
黄色的、红色的标示
黄色:警告
红色:错误
传递性...
(1)方法的自动生成
错误处点击左键,选择创建方法
(2)导入import
快捷键:Ctrl + Shift + O
(3)清除无用的import
错误处点击左键,选择删除
(4)自动清除无用的方法、常量
错误处点击左键,选择删除
(5)自动实现接口的、抽象类的方法,自动重载父类的方法
implements extends extends
Source——>重载/实现方法菜单...
点击左边的向上箭头,查看父类信息...
第三讲 Eclipse基本操作(2)
1.Java的调试
(1)断点、条件断点、异常断点
断点:
在左侧双击设置/删除断点,或者右键选择相应菜单设置/删除断点
调试需要通过远程端口进行调试
查看一个变量、表达式值的三种方法:
1.鼠标放置查看处,自动显示
2.右键,Watch菜单,也可以在Watch窗口添加表达式
3.Window——>Show View——>Display,输入表达式,右键,Watch菜单
条件断点:
设置断点后,右键断点,断点属性菜单
异常断点:
运行时异常处,会自动中断
非运行时异常处,不会自动中断,需要在Breakpoints页面加入Java异常断点
(2)断点中变量的查看,语句的执行
2.智能纠错、自动完成
(1)自动生成try...catch,自动列出异常列表,自动转型...
必须捕获的异常,对应必须需要try...catch或者抛出
在红色提示上点击鼠标,常常可以得到惊喜
(2)自动生成set、get方法
Sources——>生成Sets和Gets方法
(3)自动生成构造函数
Sources——>生成构造函数(两个)
(4)javadoc的自动生成
规范Java代码编写!!
在函数上一行,输入 /** 再回车
第四讲 eclipse高级操作(1) 重构
重构不高深——实战重构
1.方法抽取 Extract Method
比如方法首部校验部分的抽取
选中代码——>右键——>Refactor——>Extract Method...,具体设置部分在使用时学习
2.重命名 Rename
重命名类名
选中类名——>右键——>Refactor——>Rename...,具体设置部分在使用时学习
3.内联 Inlining
内联方法
选中函数名——>右键——>Refactor——>Inline...,具体设置部分在使用时学习
4.常量抽取 Extract Constant
将“XXX”抽取成常量
选中常量字符串(包括引号)——>右键——>Refactor——>Extract Constant...,具体设置部分在使用时学习
5.抽取局部变量 Extract Local Variable
将XXX抽取成变量
选中类成员变量——>右键——>Refactor——>Extract Local Variable...,具体设置部分在使用时学习
6.包装字段 Encapsulate Field
不要暴露字段!!
重构XXX类,用set get包装
选中类成员变量——>右键——>Refactor——>Encapsulate Field...,具体设置部分在使用时学习
7.抽取接口 Extract Interface
XXX类中抽取XXX接口
选中类成员方法——>右键——>Refactor——>Extract Interface...,具体设置部分在使用时学习
第五讲 eclipse高级操作(1) 常用技巧
1.
(1)代码完成功能
Alt + /
(2)代码格式化功能
java代码规范
先Ctrl + A选中所有代码——>再Ctrl + Shift + F
设置自定义的格式化风格:
Window——>Preferences——>Java——>Code Style——>Formatter——>New
在Braces页面可以设置大括号的位置
(3)jar包关联源代码
注意:jar包和源代码是分离的
jar包上——>右键——>Preferences——Java Source Attachment——>External File...——>JDK中的src.zip
或者在页面中点击Attach Source按钮
(4)打开类型、查看父类实现、查看类型层次结构、查看方法调用
打开需要查看的类:
Navigate——>Open Type...——>输入需要查询的类名,支持通配符
查看父类实现:
左侧出现向上箭头,点击箭头,查看父类
查看类型层次结构:
选中类名——>右键——>Open Type Hierarchy
查看方法调用:
选中方法名——>右键——>Open Call Hierarchy
2.代码搜索
查找一定的信息
Search——>File...
搜索,工作集等的概念...
重构是对软件内部结构的一种调整,目的是在不改变软件行为的前提下,提高其可理解性,降低其修改成本。开发人员可以使用一系列重构准则,在不改变软件行为的前提下,调整软件的结构。
有很多种原因,开发人员应该重构代码,例如之前的开发人员代码写得很烂、自己以前设计时有缺陷、需求变更需要添加一些新的功能或修改原有功能等等。Martin Fowler在其著名的<<Refactoring—Improving the Design of Existing Code>>一书中谈到了为何重构的几点原因:
1. 重构可以改进软件设计
如果不进行重构,程序的设计会变得越来越糟糕。通常程序员只为短期的目的,或者在没有完全理解整体设计的时候,就开始修改代码,这样程序将会逐渐失去自己的结构,程序员也愈来愈难通过阅读源码理解原本设计,相信对此每一个开发人员都深有体会。
代码结构的流失是累积性的,愈难看出代码所代表的意思,就越难保护其中的设计,于是设计也将变得越来越糟糕,经常性重构可以帮助维持设计该有的形态。
2. 重构使软件更易被理解
很多开发人员认为代码只要能够运行起来就可以了,笔者刚开始做开发的时候也是这么认为的,也写过很多的垃圾代码,也因此吃了不少苦头。
也许有些人可能会认为自己可能不久就会离开所在的职位,不必在意代码的质量,但作为一个开发人员来说,写出漂亮的代码是最基本的素质。
在软件的不断修改过程中,代码的可读性越来越差也是会慢慢累积的,但这不要紧,只要记得持续重构,就能使自己的代码更容易被理解。
3. 重构可以协助找到Bugs
对代码的理解,可以更容易找到bug,在重构的同时,也能够更好的理解代码及其行为,从而通过重构能够帮助开发人员写出更强壮的代码。
4. 重构可以提高编程的速度
良好的设计是快速软件开发的根本,如果没有良好的设计,也许开始的一段时间开发人员的进展迅速,但是恶劣的设计很快就会使开发速度慢下来。也许把时间花在调试上的时间会越来越多,修改的时间会越来越长,而且这会是一个恶性的循环。
良好的设计是维持软件开发速度的根本,重构可以帮助开发人员更快速地开发软件,因为它能够阻止系统的设计变质,能够提高代码的可读性。
使用Eclipse进行代码重构
重构是软件开发过程中保证代码质量非常重要的手段,而手动进行重构代码的话,很容易引入一些低级错误(例如,单词拼写错误),从而导致浪费大量不必要的时间。Eclipse为重构提供了很强大的支持,很大程度上用户不必为重构的笔误而再烦恼。
在Eclipse中,可以使用JDT提供的重构功能对Java项目、类和其成员进行重构,所有这些被重构的部分都可以看成一个JDT能识别的Java元素。要执行重构,首先必须选择相应重构的Java元素,一些重构是适合任何Java元素的,而一部分重构只适合特定的Java元素,几乎所有的重构都能够在重构对话框中看到预览的效果。
要使用Eclipse的重构功能,可以先选择相应的Java元素(Java工程中的资源,包括工程、文件、方法、变量等),通过右键菜单选择Refactor菜单下的重构功能,如图1所示。
图1 选择重构菜单
在Eclipse中,可以简单的把重构分为结构性重构、类级别重构和类内部重构,每种类型的重构又分别包含了一些具体的实现,接下来将分别介绍Eclipse如何对Java元素进行重构。
提示:在JDT可识别的范围内,可以认为工程中资源都是Java元素,包括Java文件名、类、方法、变量等。
结构性重构
结构性重构涉及到JAVA元素的物理结构的改变,包括“Rename”、“Move”、“Change Method Signature”、“Convert Anonymous Class to Nested”和“Move Member Type to New File”,下面将一一介绍这些重构在Eclipse中的实现。
1. Rename
Rename重构的功能就是重命名Java元素。虽然可以通过手动修改文件的文件名或其它Java元素的名称,但这种方式不会更新与此Java元素相关联的引用,用户必须手动查找和此Java元素相关的位置,然后进行手动修改。通过手动修改名称的方式,造成笔误的可能性会太太增加。通过Eclipse提供的Rename的功能,Eclipse会自动完成更新相关引用的操作。
当Java元素的命名不清晰或功能发生改变的时,为了保持代码的可读性,可以通过Eclipse的重构功能重命名Java元素。选择相应的Java元素,选择右键Refactor菜单下的Rename菜单,可以对当前选择的元素进行重命名,在弹出的重命名对话框中修改相应的元素名称即可,例如修改一个包的重命名,如图2所示。
图2 Rename对话框
要修改包名的同时,可以选择是否更新引用和更新子目录,甚至是非Java文件也可以选择性的更新。选择Preview按钮可以预览重命名重构后的效果,如图3所示。
图3 预览重命名包名
可以查看预览的内容是否一致,确认是否要进行重命名的重构。可以进行重命名的Java元素有Java项目、Java文件、包、方法和属性字段等。
提示:非Java项目和Java文件等也可以通过重构菜单的Rename进行重命名。
2. Move
Move的重构和Rename的重构类似,它可以把一个Java元素从一个地方移动到另一个地方,Move的重构主要用来移动一个类到不同的包下。首先选中一个Java文件,选择Refactor菜单下的Move菜单项,弹出Move的重构对话框,如图4所示。
图4 Move对话框
可以选择是否更新引用,设定移动文件重构的一些参数。
提示:也可以通过拖动的方式把一个文件从一个包移动到另一个包,实现移动文件的重构。
3. Change Method Signature
“Change Method Signature”重构的功能是改变方法的定义,例如改变方法的参数名称、类型和个数、返回值的类型,方法的可见性以及方法的名称等。
要改变方法的定义,可以先选择方法,通过右键菜单选择Refactor菜单的“Change Method Signature”子菜单项,弹出“Change Method Signature”对话框,如图5所示。
图5 “Change Method Signature”对话框
可以通过“Change Method Signature”对话框改变方法的参数名称、类型和个数、返回值的类型,方法的可见性以及方法名称等。
4. Convert Anonymous Class to Nested
“Convert Anonymous Class to Nested”重构的功能是把匿名类改成内部类,这样同一个类的其它部分也可以共享此类了。
例如有例程1所示的类。
例程1 KeyListenerExample.java
public class KeyListenerExample { Display display; Shell shell; KeyListenerExample() { display = new Display(); shell = new Shell(display); shell.setSize(250,
200); shell.setText("A KeyListener Example"); Text text = new Text(shell, SWT.BORDER); text.setBounds(50, 50, 100, 20); text.addKeyListener(new KeyListener() { public void keyPressed(KeyEvent e) { System.out.println("key Pressed -" + e.character); } public
void keyReleased(KeyEvent e) { System.out.println("key Released -" + e.character); } }); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } public static void main(String[] args) { new KeyListenerExample();
} }
在KeyListenerExample类有一个匿名类,实现了KeyListener接口,可以把这个匿名类改成内部类,首先选择匿名类,右键选择Refactor的“Convert Anonymous Class to Nested”菜单,输入内部类的名称,如图6所示。
图6 “Convert Anonymous Class to Nested”对话框
重构后的结果是Eclipse为此创建了一个内部类,名称为TestKeyListener,重构后的代码如例程2所示。
例程2 重构后的KeyListenerExample.java
public class KeyListenerExample { private final class TestKeyListener implements KeyListener { public void keyPressed(KeyEvent e) { System.out.println("key
Pressed -" + e.character); } public void keyReleased(KeyEvent e) { System.out.println("key Released -" + e.character); } } Display display; Shell shell; KeyListenerExample() { display = new Display(); shell = new Shell(display); shell.setSize(250, 200); shell.setText("A
KeyListener Example"); Text text = new Text(shell, SWT.BORDER); text.setBounds(50, 50, 100, 20); text.addKeyListener(new TestKeyListener()); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }
public static void main(String[] args) { new KeyListenerExample(); } }
也可以通过“Convert Anonymous Class to Nested”对话框定义新生成的内部类的可访问性。
5. Move Member Type to Top Level
通过“Move Member Type to Top Level”的重构方式,可以把内部类改成非内部类,并且重新创建一个新的文件,这样其它的类就可以共享此类。
例程2创建了一个内部类TestKeyListener,现在可以通过“Move Member Type to Top Level”重构的方式,把TestKeyListener放入一个单独的类中。首先选择TestKeyListener类,从右键菜单Refactor中选择“Move Member Type
to Top Level”,打开“Move Member Type to Top Level”对话框,如图7所示。
图7 “Move Member Type to Top Level”对话框
通过上面“Move Member Type to Top Level”重构,可以把内部类改成非内部类。
提示:有些时候,重构并不是一步完成的,可以一步一步重构,例如,首先把匿名类改成内部类,再接着把内部类改成非内部类。
类级别重构
类级别重构有如下一些:
1. Push Down
“Push Down”重构功能是把父类的方法和属性移动到所有的子类中,父类的方法可以选择性的保留抽象方法。首先选择父类,右键选择Refactor菜单的“Push Down”菜单项,可以通过“Push Down”对话框选择重构,如图8所示。
图8 “Push Down”对话框
“Push Down”重构在重新设计类的时候是非常有用的,它可以比较有较的改善类的继承关系,清楚定义类的行为。
2. Pull Up
“Pull Up”重构和“Push Down”重构正好相反,它的作用是把方法和属性移动到其父类中去。选择需要重构的子类,从右键菜单选择Refactor菜单的“Pull up”菜单项,通过“Pull Up”对话框进行重构,如图9所示。
图9 “Pull Up”对话框
提示:“Pull Up”重构和“Push Down”重构后可能会出错,在使用此重构的同时,应该先弄清楚某些方法中是否有引用到其它方法或属性。
3. Extract Interface
“Extract Interface”重构能够从一个已存在的类中提取接口,它可以从某个类中选择方法,把这些方法提取到一个单独的接口中。选择提取接口的类,右键选择Refactor菜单的“Extract Interface”菜单项,打开“Extract Interface”对话框,如图10所示。
图10 “Extract Interface”对话框
单元OK按钮,将会提取TestInterface的接口,提取接口后,当前选择的类将会实现此接口。
提示:只有公用方法才可以被提取为接口的方法。
4. Generalize Declared Type
“Generalize Declared Type”重构能够改变变量、参数、属性以及函数的返回值的类型,可以把这些类型改成其父类的类型。在Refactor菜单中选择“Generalize Declared Type”,如图11所示。
图11 “Generalize Declared Type”对话框
单击OK按钮,能够把声明的类型改成当对话框中选择的类型。
5. User Supertype Where Possible
“User Supertype Where Possible”重构能够用某一个类的父类的类型替换当前类的类型,选择需要被替换引用的类。在Refactor菜单中选择“User Supertype Where Possible”打开“User Supertype Where Possible”对话框,如图12所示。
图12 “User Supertype Where Possible”对话框
“Generalize Declared Type”重构和“User Supertype Where Possible”重构在面向接口编程方面是很有用的,可以把引用的对象尽可能用接口进行实现。
提示:“User Supertype Where Possible”重构将替换其它类中的引用,要想看到重构的效果,应该找到其它类引用的位置,此操作不会修改当前文件。
类内部重构
类内部重构有如下一些:
1. Inline
“Inline”重构能用函数的内容替换掉函数的引用。首先选择函数的引用,在Refactor菜单中选择“Inline”打开“Inline”对话框,如图13所示。
图13 “Inline”对话框
单击确定按钮,Eclipse将会用方法实现的部分替换引用的部分,即当前不采用方法调用的方式进行操作。也可以选择“All invocations”和“Delete method declaration”,Eclipse会替换掉所有引用方法的位置,并且删除方法。
提示:Inline会用方法的实现部分替换所有调用方法的地方。
2. Extract Method
“Extract Method”重构和“Inline”重构相反,它能够从冗长的方法中提取小的方法,把大的方法分解成多个小方法来实现,通过此重构能够使代码看上去更简单漂亮,也很大程度上提高代码的复用性。可以选择要提取方法的代码,在Refactor菜单中选择“Extract Method”打开“Extract
Method”对话框,如图14所示。
图14 “Extract Method”对话框
“Extract Method”重构是非常好的重构方式,能够把大的方法体重构成多个方法的实现,使代码更清楚易懂。
提示:“Extract Method”重构和“Inline”重构是对应的,有些时候为了组织一些不合的函数,可以先通过“Inline”的方式生成一个大的函数,再通过“Extract Method”来重构大的函数,使代码更趋于合理。
3. Extract Local Variable
在开发过程中,使用变量代替表达式是非常好的,这样能使代码更容易被理解。Eclipse中可以通过“Extract Local Variable”重构实现提取局部的表达式。首先选择表达式,在Refactor菜单中选择“Extract Local Variable”打开“Extract Local
Variable”对话框,如图15所示。
图15 “Extract Local Variable”对话框
4. Extract Constant
“Extract Constant”重构和“Extract Local Variable”重构类似,它可以把表达式定义为常量,另外“Extract Constant”重构能够设定常量的可见性。选择表达式,在Refactor菜单中选择“Extract Constant”打开“Extract
相关推荐
以下是一些常见的Eclipse快捷键: 1. **代码编辑** - `Ctrl + Shift + T`: 打开类型(类)浏览器,快速查找并打开类文件。 - `Ctrl + Shift + R`: 打开资源浏览器,可以搜索项目中的文件。 - `Ctrl + Space`: ...
### Eclipse与MyEclipse快捷键详解 #### Eclipse 快捷键 **1. Ctrl+1:快速修复** 这是Eclipse中最经典且最常用的快捷键之一,适用于多种编程语言中的错误修正提示,例如Java中的语法错误、类型不匹配等问题。通过...
总结而言,"Eclipse快捷键壁纸大图"是提高编程效率的实用工具,包含了Eclipse中编辑、导航、搜索、重构和调试等多方面的快捷键,使得开发者能快速上手并熟练运用Eclipse进行高效编码。建议每个使用Eclipse的开发者都...
### Eclipse 快捷键大全详解 #### 一、编辑与操作类快捷键 **Ctrl+1**:自动修复代码中的错误或警告。 **Ctrl+D**:删除当前行。 **Ctrl+Alt+Shift+Enter**:在当前行下方创建新行。 **Alt+Down/Up**:移动当前...
将Eclipse快捷键壁纸设为桌面,不仅可以帮助初级开发者熟悉并记住这些高效的操作方式,对于经验丰富的开发者来说,也是一个不错的提醒工具,特别是在处理多任务或者切换不同IDE时,能够快速找回特定的快捷键。...
在这种情况下,"IntelliJ IDEA中的Eclipse快捷键插件"就显得尤为重要,它允许用户在IntelliJ IDEA中使用与Eclipse相同的快捷键,从而提高工作效率并减少学习新IDE的过渡期。 这个插件的主要目标是为Eclipse的忠实...
### MyEclipse与Eclipse快捷键详解 在开发过程中,熟练掌握IDE(集成开发环境)的快捷键可以显著提高工作效率。本文将详细介绍MyEclipse和Eclipse中的常用快捷键,帮助开发者更快地进行代码编辑、调试及管理。 ###...
Eclipse快捷键通常分为几个主要类别,包括编辑、导航、搜索、重构和项目管理等。以下是一些关键的Eclipse快捷键及其功能: 1. **编辑快捷键**: - `Ctrl + Space`:自动完成代码,这是最常用的快捷键之一。 - `...
对于那些习惯于Eclipse快捷键的开发人员,当切换到IDEA时,可能会面临学习新快捷键的困扰。为了解决这个问题,有一个名为“IDEA快捷键转Eclipse快捷键(jar包)”的资源应运而生。 这个资源是一个jar包,它的主要...
通过掌握上述Eclipse快捷键,开发者能够更高效地进行编码、调试和重构工作。这些快捷键不仅可以节省大量的时间,还能提高代码质量和可维护性。建议开发者根据自己的需求定制一套适合自己使用的快捷键组合,进一步...
熟练掌握Eclipse快捷键是每一个程序员提升开发速度的关键步骤。以下是一些主要的Eclipse快捷键及其用途: 1. **Ctrl+1**:快速修复。当Eclipse检测到代码中有错误或警告时,此快捷键可以快速提供解决方案。 2. **...
标题中的"IDEA转Eclipse快捷键的jar包"是一款专为解决这一问题设计的工具。它允许用户在Eclipse中模拟IntelliJ IDEA的快捷键设置,使得那些已经熟悉IDEA快捷键的开发者能在Eclipse中无缝切换,提高开发效率,减少...
**Eclipse与IDEA在重构方面的快捷键对比:** - **改名** - **Eclipse**: `Alt+Shift+R` - **IDEA**: `Shift+F6` - **修改方法签名** - **Eclipse**: `Ctrl+F6` - **IDEA**: `Ctrl+F6` - **修改参数的类型** ...
### Eclipse快捷键大全知识点 #### 一、编辑与操作类快捷键 **1....- **Ctrl+D**: 删除当前行 ...以上是Eclipse快捷键大全的主要知识点,涵盖了编辑、导航、查找、重构等多个方面,有助于提升开发效率。
以下是一些常用的Eclipse快捷键: 1. **编辑操作**: - `Ctrl + Z`:撤销 - `Ctrl + Y`:重做 - `Ctrl + C` / `Ctrl + X` / `Ctrl + V`:复制、剪切、粘贴 - `Ctrl + D`:删除当前行 - `Ctrl + Shift + D`:...
以下是从“Eclipse实用快捷键大全.txt”文件中提取并整理的关键知识点,涵盖文件操作、编辑器功能、代码导航、重构与调试等方面。 #### 文件操作 - **Ctrl+C**: 复制选定的文本或元素。 - **Ctrl+V**: 粘贴已复制的...
### Eclipse 快捷键详解 #### 一、基础操作 - **Ctrl+1**:快速修复(Quick Fix)。当你在代码中出现错误时,按下此快捷键会弹出一个快速修复对话框,帮助你修正错误。 - **Ctrl+D**:删除当前行。这是一个非常...
【Eclipse 快捷键大全】是编程人员提高效率的重要工具,尤其对于使用Eclipse、MyEclipse等Java开发环境的...在HTML表格形式的【eclipse快捷键大全.htm】文件中,你可以更直观地查看和学习这些快捷键,方便随时查阅。
【Eclipse快捷键大全】 Eclipse是一款强大的集成开发环境(IDE),它提供了众多高效快捷的操作方式,通过快捷键可以显著提升编程效率。以下是一些重要的Eclipse快捷键及其功能: 1. **Ctrl+1**: 快速修复。当...