一些最佳实践

1. 接口参数进行验证

	public void test(String s){
		if(s == null){
			throw new NullPointerException();
		}
	}

2. 保护性拷贝

避免因为测试外参数变更对方法造成影响:如下

Date start = new Date(2014, 2, 2);
		Date end = new Date(2014, 3, 1);
		test(start, end);
		end.setMonth(1);

可以这样来实现方法解决这个问题:

	public void test(Date start, Date end){
		Date s = new Date(start.getTime());
		Date e = new Date(end.getTime());
	}

以及对get方法中的返回值使用clone或者new新对象等

3. 返回空的数组或者集合而不是null

4. 局部变量作用于最小化

防止拷贝错误,更好的垃圾回收

List<String> list = new ArrayList<String>();
		// 用for代替下面的while
		for (Iterator<String> i = list.iterator(); i.hasNext();) {

		}

		Iterator<String> i1 = list.iterator();
		while(i1.hasNext()){

		}

5. 尽量使用基本类型,只有在作为key,或者是必须用封装类型的地方采用

		Integer i = null;
		Integer i2 = new Integer(1);
		Integer i3 = new Integer(1);
		System.out.println(i2 == i3);
		System.out.println(i == 0);

出了性能上的损耗外,上面的代码还容易造成错误。

6. 对于可恢复的情况适用受检异常,对于编程错误适用运行时异常

7. 可以适用it.hasNext()这样的状态检测方式或者是返回状态码的方式来减少运行时异常

8. 一些常用的标准异常

IllegalArgumentException   参数不合适的异常

IllegalStateException 调用方法是对象的状态不正确,比如没有这个对象没有初始化

NullPointerException

IndexOutOfBoundsException

UnsupportedOperationException 对象不支持用户请求的方法

ArithmeticException  数学计算的时候出现错误,比如除0了

NumberFormatException 数字格式错误

9. 序列化要加上UID,并且记得在需要的时候修改它,如果不加的话JVM会根据类信息自动算出UID,有可能在很小的变动之后就造成接口不兼容。

10. 序列化有可能被攻击,比如别人直接生成了一个二进制文件,然后被读入就可以进行攻击。为了防止这种攻击,可以使用readObject方法,进行简单的参数验证

时间: 2024-08-07 02:02:20

一些最佳实践的相关文章

经典网络迁移VPC最佳实践

摘要:阿里云起步于经典网络,但已经全面转向VPC.专有网络VPC以其在安全.成本和网络功能方面的优势,正受到越来越多用户的欢迎.在9月6日技术直播中,阿里云高级产品专家谭礼铨(李泉)为大家分享了经典网络迁移VPC最佳实践,本次分享介绍三种将ECS从经典网络迁移至VPC网络的途径,并阐述三种类型的迁移分别适合怎样的客户需求和场景. 直播回顾视频地址:https://yq.aliyun.com/webinar/play/287 9月21日,2017阿里云网络技术高峰论坛将独家线上直播,欢迎预约:ht

DMS前后端技术揭秘及最佳实践

不同于一般的存储和计算产品,云上DMS上属于操作类产品,目的是为用户提供更高更强的数据库访问能力,减少成本以提高效率.本文中,来自阿里巴巴数据库事业部的钟隐分享<DMS前后端技术揭秘及最佳实践>,介绍云上DMS,即数据库管理服务的整体应用和实践. DMS最佳实践 云上DMS从2013年年底上线,从最初仅支持MySQL基本功能,已覆盖了多种RDBMS.NoSQL及部分分析型数据库在内的13种数据源,同时在多种数据库中逐步提供了传统数据库软件所不具有的专业功能,时间有限,我们仅列举4个不同角度的最

PostgreSQL 助力企业打开时空之门 - 阿里云(RDS、HybridDB) for PostgreSQL最佳实践

标签 PostgreSQL , Greenplum , 时间 , 空间 , 对象 , 多维透视 , 多维分析 背景 时空数据无处不在,未来空间数据的占比会越来越高,在TP与AP场景的需求也会越来越旺盛. 选址.网格运营 空间数据自动聚集分析:时间+多边形圈人:驻留时间分析:舆情分析:... 室内定位 3D坐标:相对坐标系:+以上:运营活动效果分析报表: 科研 太空探索.测绘.气象.地震预测.溯源 无人驾驶 点云:动态路径规划: 空间调度(菜鸟.饿了么.滴滴.高德.快递...) 实时位置更新:多边

python编码最佳实践之总结

