看了不后悔的java编程习惯
来源:互联网 发布:unity3d 软体材质 编辑:程序博客网 时间:2024/05/17 02:41
1、恰当的异常处理(注意避免NullPointException,null值和数组越界等问题)
NullPointException
NullPointException是java编程中导致闪退的大明星,出现NullPointException的大部分原因是编写程序的过程中对一个变量的值得把握不准,程序员本以为已经对某个变量赋值了,就直接去使用它,但是很多情况下,都是赋了null值,然后去使用,我们无法避免赋null值,因为运行时有很多值我们无法把控,但是要多赋null值进行容错处理,也就是在使用之前判断该变量是否为null。那关键的问题就转移到了我们如何知道正在使用的变量会不会为null,因为程序员已经赋值了,正确的思路就是:(1)有避免使用null值的意识,在使用一个变量之前认真检查一下你的这儿变量是否会出现null的情况;(2)了解null值可能出现的场景;(3)只要有可能出现使用前为null,那就要对这个变量进行一个判断null值得if语句去避免使用null值。下面就第(2)进行我个人的一个总结说明,如果其他博友有补充的,欢迎指正,大家一同进步。
可能出现null的情形:
(1)未初始化就调用(这个最容易发现)
(2)数据从外部(网络,文件,数据库)获取时,不判断就直接使用
(3)引入外部包出现NullPointerException,
随着各种框架的发展而越来越常见,当代的程序员越来越懒。主要是人们盲目引用各种包,而不去详细评估引用包的效果,及不去了解所引入包的依赖包。
(4)异常处理不当导致的null值
在这里列举一个例子:处理IO异常时可能出现的不恰当的异常处理,直接贴上两段源代码,一目了然
不恰当的处理:
FileReader reader = null; try { reader = new FileReader("a.txt"); int readByte = 0; while ((readByte = reader.read()) != -1) { System.out.print((char) readByte); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }恰当的处理:
FileReader reader = null; try { reader = new FileReader("a.txt"); int readByte = 0; while ((readByte = reader.read()) != -1) { System.out.print((char) readByte); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (reader != null) {//关键性的区别所在 reader.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
(5)注意一点,千万不要使用
try{ ...}catch(NullPointException e){ ...}
去捕获异常,因为一旦出现这个异常,捕捉不了日志,不利于从根源解决问题,而且很难查出来bug所在。
常见的NullPointException例子和解决方法
(1)List list = 通过后台数据库返回List信息 为null接收后习惯性for循环遍历
for(int i=0;i<list.size();i++){}报错,出现NullPointerException异常;
避免方法:在遍历list之前一般都会加上
If(list!=null&&list.size()>0){...}
两个条件前后不能调换,因为程序是优先从左边开始执行的。
然后直接输出S.toString();又或是调用其方法或者属性。报错,出现NullPointerException异常;
解决方法:首先判断对象是否为空,如果为空初始化其实力对象;
(3)在比对String的时候:
str.equals("test")
当str值为Null时报错,出现NullPointerException异常;
避免方法:一律习惯的写成"test".equals(str);
(4)函数尽量不要返回null,而是反悔一个空的对象:
Collections辅助类中有静态的EMPTY_LIST
EMPTY_SET
EMPTY_MAP
,可以方便的使用它们
public List<Integer> f() { try { // ... return result; } catch (SomeException e) { e.printStackTrace(); return Collections.EMPTY_LIST; }}
数组长度的问题(长度为0时尤其注意)
File path = new File(...);String [] paths = path.list();if(paths.length==0){...}else{...}对于不同长度的paths数组,需要做不同的处理,否则有可能造成不必要的消耗内存的操作
2、释放资源的习惯
(持续总结中...)
3、
4、不要把不相关的事物耦合在一起
“单一职责”这点很关键,不需要耦合在一起的东西就不要耦合在一起。
- 看了不后悔的java编程习惯
- 看了不后悔,学习编程的八个建议
- java讲义,看了不后悔
- 看了让你终身不后悔的四个故事
- 四个让你看了不后悔的故事
- 看了让你终生不后悔的四个故事
- 有趣的前端题目,看了不后悔
- 一个程序猿的内心独白,看了不后悔
- 【寓意】看了让你终身不后悔的四个人生故事 (转)
- 【寓意】看了让你终身不后悔的四个人生故事 (转)
- 看了让你终生不后悔的四个人生故事
- 看了让你终身不后悔的四个人生故事
- 看了让你终身不后悔的四个人生故事
- 强烈推荐的技术网站推荐——看了才不后悔
- 强烈推荐的技术网站推荐——看了才不后悔
- 强烈推荐的技术网站推荐——看了才不后悔
- 看了不会后悔
- 看了后悔!
- Android开发:Parallax效果的ScrollerView,改编自ParallaxListView
- 深入浅出Java三大框架SSH与MVC的设计模式
- 自定义ListView盘点-android-pulltorefresh(1)
- Linux 下安装 Mongodb
- android 静默安装、卸载实现
- 看了不后悔的java编程习惯
- 自定义ListView盘点-android-Ultra-Pull-to-Refresh(2)
- Layout_margn与padding的区别
- 【BZOJ3503】【Cqoi2014】和谐矩阵 高斯消元,解异或方程组
- fetched-property in core-data?
- PL/SQL Developer 使用技巧
- 自定义ListView盘点-DropDownListView(3)
- 面向对象第九课,面向对象三大基本特征,继承,Object用法,toString和equals方法
- 深入ASM原理