首页 > 其他 > 详细

4,5,6条解析

时间:2021-02-21 23:57:51      阅读:33      评论:0      收藏:0      [点我收藏+]

通过私有构造器增强不可实例化的类的安全

经常需要定义一些工具类或常量类,类中仅包含静态方法和静态变量,是不希望该类被实例化的,那么可以考虑私有化其构造方法,避免反射调用,在私有化的构造方法中抛出异常。

这种类的存在并没有任何问题,但却因为使用者很多时候也会使用到如new XXX().test()的方式使用某个功能,所以在使用工具类时,常常会因为混淆将不需要实例化的工具类实例化之后再进行使用。

当然如果你的项目中使用了lombok,你也可以这么写,虽然并不推荐:

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class Demo {

	...
	
}

缺点:子类也会无法实例化

优先考虑使用依赖注入来引用资源

更加的灵活,解耦代码,当你传入的实现类是什么,就会使用什么。
spring的一个重要功能就是依赖注入。

要注意的是,我们通常代码中定义的类都会包含在spring的扫描目录下,如果不在此列的类,最好在BeanConfig文件中生成一个,提供给其他类注入,而非在某些类中去new
。前提这个类可以作为一个单例类。

避免创建不必要的对象

这一点通常可以和依赖注入一起使用,可以实现共享一些对象实例(不具有状态的)

重点注意3,4,5即可

1.无意义的创建新对象

String s = new String("hello world");

2.未使用现成的对象

//注意即可  也很少有人这样写
String s = "xxx";
Boolean flag = new Boolean(s);

3.隐蔽的对象创建

public static boolean matches(String s) {
	return s.matches("^规则$");
}

public static boolean matches(String regex, CharSequence input) {
	// 会new出一个Pattern
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(input);
    return m.matches();
}
//优化成
private static final Pattern PATTERN = Pattern.compile("^规则$");

public static boolean matches(String s) {
	return PATTERN.matcher(s).matches();
}

4.自动拆装箱

//要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。
public static long sum() {
	Long sum = 0L;
	for(long i = 0; i < Integer.MAX_VALUE; i++){
		sum += i;
	}
	return sum;
}

5.对象池
如果是像数据库链接池这种创建实例有高昂代价的,一般不需要维护自己的对象池。有2个缺点

1.会弄脏代码

2.会增加内存占用,降低性能,当然性能这里是相对而言,可能没有jvm自动回收的性能高。

4,5,6条解析

原文:https://www.cnblogs.com/kunkka-0717/p/14426502.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!