java中insteadof_Java代码规范小结(一)

格式:问题名字+问题出现的次数

资源未关闭,打开发现有两处用到的IO流没有关闭

if/else判断里出现了重复判断,比如在if(a>10)的执行体里面又判断if(a<0),而后者肯定不会是true

处理异常的时候应该保留原始的异常情况,不要直接来个catch(Exception e)了事

不应该直接调用e.printStackTrace(),而是用Loggers来处理(就是打Log)。

Loggers的优势是:Users are able to easily retrieve the logs.

The format of log messages is uniform and allow users to browse the logs easily.

不要用实例方法改变静态成员,理想情况下,静态变量只通过同步的静态方法来改变

公共静态成员应该加上final,也就是public static final 一般不分家

不应该直接调用Thread和Runnaale对象的run方法,直接调用run会使得run方法执行在当前线程,失去了开启新线程的意义。但有时候可能会这样做,下面有个例子。

不太理解,大意是说不要直接抛Error,RuntimeException/Throwable/Exception这样的通用的异常。我的具体应用是:throw new Error("Error copying database"),给出的建议是:Define and throw a dedicated exception instead of using a generic one(定义并抛出一个专用的异常来代替一个通用的异常)

类变量不要设置为public,而是设为private,再提供get和set方法。

不要再注释中出现大量的代码段,会使代码可读性变差

这个没理解,包的声明应该与源文件目录匹配。

工具类不应该有公共的构造器,也就是说至少要有一个private的构造器,如果没有,默认的构造器是public的。

在定义集合的时候,等号右边的<>内不需要再写上元素类型,直接空着就行。

Lambdas表达式和匿名内部类不要写太多行,一般最多写20行。

只包含一个方法的匿名内部类应该写成Lambdas表达式的形式,增强代码可读性

用Try-with-resources的形式取代try/catch/finally的形式,这个有待于以后学习。

不要写空方法,除非这种情况:An abstract class may have empty methods, in order to provide default implementations for child classes.

源文件中不要出现任何重复的代码段或行或字符串等。没理解。

"switch case"每个case里面的代码不要太长,太长的话可以考虑写个方法代替,主要是为了增强代码可读性

嵌套代码块不要是空的,比如 if( a > 0 ) {  doSomething()  } else { },这时候应该把后面的else{}去掉。

方法不要太复杂,否则难以理解和维护。

没有使用的private的成员变量应该移除掉。

没有用到的本地变量或其他死存储应该移除掉,也就是写方法的时候,定义的变量如果后来发现根本用不到,要记得删掉那行代码。

switch语句应该以default结束,这是一种defensive programming思想

没有用到的方法参数应该移除掉

if /for/while/try这样的嵌套不要太复杂

没有意义的括号不要随便加,以免造成误解,比如"="两边对象类型是相同的,就不要强转。

for循环的结果条件不能是变量,而应该是常量

static成员是与类、静态方法相联系的。

具体参考下面的18,我还没理解

不要使用 4+" "这样的方式将int值转变为字符串,而是使用 Integer.toString(4)这样的方式。

就像Integer.parseInt("我是字符串")这样,不要偷懒。

不要写空类

没有用到的本地变量要删掉

直接看英文更直接:When only the keys from a map are needed in a loop, iterating the keySet makes sense. But when both the key and the value are needed, it's more efficient to iterate theentrySet, which will give access to both the key and value, instead.

也就是说,如果只需要Map的Key,那么直接iterate这个Map的keySet就可以了,但是如果Key和value都需要,就iterate这个Map。具体看下面的19.

方法参数/捕获的异常/foreach的变量不应该被重新赋值。

当判断集合是否为空的时候,不要使用if (myCollection.size() == 0) 这样的方式,而是使用if (myCollection.isEmpty()这样的方式,后者性能更高。

标准输出不直接打印任何东西,也就是打log的时候,不要使用System.out.println("My Message")这样的方式,而是使用logger.log("My Message")这种方式。

通配符不应该出现在返回声明中。比如这句:List extends Animal>getAnimals(){...}, 我们无法知道“是否可以把a Dog, a Cat 等加进去”,等之后用到这个方法的时候,我们没必要去考虑这种问题(前面引号里面的)。

不要使用同步的Vector/HashTable/Stack/StringBuffer等。在早期,出于线程安全问题考虑,java API提供了这些类。但是同步会极大影响性能,即使是在同一个线程中使用他们。

通常可以这样取代:

ArrayList  or  LinkedList   instead of  Vector

Deque  instead of  Stack

HashMap  instead of  Hashtable

StringBuilder  instead of StringBuffer

尽量不要调用system.exit()方法。

本地变量如果赋值之后直接return了,那就直接return本地变量的赋值语句。

命名要规范

命名要规范

字符串不应该重复,如果多次用到同一字符串,建议将该字符串定义为字符串常量,再引用。

不要写if (  a > 4  ) {  return false  } else { return true }这样的代码,直接写return a > 4。

命名要规范

修饰符等要按约定俗成的顺序书写 ,例如,写成public static 而不是static public

与前面的一个问题类似,根据Oracle定义的Java代码规范中,不同代码的出现位置应该如下所示:

class and instance variables--Constructors--Methods

数组的括号要写在类型后面,而不是变量后面,例如 int[] a 而不是int a[]

不要在同一行定义多个变量

当至少有3种或者3种以上的情况时,才考虑用switch,否则用if/else的形式。

既然在子类中重写了父类的某个方法,那就再这个方法中做些与父类方法不同的事情,否则没必要重写。

不要把这样的代码写在同一行:if(someCondition)    doSomething();而是应该写成下面的形式

if(someCondition) {

doSomething()

}

命名要规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值