该文章转自阿里巴巴技术协会(ATA) 作者:空溟    相信用python的同学不少,本人也一直对python情有独钟,毫无疑问python作为一门解释性动态语言没有那些编译型语言高效,但是python简洁.易读以及可扩展性等特性使得它大受青睐.      工作中很多同事都在用python,但往往很少有人关注它的性能和惯用法,一般都是现学现用,毕竟python不是我们的主要语言,我们一般只是使用它来做一些系统管理的工作.但是我们为什么不做的更好呢?python zen中有这样一句:There s

PgSQL · 最佳实践 · 双十一数据运营平台订单Feed数据洪流实时分析方案

摘要 2017年的双十一又一次刷新了记录,交易创建峰值32.5万笔/秒.支付峰值25.6万笔/秒.而这样的交易和支付等记录,都会形成实时订单Feed数据流,汇入数据运营平台的主动服务系统中去. 数据运营平台的主动服务,根据这些合并后的数据,实时的进行分析,进行实时的舆情展示,实时的找出需要主动服务的对象等,实现一个智能化的服务运营平台. 通过阿里云RDS PostgreSQL和HybridDB for PGSQL实时分析方案: - 承受住了几十万笔/s的写入吞吐并做数据清洗,是交易的数倍 - 实

使用Flash Lite将Flash动画移植到移动电话的最佳实践

flash动画 去年 11 月我参加了在新奥尔良举行的 Macromedia MAX 大会,当我回到家时,我感到精疲力尽.我了解到很多关于 Macromedia 在集成 Flash 技术到移动设备方面的进展,这种集成能够带给移动用户丰富而且具有吸引力的体验,并且与浏览器上的体验同样令人印象深刻和可个性化.我第一次在移动电话上看到了真正令人印象深刻的内容,这些内容给电话本身也添彩不少.在大会上,Macromedia 还公布了第一届 Flash Lite 内容大赛. 在回家的路上,我开始考虑我们 S

德歌:阿里云RDS PG最佳实践

直播视频: (点击图片查看视频) 幻灯片下载地址:https://oss-cn-hangzhou.aliyuncs.com/yqfiles/1138a8a3aff5f63b426162e265d98375.pdf 上云实践 在上云之前,首先需要评估RDS的规格,这是因为线下使用的硬件可能与线上的硬件不能一一对应,并且线上的RDS可能还做了一定的优化.在评估RDS规格的时候,需要考虑以下几个方面: 可用区:  尽量与应用服务器在同一可用区:  否则只能通过公网地址访问. 数据库版本:根据业务需求选

ASP.NET 跨平台最佳实践

前言 八年的坚持敌不过领导的固执,最终还是不得不阔别已经成为我第二语言的C#,转战Java阵营.有过短暂的失落和迷茫,但技术转型真的没有想象中那么难.回头审视,其实单从语言本身来看,C#确实比Java更优秀(并非C#天生丽质,而是它站在了巨人的肩膀上). 本文并非为.NET正名而来,而仅仅是分享作者近几年在ASP.NET跨平台方面的研究与实践经验,算是对八年的.NET之路作一个阶段性的总结. .NET技术自诞生以来,便一直因其跨平台能力差而广受诟病.这里面有微软有意为之,也有别有用心之人在混淆视

ajax返回多个值:5个Ajax最佳实践

导读:通过对5个最佳实践的学习,开发人员可将其应用到日常的Asynchronous JavaScript + XML( Ajax )开发工作中.文章包括了数据格式.错误处理.以及一些采用Ajax的Rich Internet Applications(RIAs)开发工具.掌握这些最佳实践,有助于开发人员编写更加高效且健壮的Ajax代码.本文所介绍的5个最佳实践,可以应用到Web应用程序Ajax开发工作中:一.最小化调用二.让数据变小三.预加载组件四.轻松实现错误处理五.使用现有工具这些最佳实践,有

J2EE架构学习者的6个最佳实践

j2ee|架构 虽然许多文章曾经讨论过J2EE最佳实践.那么,为什么我还要再写一篇文章呢?本文究竟与以前的文章有何不同或者说比其他文章好在哪呢? 首先,本文的目标读者是正在从事技术工作的架构师.为了避免浪费大家的才智,我会避免讲述一些陈腐的最佳实践,例如"日常构建(build daily)"."测试一切(test everything)"和"经常集成( integrate often). 任何具有称职架构师的项目都有分工明确的.定义良好的团队结构.他们还为