要成为高效的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. JAVA字节码文件之结构

    开发工具:IEDA.JDK1.8.WinHex 一.字节码文件结构 源代码 package com.jalja.java.bytecode; /** * @Auther: XL * @Date: 20 ...

  2. 洛谷训练新手村之“BOSS战-入门综合练习2”题解

    P1426 小鱼会有危险吗 题目链接:https://www.luogu.com.cn/problem/P1426 题目大意: 有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每 ...

  3. vue入门,vue指令,vue组件,vue模板

    vue 使用虚拟dom操作减少真实dom操作 提高页面的渲染效率 虚拟dom的本质就是内存中的一个对象,该对象和dom结构相互对应 将开发者经历从dom中释放出来,转移到数据的操作 开发者不需要关注页 ...

  4. Math&Random&ThreadLocalRandom类

    Math类 //绝对值值运算: Math.abs(18.999); //返回19.999这个数的绝对值 Math.abs(-12.58); // 返回-12.58这个数的绝对值,为12.58 //取值 ...

  5. 【转】Java多线程面试问题集锦

    如果你即将去一家从事大型系统研发的公司进行Java面试,不可避免的会有多线程相关的问题.下面是一些针对初学者或者新手的问题,如果你已经具备良好的基础,那么你可以跳过本文,直接尝试针对进阶水平的Java ...

  6. js如何下载后台传过来的base64文件

    一.<a>标签的作用 相信大部分人都知道<a>链接再简单不过了,跳转嘛,跳转到另外一个页面,这谁不知道. 当然这这是一部分, <a> 标签定义超链接,用于从一个页面 ...

  7. 逆元(inv)

    推荐博客 : http://blog.csdn.net/baidu_35643793/article/details/75268911 通常我们在计算除法取模时,并不能直接的取模后再去相除,答案会有问 ...

  8. Docker学习(十)Docker容器编排 Docker-compose

    Docker学习(十)Docker容器编排 Docker-compose 标签(空格分隔): docker 容器编排是什么 应用一般由单独容器化的组件组成,须按照一定顺序在网络级别进行组织,以使其能够 ...

  9. Kaggle竞赛丨入门手写数字识别之KNN、CNN、降维

    引言 这段时间来,看了西瓜书.蓝皮书,各种机器学习算法都有所了解,但在实践方面却缺乏相应的锻炼.于是我决定通过Kaggle这个平台来提升一下自己的应用能力,培养自己的数据分析能力. 我个人的计划是先从 ...

  10. MTV

    M:模型 models.py T:模板 html C:控制 urls.py 和 views.py 与MVC类似