记录代码编程中一些小技巧(不定期更新ing)
1.死循环结构体使用
一般编写死循环常用 while(true){},但是在阅读项目源码的时候,多数看到采用 for(;;){} 的形式。自己也查阅了
一些博客,有的人说C++这样写,汇编指令 for 循环确实比while指令更少,但是java反编译之后两种方式都是一样的
没有区别。所以,用何种方式更高效,就看自己的编码习惯了
具体分析参考博客:https://blog.csdn.net/Message_lx/article/details/81075688
2.方法参数规范(Map慎用)
在任何业务代码里,Map都尽量不要作为函数的入参跟返回值
原因: 我们一般都是希望程序员能知道这个方法到底应该传什么参数,但map通常会让调用方发生不必要的困扰:我传过去的map到底是什么?有多少KV,Key有没有限制等等。无疑给阅读增加了额外的负担
3.创建工具类Util须知
1.使用Final关键字声明最终类
原因:
当一个类被final修饰时,表名该类是不能被子类继承的。子类继承往往可以重写父类的方法和改变父类属性,会带来一定的安全隐患,因此,当一个类不希望被继承时就可以使用final修饰。
final修饰类 不能被继承,也没有子类。
【使用环境】:
1.不是专门为继承而设计的类,类的本身方法之间有复杂的调用关系。假如随意创建这些类的子类,子类可能会错误的修改父类的实现细节
2.出于安全原因,类的实现细节不允许有任何改动
3.在创建对象模型的时候,确信这个类不会再被扩展。如:
api中的java.lang.string类
public final class Stringextends Objectimplements Serializable, Comparable<String>, CharSequence
好处:
可以阻止你的客户集成你实现的类,当你修改自己的库时,不用担心打乱客户的codes
2.工具类不能被实例化
原因:
工具类是为了提供一些通用类的某一非业务领域内的公共方法,不需要配套的成员变量,仅仅是作为工具方法被使用。所以将它做成静态方法最合适,不需要实例化,能够获取到方法的定义并调用就行。
如果要实例化一个工具类,就需要一定的内存空间,工具类提供的是静态方法,通过类就能调用,所以不必浪费内存去实例化工具类对象。
那么如何让工具类不能被实例化呢?
让一个工具类不能被实例化的方法:使用私有构造器
public class A {
private classA(){}
}
由此想到让一个类不能被实例化应该怎么做?
使用私有构造器,在构造器中添加限制;
在使用私有构造器的基础下,再在构造方法中返回一个异常,因为虽然外部类无法实例化该类,但是内部类可以实例化该类。
如果只是通过私有化构造器,那么通过反射的方式,还是可以实例化该类。
必须在私有构造器中添加一个异常,这样,当执行构造方法的时候,就会抛出异常,从而停止实例化。
具体实现参考:如何让一个类不能被实例化