要成为高效的Android程序员,需要头脑灵活,能够在开发、调试和测试的过程中重构代码,重构代码最大的风险是可能会引入意外的错误,Android Studio通过分析某些具有危险性的重构操作来降低风险,并接着激活Find工具窗口,应该将所有重要的重构修改单独做一次Git提交,以便回退。

Refator this菜单(Ctrl+Alt+Shift+T):

重命名

在project窗口选中类文件,Ctrl+Alt+Shift+T唤出重构菜单,选择Rename,出现的对话框允许重命名类,以及该名称在注释、测试用例和继承类中所有出现的地方

修改签名

该操作允许修改方法的以下属性:可见性、名称、返回类型、参数、抛出异常

将光标置于方法名Ctrl+Alt+Shift+T唤出重构菜单,选择Change Signature

类型迁移

允许把一种Java类型改为另一种

移动

  • 移动源文件

    • 在project窗口拖拽源文件
    • 选中源文件,用重构菜单的Move
  • 移动成员
    • 光标置于该行,用重构菜单的Move项,能够把成员从一个类移到另一个类中

复制

...

安全删除

Safe Delete在执行删除之前查找该资源的依赖

抽取

Extract有一系列操作:抽取变量、抽取常量、抽取字段、抽取参数、抽取方法

抽取变量

private String saySomething(){
return "something";
}

光标置于硬编码的"something"任意位置,Ctrl+Alt+Shift+T选择Extract的Variable(Ctrl+Alt+V),抽取本地变量并根据硬编码的字符串来命名它

private String saySomething(){
final String something = "something";
return something;
}

抽取常量

Ctrl+Alt+C

抽取字段

会将一个本地变量转换为类中的一个成员

private Date getDate(){
return new Date();
}

光标置于Date,Ctrl+Alt+Shift+T选择Extract的Field(Ctrl+Alt+F)

public class Sandbox{

    private Date mDate;

    private Date getDate(){
mDate = new Date();
return mDate;
}
}

抽取参数

抽取变量并将其作为所在方法的参数

private Date getDate(){
return new Date();
}

光标置于Date,Ctrl+Alt+Shift+T选择Extract的Parameter(Ctrl+Alt+P)

private Date getDate(Date date){
return date;
}

抽取方法

选择一行或多行连续代码并将它们置于一个单独的方法中

private String methodHello(){
String greet = "hello";
StringBuilder stringBuilder = new StringBuilder();
for(int i=0; i<10; i++){
stringBuilder.append(greet + i);
}
return stringBuilder.toString();
} private String methodGoodbye(){
String greet = "Goodbye";
StringBuilder stringBuilder = new StringBuilder();
for(int i=0; i<10; i++){
stringBuilder.append(greet + i);
}
return stringBuilder.toString();
}

选中

StringBuilder stringBuilder = new StringBuilder();
for(int i=0; i<10; i++){
stringBuilder.append(greet + i);
}
return stringBuilder.toString();

Ctrl+Alt+Shift+T选择Extract的Method(Ctrl+Alt+M)

扫描文件发现还有一个相同的代码块实例

@NonNull
private String getGreet(String greet) {
StringBuilder stringBuilder = new StringBuilder();
for(int i=0; i<10; i++){
stringBuilder.append(greet + i);
}
return stringBuilder.toString();
} private String methodHello(){
String greet = "hello";
return getGreet(greet);
} private String methodGoodbye(){
String greet = "Goodbye";
return getGreet(greet);
}

