阿里巴巴java规约学习(综合)

1、避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。

理解:静态方法可以不通过创建对象,通过类来直接使用,这个提示主要是想避免,有时写代码不注意专门为了调这个静态方法,而创建一个该类的对象,比如工具类

2、所有的覆写方法,必须加@Override注解。

理解:实测IDEA提示很完整,不管是接口方法名改变或者变量类型改变,该接口实现类都会有相关报错的提示,主要还是规范代码

3、获取当前毫秒数System.currentTimeMillis(); 而不是new Date().getTime();

理解:其实创建Date时用的就是System.currentTimeMillis(),所以没有必要新创建Date对象来获取当前毫秒数

4、在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。 说明:不要在方法体内定义:Pattern pattern = Pattern.compile(规则);

理解:先来看解释

Pattern 类:pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

如果在方法体内定义Pattern pattern = Pattern.compile(规则);再来做匹配,那根据需求的不同,同一个正则需要创建的Pattern就会多,那么每次通过调用其公共的静态编译方法得到Pattern对象,效率就会变低,可以把Pattern用 static final修饰,作为类的静态常量,把这部分工作放到类初始化的时候,提高效率
 

反例一:

private void func(...) {
    if (Pattern.matches(regexRule, content)) {
        ...
    }
}

反例二:

private void func(...) {
    Pattern pattern = Pattern.compile(regexRule);
    Matcher m = pattern.matcher(content);
    if (m.matches()) {
        ...
    }

}
正例:
public static final Pattern pattern = Pattern.compile(regexRule);
private void func(...) {
    Matcher m= pattern.matcher(content);
    System.out.println(m.matches());
}

5、不能在finally块中使用return,finally块中的return返回后方法结束执行,不会再执行try块中的return语句

理由:转载其它人说的简单明了的理由

因为finally 块中的 return 返回后方法结束执行,不会再执行 try 块中的 return 语句。

也就是说try块中的return值会先保存起来,然后执行完finally中的代码后,才会把try块中的return值返回,所以finally中的代码逻辑是不会影响try块中的return值的。但如果在finally中使用return了就会导致try块中的代码得不到执行而无法返回正确的结果。
————————————————
原文链接:https://blog.csdn.net/baidu_31093133/article/details/100578678

综合给的一个小例子:按照如上原由,不加finally里头的return b;是应该输入b=20;b+=80;的结果也就是100,但是加了finally里头的return b;程序最后的结果就会是finally中b=200;

public class qq {
    public static void main(String[] args) {
        System.out.println(test1());
    }
    public static int test1() {
        int b = 20;
        try {
            System.out.println("try block");

            return b += 80;
        }
        catch (Exception e) {

            System.out.println("catch block");
        }
        finally {
            b = 200;
            System.out.println("finally block");
            if (b > 25) {
                System.out.println("b>25, b = " + b);
            }
            return b;
        }
    }
}

6、集合初始化时,指定集合初始值大小

HashMap使用HashMap(int initialCapacity) 初始化,

initialCapacity =(需要存储的元素个数 / 负载因子) + 1。 注意 负载因子(即loader factor 默认为 0.75,如果 暂时无法 确定 初始值大小,请设置为 16(即默认值)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值