网站首页 > java教程 正文
(1)对资源的close()建议分开操作
意思是,比如我有这么一段代码:
try{ XXX.close(); YYY.close(); }catch (Exception e) { ... }建议修改为:
try{ XXX.close(); }catch (Exception e) { ... }try{ YYY.close(); }catch (Exception e) { ... } 虽然有些麻烦,却能避免资源泄露。我们想,如果没有修改过的代码,万一XXX.close()抛异常了,那么就进入了catch块中了,YYY.close()不会执行,YYY这块资源就不会回收了,一直占用着,这样的代码一多,是可能引起资源句柄泄露的。而改为下面的写法之后,就保证了无论如何XXX和YYY都会被close掉
(2)字符串变量和字符串常量equals的时候将字符串常量写在前面
这是一个比较常见的小技巧了,如果有以下代码:
String str = "123";if (str.equals("123")){ ...}
建议修改为:
String str = "123";if ("123".equals(str)){ ...}
这么做主要是可以避免空指针异常
(3)使用带缓冲的输入输出流进行IO操作
带缓冲的输入输出流,即BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,这可以极大地提升IO效率
(4)循环内不要不断创建对象引用
例如:
for (int i = 1; i <= count; i++){ Object obj = new Object(); }
这种做法会导致内存中有count份Object对象引用存在,count很大的话,就耗费内存了,建议为改为:
Object obj = null;for (int i = 0; i <= count; i++) { obj = new Object(); }
这样的话,内存中只有一份Object对象引用,每次new Object()的时候,Object对象引用指向不同的Object罢了,但是内存中只有一份,这样就大大节省了内存空间了。
(5)所有重写的方法必须保留@Override注解
这么做有三个原因:
(1)清楚地可以知道这个方法由父类继承而来
(2)getObject()和get0bject()方法,前者第四个字母是"O",后者第四个子母是"0",加了@Override注解可以马上判断是否重写成功
(3)在抽象类中对方法签名进行修改,实现类会马上报出编译错误
(6)顺序插入和随机访问比较多的场景使用ArrayList,元素删除和中间插入比较多的场景使用LinkedList
这个,理解ArrayList和LinkedList的原理就知道了
(7)long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字1混淆,这个点非常细节,值得注意
(8)不要让public方法中有太多的形参
public方法即对外提供的方法,如果给这些方法太多形参的话主要有两点坏处:
违反了面向对象的编程思想,Java讲求一切都是对象,太多的形参,和面向对象的编程思想并不契合
参数太多势必导致方法调用的出错概率增加
至于这个"太多"指的是多少个,3、4个吧。比如我们用JDBC写一个insertStudentInfo方法,有10个学生信息字段要插如Student表中,可以把这10个参数封装在一个实体类中,作为insert方法的形参
(9)不捕获Java类库中定义的继承自RuntimeException的运行时异常类
异常处理效率低,RuntimeException的运行时异常类,其中绝大多数完全可以由程序员来规避,比如:
ArithmeticException可以通过判断除数是否为空来规避
NullPointerException可以通过判断对象是否为空来规避
IndexOutOfBoundsException可以通过判断数组/字符串长度来规避
ClassCastException可以通过instanceof关键字来规避
ConcurrentModificationException可以使用迭代器来规避
(10)将常量声明为static final,并以大写命名
这样在编译期间就可以把这些内容放入常量池中,避免运行期间计算生成常量的值。另外,将常量的名字以大写命名也可以方便区分出常量与变量
已完结专题(点击我的头像进入我的主页,关注后可查看置顶文章):
【mysql优化专题】【HTTP协议】
【架构技术专题】【多线程/池专题】
更新中专题(关注后查看):
【dubbo专题】【dubbo源码专题】
【JVM专题】【HTTP协议专题】
【设计模式专题】【高并发专题】
【架构技术专题】【netty专题】
【数据结构专题】【redis专题】
猜你喜欢
- 2024-09-12 忠贯日月《抗战英雄传》2021新春活动蓄势上线
- 2024-09-12 做Java开发一定会用到的8个主流工具,你都有了吗?
- 2024-09-12 java项目开发jsp编程软件师生与家长交流论坛myeclipse开发sqlser
- 2024-09-12 SSM论坛博客系统java留言板贴吧jsp源代码mysql
- 2024-09-12 基于Javaee的影视创作论坛的设计与实现(java毕设)
- 2024-09-12 基于JAVA和Vue的宠物医院诊所商城论坛管理系统,附源码
- 2024-09-12 阿里巴巴程序员总结最全面的Java学习路线,没有比这更权威的了!
- 2024-09-12 基于SSM的bbs聊天论坛java jsp贴吧留言板聊天室mysql源代码
- 2024-09-12 「洞幺邦」基于Java Web技术的健身论坛系统设计与实现
- 2024-09-12 基于SSM的旅游论坛+vue(基于ssm的旅游网站)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)