一、分析 

从Java 5开始引入静态导入语法(import static),其目的是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序。

但是,滥用静态导入会使程序更难阅读,更难维护。静态导入后,代码中就不用再写类名了,但是我们知道类是“一类事物的描述”,缺少了类名的修饰,静态属性和静态方法的表象意义就会被无限方法,这会让阅读者很难弄清楚其属性或方法代表何以,甚至是哪一个类的属性(方法)都要思考一番(当然,IDE友好提示功能另说),特别是在一个类中有多个静态导入语句时,若还是用*(星号)通配符,把一个类的所有静态元素都导入进来,那简直就是噩梦。

二、场景 

如此段代码:

import static java.lang.Math.PI; public  class MathUtils{ //计算圆面积 public static double calCircleArea(double r){ return PI * r * r; } //计算球面积 public static double calBallArea(double r){ return 4 * PI * r * r; }
} 

静态导入把Math类中的PI常量引入到本类中,这回是程序更简单,更容易阅读,只要看到PI就知道是圆周率,不用每次都要把类名写出来。

又如此段代码:

import static org.jnuit.Assert.*; public class DaoTest{ @Test public void testInsert(){ //断言 assertEquals("foo",foo); assertFalse(Boolean.FALSE); }
} 

我们从程序中很容易判断出assertEquals方法时用来判断两个值是否相等的,assertFalse方法则是断言表达式为假的。这就是具有明确、清晰表象意义的工具类,使用静态导入,减少代码量,提高代码可读性的好处。

但是,如此段代码:

import static java.lang.Double.*;
import static java.lang.Math.*;
import static java.lang.Integer.*;
import static java.text.NumberFormat.*; public class Client{ //输入半径和精度要求,计算面积 public static void main(String[] args){ double s = PI * parseDouble(args[0]); NumberFormat nf = getInstance(); nf.setMaxinumFractionDigits(parseInt(args[1])); formatMessage(nf.format(s)); } //格式化消息输出 public static void formatMessage(String s){ System.out.println("圆面积是:" + s); }
} 

就这么一段程序:常量PI,这个知道是圆周率;parseDouble方法可能是Double类的一个转换方法;getInstance方法时那个类的?Client本地类?NumberFormate类?这个方法和formatMessage方法没有任何区别—这代码太难阅读了,非机器不可阅读。

三、建议 

对于静态导入,一定要遵循两个规则:

1.不要使用*(星号)通配符,除非是导入静态常量(只包含常量的类或接口)。

2.方法名是具有明确、清晰表象意义的工具类。

提高你的Java代码质量吧:少用静态导入相关推荐

  1. 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式

    一.分析  字符串的操作,诸如追加.合并.替换.倒序.分隔等,都是在编码过程中经常用到的,而且Java也提供了append.replace.reverse.split等方法来完成这些操作,它们使用起来 ...

  2. 提高你的Java代码质量吧:如果有必要,使用变长数组吧

    一.分析  Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用中非常不方便. 二.场景  比如要对班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随时都有可能会有学生 ...

  3. 提高你的Java代码质量吧:使用valueof前必须进行校验

    一.分析 每个枚举都是java.lang.Enum的子类,都可以访问Enum类提供的方法,比如hashCode.name.valueOf等,其中valueOf方法会把一个String类型的名称转变成枚 ...

  4. 提高你的Java代码质量吧:不要随便设置随机种子

    一.分析 在加密.混淆数据等地方,我们经常期望获得一个唯一的.不可仿造的数字,以避免产生相同的业务数据造成混乱. 在Java项目中,通常是通过Math.random方法和Random类类获得随机数的. ...

  5. 提高你的Java代码质量吧:不要让类型默默转换

    一.分析  在Java运算中的类型转换,是先运算在进行类型转换的.具体场景如下. 二.场景  在如下程序中: public class Client{ public static final int ...

  6. 提高你的Java代码质量吧:让我们疑惑的字符串拼接方式的选择

    一.分析  对于一个字符串进行拼接有三种方法:加号.concat方法.及StringBuiler或StringBuffer. 1."+"方法拼接字符串  str += " ...

  7. 提高 Java 代码质量

    高质量代码中往往缺陷更少!确保高的 Java 代码质量有两个步骤:尽早并经常地编写各个层次的测试用例,以及持续的监测质量状况.那么我们又该如何实践呢?本专题汇集了大量来自代码质量专家们的专业经验.最佳 ...

  8. java 代码解析工具_改善 Java 代码质量的工具与方法

    原标题:改善 Java 代码质量的工具与方法 我们可能见过上面的有关代码质量的图片,究竟如何衡量一段代码好坏? 代码质量是什么?为什么它很重要? 作家通过他的著作来讲述了一个清晰的.令人信服的故事.他 ...

  9. 从 FingBugs的错误来看JAVA代码质量

    从 FingBugs的错误来看JAVA代码质量(一)http://scholers.iteye.com/blog/1107452 从 FingBugs的错误来看JAVA代码质量(二)http://sc ...

最新文章

  1. Android多进程引发的问题
  2. 11.2.0.2 asmcmd lsdg show incorrect diskgroup number
  3. div+css+theme
  4. equals方法变量和常量位置区别
  5. 第20讲:代理的基本原理和用法
  6. idea main和System快捷键
  7. vue学习(一)初步了解 vue实例
  8. 如何用Python画一只机器猫?| 原力计划
  9. c# 用BitArray来管理包含关系
  10. CentOS7下EasyDarwin的安装搭建
  11. 获取TrueType字体信息
  12. 如何定制下载SMAP产品
  13. greedy算法策略高效求解分数背包问题
  14. linux gpio口测试程序,gpio接口测试
  15. 互联网如何再定义古老的眼镜行业?
  16. 《Android深度探索卷一》读书笔记六
  17. 穷人实现阶级跨越有多难
  18. 微信小程序官方组件展示之基础内容icon源码
  19. FMDB iphone 数据库
  20. 行驶证识别/行驶证ocr识别了解详细信息

热门文章

  1. Wix 安装部署教程(十六) -- 自动生成多语言文件
  2. php PDO简介和操作
  3. 存储过程和SQL语句比较【转】
  4. 用一句SQL取出第 m 条到第 n 条记录的方法
  5. 腾讯工作心得:原型该画到什么程度?
  6. 元气森林唐彬森:十万块就能爆发团队创造力
  7. (十)Java B2B2C o2o多用户商城 springcloud架构- SSO单点登录之OAuth2.0登录认证(1)
  8. C/C++练习题(一)
  9. Kudu安装(官网推荐的步骤)(installing build Kudu from source)
  10. 个人的小项目mysql_mgr_test开放了