《Android Studio实战 快速、高效地构建Android应用》--三、重构代码的更多相关文章

  1. 《Android Studio实战 快速、高效地构建Android应用》--五、备忘录实验(1/2)

    通过开发App熟悉Android Studio的用法 开发一款用于管理备忘事项列表的App,核心功能: 创建.删除备忘 将某些备忘标记为重要(左侧带颜色标签突出显示) 涉及:操作栏菜单.上下文菜单.用 ...

  2. 《Android Studio实战 快速、高效地构建Android应用》--四、Git入门

    Git版本控制系统(VCS)是分布式的,仓库的每一个副本均包含项目的完整历史 安装Git 下载 下载地址:http://git-scm.com/downloads 选择适合自己操作系统的来下载 如果下 ...

  3. 《Android Studio实战 快速、高效地构建Android应用》--Android Studio操作

    前言 摩尔定律:CPU的处理能力大约18个月翻一倍 Android&Java:想要在Android Studio中开发Android App,必须以充分了解Java为前提(Java流行的原因: ...

  4. 《Android Studio实战 快速、高效地构建Android应用》--二、在Android Studio中编程

    代码折叠 Ctrl+数字加号展开光标处已折叠代码块 Ctrl+数字减号折叠光标处已展开代码块 Ctrl+Shift+数字加号展开窗口中全部代码 Ctrl+Shift+数字减号折叠窗口中全部代码 注释代 ...

  5. Android NDK开发 Android Studio使用新的Gradle构建工具配置NDK环境(一)

    本文主要讲述了如何如何在Android Studio使用新的Gradle构建工具配置NDK环境,现在把相关的步骤整理出来分享给Android程序员兄弟们,希望给他们在配置NDK环境时带来帮助. 从An ...

  6. 拥抱 Android Studio 之一:从 ADT 到 Android Studio

    http://kvh.io/cn/embrace-android-studio-migration.html 1. 拥抱变化,拥抱新事物 Android Studio(IntelliJ IDEA)vs ...

  7. Android studio:从Eclipse迁移到Android Studio【一】

    转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=255061&extra=page%3D2%26filter%3Dautho ...

  8. [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍

    注:为了看上去比较清晰这里只转载了中文 原地址:  [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍 本章将引导您完成安装和设置开发环境,然后你就可 ...

  9. 第二章:Android Studio概述(一)[学习Android Studio汉化教程]

     Android Studio是一个视窗化的开发环境.为了充分利用有限的屏幕空间,不让你束手束脚,Android Studio 在特定的时间仅仅显示一小部分可用窗口. 除了一些上下文敏感的窗口和上下文 ...

随机推荐

  1. The Annual Summary Of 2019

    Time is flying, it arrives at the end of year again. This is my first year working in PinDuoDuo inc ...

  2. 使用 Python 中 re 模块对测试用例参数化,进行搜索 search、替换 sub

    自动化测试用例,如果一百个接口要在Excel写100个sheet表单,每个接口有10个字段,里面有5个都可能是变化的,需要使用参数化,先试用特定的字符进行站位,在构造参数时在进行替换占位符: 一.用力 ...

  3. HDU4734 F(x) 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4734 题目大意: 对于一个 \(n\) 位十进制数 \(x\) (\(A_nA_{n-1}A_{n-2 ...

  4. 1073 多选题常见计分法 (20分)C语言

    批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考生选择了任何一个错误的选项,则不能得分.本 ...

  5. 使用Theia——添加语言支持

    上一篇:使用Theia——创建插件 Theia——添加语言支持 Theia中TextMate的支持 使用TextMate语法可以为大部分源文件提供精准的着色修饰,虽然这只是在语法级别上(没有语言本身的 ...

  6. matlab读取excel文件中的数据

    1.读取sheet1中的所有数据 1.1首先我们建立一个sheet表,表名为‘111’ 1.2 默认这些文本以及数字都放在sheet1中,我们将此excel选入当前工作目录(必要步骤), 选入当前工作 ...

  7. config.xml写入和读取

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  8. Eclipse中安装Jetty服务器

    1. 在eclipse中安装jetty适配器 方法一: (1) 打开 Windows -> Preference -> Server -> Runtime Environment , ...

  9. VScode(一):C/C++ & MinGW & Code Runner

    目录 1 VScode配置安装 2 MinGW配置安装 2.1 MinGW下载安装 2.2 MinGW环境配置 3 VScode编译C/C++ 3.1 扩展插件安装 3.2 项目配置 3.2.1 配置 ...

  10. 修饰符new与override

    new:在作为修饰符时,可以隐藏从父类的继承的成员. override:修改父类的方法.属性. 上代码比较清楚: using System; using System.Collections.Gene ...