代码怎么用(帮你规范代码)
一、IDEA如何安装阿里巴巴代码规范插件
1. 启动IDEA >> File >> Settings >> Plugins,搜索Alibaba Java Code Guidelines(阿里巴巴Java代码指南)插件,点击Install进行安装 。
文章插图
2. 安装好重启IDEA,之后生效 。需要注意的是插件基于JDK1.7打包,如果IDEA启动时使用的JDK版本是1.6的话就会报Unsupported.major.minor version 51.0异常,所以建议大家升级一下 。
文章插图
3. IDEA重启之后点击工程右键,或者使用默认快捷键Ctrl+Shift+Alt+J来扫描你的工程吧 。看看你的代码有多少不规范的地方呢 。
文章插图
4. 也可以点击具体的某个类右键进行扫描 。
文章插图
5. 扫描整个工程,将不符合规约的代码按 Blocker、Critical、Major三个等级显示,右侧窗口还有针对代码的批量修复功能 。
文章插图
6. 实时检测功能,在开发时,对当前文件实时进行检测,并高亮显示出来,同时也给出修改提示 。可以说是非常好用了 。
文章插图
7. 关闭实时检测功能
如果你正在阅读一些代码,恰巧代码又没有按照阿里代码规范写,此时屏幕上都是一些红色、黄色的警告,严重影响阅读 。这个时候可以右击工程点击关闭实时检测的功能 。
文章插图
8. 或许阿里条约有些并不适合自己团队的开发要求,这也不需要担心,因为也可以单独的关闭某条规则 。或者是修改其提示的级别 。是不是很人性化呀 。
File>>Settings >>Editor >> Inspections
文章插图
二、修改不规范代码
扫描完整个工程之后发现有很多不符合规范的代码,小编就挑一些跟大家一起修改吧 。
1. 不允许出现任何魔法值(即未经定义的常量)直接出现在代码中 。所谓的魔法值就是,未经定义的常量字面量,所有在代码中使用的常量必须预先经过定义 。
反例:
if (key.equals("zhangSan")) {
//...
}
建议改为:String KEY_PRE = "zhangSan";
if(KEY_PRE.equals(key)){
//...
}
2.Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals 。(是不是有的小伙伴没有注意过这个问题?)反例:
public void f(String str) {
String inner = "hi";
if (str.equals(inner)) {
System.out.println("hello world");
}
}
建议改为:public void f(String str) {
String inner = "hi";
if (inner.equals(str)) {
System.out.println("hello world");
}
}
3.所有的覆写方法,必须加@Override注解 。其实Override注解的本身并没有什么作用,但是它可以告诉代码的读者,这个是覆盖父类的方法 。如果方法名、参数、异常定义错误,导致不能正确覆盖父类的方法,编译器会提示错误 。比如getObject与get0bject的问题 。一个是字母的O,一个是数字的0,加@Override可以准确判断是否覆盖成功 。所以在意细节还是很重要的 。
【帮你规范代码 代码怎么用】4. 事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务 。反例 (注解【Transactional】需要设置rollbackFor属性 。):
@Service
@Transactional
public class MechanicalInformationService {
}
建议改为:例子一:
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
@Override
public void save(User user) {
}
}
例子二:@Service
public class UserServiceImpl implements UserService {
@Override
@Transactional(rollbackFor = Exception.class)
public void save(User user) {
}
}
例子三:@Service
public class UserServiceImpl implements UserService {
@Autowired
private DataSourceTransactionManager transactionManager;
@Override
@Transactional
public void save(User user) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition;
def.setName("SomeTxName");
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = transactionManager.getTransaction(def);
try {
} catch (Exception ex) {
transactionManager.rollback(status);
throw ex;
}
}
}
5. 循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展 。说明:反编译出的字节码文件显示每次循环都会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象,造成内存资源浪费 。(这一点是需要十分注意的,看完之后不要再用 + 连接字符串了哦)
反例:
String result;
for(String string:tagNameList){
result=result+string;
}
建议改为:StringBuilder stringBuilder = new StringBuilder;
for(String string:tagNameList){
stringBuilder.append(string);
}
String result=stringBuilder.toString;
6. 除常用方法(如getXxx/isXxx)等外,不要在条件判断中执行复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量,以提高可读性 。说明:很多if语句内的逻辑相当复杂,阅读者需要分析条件表达式的最终结果,才能明确什么样的条件执行什么样的语句,那么,如果阅读者分析逻辑表达式错误呢? 反例:
if((file.open(fileName,"w")!=)&&(...)||(...)){
// ...
}
建议改为:boolean existed=(file.open(fileName,"w")!=)&&(...)||(...);
if(existed){
//...
}
7. 集合初始化时,指定集合初始值大小 。说明:HashMap使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可 。反例:
Map map = new HashMap;
建议改为:Map map = new HashMap(16);
- 虚伪的反义词是什么,常见的反义词汇总可以帮你忙
- xlsx文件怎么打开?3种简单方法帮你快速的打开xlsx文件
- 代码怎么用?js代码怎么用
- 散户买ETF最大的缺点,创业板etf代码是多少
- 公共服务设施规划标准 城市公共设施规划规范
- 书的组词有哪些
- 如何瘦腰?分享5个好方法,能帮你平腹瘦腰
- 华为云|软件项目管理 6.1.代码行估算法
- 程序员|开源是好事,但垃圾开源代码正在毁了这个行业
- 海尔滚筒洗衣机常见故障代码盘点