在使用长整型常量值时,后面需要添加 L,必须是大写的 L,不能是小写的 l,小写 l 容易跟数字 1 混淆而造成误解 。
反例:
long value = https://www.isolves.com/it/cxkf/yy/JAVA/2019-09-29/l;long max = Math.max(L, 5);复制代码正例:
long value = https://www.isolves.com/it/cxkf/yy/JAVA/2019-09-29/L;long max = Math.max(L, L);复制代码2.2.不要使用魔法值
当你编写一段代码时,使用魔法值可能看起来很明确,但在调试时它们却不显得那么明确了 。这就是为什么需要把魔法值定义为可读取常量的原因 。但是,-1、0 和 1 不被视为魔法值 。
反例:
for (int i = 0; i < 100; i++){ ...}if (a == 100) { ...}正例:
private static final int MAX_COUNT = 100;for (int i = 0; i < MAX_COUNT; i++){ ...}if (count == MAX_COUNT) { ...}2.3.不要使用集合实现来赋值静态成员变量
对于集合类型的静态成员变量,不要使用集合实现来赋值,应该使用静态代码块赋值 。
反例:
private static Map<String, Integer> map = new HashMap<String, Integer>() { { put("a", 1); put("b", 2); }};private static List<String> list = new ArrayList<String>() { { add("a"); add("b"); }};正例:
private static Map<String, Integer> map = new HashMap<>();static { map.put("a", 1); map.put("b", 2);};private static List<String> list = new ArrayList<>();static { list.add("a"); list.add("b");};2.4.建议使用 try-with-resources 语句
Java 7 中引入了 try-with-resources 语句,该语句能保证将相关资源关闭,优于原来的 try-catch-finally 语句,并且使程序代码更安全更简洁 。
反例:
private void handle(String fileName) { BufferedReader reader = null; try { String line; reader = new BufferedReader(new FileReader(fileName)); while ((line = reader.readLine()) != null) { ... } } catch (Exception e) { ... } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { ... } } }}正例:
private void handle(String fileName) { try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) { String line; while ((line = reader.readLine()) != null) { ... } } catch (Exception e) { ... }}2.5.删除未使用的私有方法和字段
删除未使用的私有方法和字段,使代码更简洁更易维护 。若有需要再使用,可以从历史提交中找回 。
反例:
public class DoubleDemo1 { private int unusedField = 100; private void unusedMethod() { ... } public int sum(int a, int b) { return a + b; }}正例:
public class DoubleDemo1 { public int sum(int a, int b) { return a + b; }}2.6.删除未使用的局部变量
删除未使用的局部变量,使代码更简洁更易维护 。
反例:
public int sum(int a, int b) { int c = 100; return a + b;}正例:
public int sum(int a, int b) { return a + b;}2.7.删除未使用的方法参数
未使用的方法参数具有误导性,删除未使用的方法参数,使代码更简洁更易维护 。但是,由于重写方法是基于父类或接口的方法定义,即便有未使用的方法参数,也是不能删除的 。
反例:
public int sum(int a, int b, int c) { return a + b;}正例:
public int sum(int a, int b) { return a + b;}2.8.删除表达式的多余括号
对应表达式中的多余括号,有人认为有助于代码阅读,也有人认为完全没有必要 。对于一个熟悉 Java 语法的人来说,表达式中的多余括号反而会让代码显得更繁琐 。
反例:
return (x);return (x + 2);int x = (y * 3) + 1;int m = (n * 4 + 2);复制代码正例:
return x;return x + 2;int x = y * 3 + 1;int m = n * 4 + 2;复制代码2.9.工具类应该屏蔽构造函数
工具类是一堆静态字段和函数的集合,不应该被实例化 。但是,Java 为每个没有明确定义构造函数的类添加了一个隐式公有构造函数 。所以,为了避免 java "小白"使用有误,应该显式定义私有构造函数来屏蔽这个隐式公有构造函数 。
反例:
public class MathUtils { public static final double PI = 3.1415926D; public static int sum(int a, int b) { return a + b; }}正例:
public class MathUtils { public static final double PI = 3.1415926D; private MathUtils() {} public static int sum(int a, int b) { return a + b; }}2.10.删除多余的异常捕获并抛出
用catch语句捕获异常后,什么也不进行处理,就让异常重新抛出,这跟不捕获异常的效果一样,可以删除这块代码或添加别的处理 。
反例:
private static String readFile(String fileName) throws IOException { try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) { String line; StringBuilder builder = new StringBuilder(); while ((line = reader.readLine()) != null) { builder.append(line); } return builder.toString(); } catch (Exception e) { throw e; }}
推荐阅读
- Java新手如何学习Spring、Struts、Hibernate三大框架?
- 如何快速上手CentOS8
- ps中如何制作影子呢
- 无线宽带路由器除了WiFi上网还能有什么用,如何正确设置DHCP服务
- 「译」 如何做到一秒渲染一个移动页面
- 如何处理人际关系
- 如何去除腋毛
- 如何画舞台妆
- 如何保存乌龙茶
- 什么是轻触开关 轻触开关如何选购
