Java开发一些小的思想与功能小记(二)
1.用if+return代替复杂的if...else(if+return)
public static void test1(String str) {
if ("1".equals(str)) {
System.out.println("输入的参数是1");
return;
}
if ("2".equals(str)) {
System.out.println("输入的参数是2");
return;
}
if ("3".equals(str)) {
System.out.println("输入的参数是3");
return;
}
System.out.println("你输入的不是123`````````");
// ...这里可以写不满足上述条件的处理
}
2.尽量减少对变量的重复计算(for循环的用法)
明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,包括创建栈帧、调用方法时保护现场、调用方法完毕时恢复现场等。所以例如下面的操作:
for (int i = 0; i < list.size(); i++)
{...}
建议替换为:
for (int i = 0, int length = list.size(); i < length; i++)
{...}
这样,在list.size()很大的时候,就减少了很多的消耗
补充:
用第一种方法时进行非空验证:
for (int i = 0; list!=null && i < list.size(); i++)
{...}
3.循环内不要不断创建对象引用
例如:
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罢了,但是内存中只有一份,这样就大大节省了内存空间了。
4、尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销
5.字符串变量和字符串常量equals的时候将字符串常量写在前面
String str = "123";
if ("123".equals(str))
{
...
}
这么做主要是可以避免空指针异常
推荐荐使用 java.util.Objects#equals(JDK7 引入的工具类),源码如下:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
6.任何数据在使用之前进行非空判断(包括对象,list)
List<Employeeexam> employeeInExams = exam.getEmployeeInExams();
List<Employeeexam> employeeOutExams = exam.getEmployeeOutExams();
boolean insertEmployeeResult = false;
int in_size, out_size;
in_size = employeeInExams != null ? employeeInExams.size() : 0;
out_size = employeeOutExams != null ? employeeOutExams.size() : 0;
Integer employeeNum = in_size + out_size;
7.if...else...语句用条件运算符
return examMapper.deleteByPrimaryKey(id) > 0 ? true : false;
result = examService.deleteExamById(examId) ? "删除成功!" : "删除失败!";
8.善于使用commons-io包和commons-lang包中的工具类
io包中FilenameUtils和IOUtils和FileUtils的使用
lang包中 StringUtils和NumberUtils的使用等。
9.线程休眠的另一种方法
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
10. 对一些properties配置文件,我们可以在SVN或者Git放一个其样本文件,具体的文件不添加到版本管理,这样不会造成开发小组的冲突。
比如:db.properties文件,我们创建一个db.sample.properties(类似于模板)文件并传到git,db.properties文件不添加索引即可。
11. request对象可以当前文件在服务器的完整路径
request.getRealPath("/")
结果:
E:\xiangmu\SessionTest\WebContent\
12. 所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。
说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在
IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行 判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑, 推荐使用 equals 方法进行判断。
13. null可以强转为其他类型
String str = (String) null;
等价于
String str = null;
类型强转对应的指令是checkcast类型检查,如果检查失败会抛出类型转换异常ClassCastException
checkcast指令实际上和INSTANCEOF指令是很像的,不同的是CHECKCAST如果失败,会抛出一个异常,INSTANCEOF是返回一个值。
例如:
package cn.qlq;
public class Client {
public static void main(String[] args) {
Object object = null;
String str = (String) object;
System.out.println(str instanceof String);
}
}
结果:
false
反编译查看字节码如下:
Compiled from "Client.java"
public class cn.qlq.Client {
public cn.qlq.Client();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."<init>":()V
4: return public static void main(java.lang.String[]);
Code:
0: aconst_null
1: astore_1
2: aload_1
3: checkcast #16 // class java/lang/String
6: astore_2
7: getstatic #18 // Field java/lang/System.out:Ljava/io/PrintStream;
10: aload_2
11: instanceof #16 // class java/lang/String
14: invokevirtual #24 // Method java/io/PrintStream.println:(Z)V
17: return
}
14 重构方法
有时候我们用了一个方法为两个参数,现在如果需要改造该方法传入3个参数。
private static void operate1(int i, int j) {
// do something with i, j
}
如果项目中太多地方用到两个参数的方法,如果直接改方法加入一个参数并不合适,可以重构一个方法,如下:将代码移到三个参数的,并在原来两个参数的方法中调用新方法,第三个参数传入null或者默认值。
private static void operate1(int i, int j) {
operate1(i, j, 0);
}
private static void operate1(int i, int j, int k) {
// do something with i, j
// do something with k
}
Java开发一些小的思想与功能小记(二)的更多相关文章
- 鸿蒙Java开发模式11:鸿蒙图片裁剪功能的实现
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 目录: 1. 鸿蒙版图片裁剪功能效果展示 2.Java代码实现 3.裁剪工具类实现 4.<鸿蒙Java开发模式>系 ...
- 01 java开发前小知识
1.常见的dos命令 盘符: 进入指定的盘符下. dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录 注意:rd不能删除非空的文件夹,而且只能用于删除文件夹. c ...
- Java开发人员必须掌握的Linux命令(二)
子曰:"工欲善其事,必先利其器." 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解让知识或者技术,让学习之旅充满乐趣,这就是写博文的初心. 本篇的旅 ...
- Java练习 SDUT-2733_小鑫の日常系列故事(二)——石头剪子布
小鑫の日常系列故事(二)--石头剪子布 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 小鑫在上幼儿园的时候,喜欢跟小伙 ...
- 「小程序JAVA实战」小程序的举报功能开发(68)
转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudeweixinapicaidancaozuo66-2/ 通过点击举报 ...
- 「小程序JAVA实战」小程序的关注功能(65)
转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeguanzhugongneng64/ 在个人页面,根据发布者个人和 ...
- Egret白鹭开发微信小游戏手机震动功能
最近一直在修改调整项目,没有接触新功能,今天终于有机会,去翻了微信API,发现手机震动的API,今天分享出来大家一起学习学习 对于震动,微信提供了两个API,分别是: wx.vibrateShort: ...
- Java开发学习(三十四)----Maven私服(二)本地仓库访问私服配置与私服资源上传下载
一.本地仓库访问私服配置 我们通过IDEA将开发的模块上传到私服,中间是要经过本地Maven的 本地Maven需要知道私服的访问地址以及私服访问的用户名和密码 私服中的仓库很多,Maven最终要把资源 ...
- Java开发人员必须掌握的Linux命令-学以致用(5)
================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...
随机推荐
- 【学习笔记】深入理解js原型和闭包(15)——闭包
前面提到的上下文环境和作用域的知识,除了了解这些知识之外,还是理解闭包的基础. 至于“闭包”这个词的概念的文字描述,确实不好解释,我看过很多遍,但是现在还是记不住. 但是你只需要知道应用的两种情况即可 ...
- ES6学习笔记(4)----正则的扩展
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 正则的扩展 ES6新增的正则表达式修饰符 u修饰符a.能够更准确地匹配unicode大于\uFF ...
- Java&Xml教程(十)XML作为属性文件使用
我们通常会将Java应用的配置参数保存在属性文件中,Java应用的属性文件可以是一个正常的基于key-value对,以properties为扩展名的文件,也可以是XML文件. 在本案例中,將会向大家介 ...
- pandas DataFrame 警告(SettingWithCopyWarning)
转自:https://www.cnblogs.com/pig-fly/p/7875472.html 刚接触python不久,编程也是三脚猫,所以对常用的这几个工具还没有一个好的使用习惯,毕竟程序语言是 ...
- JavaScript-基础类型和运算符
JavaScript-基础类型和运算符 P02.稍微了解 1.js代码需要编写到script标签中 <script type="text/javascript"> 此处 ...
- Python 循环结构语句
1.for循环:计次循环 2.while循环:条件循环 3.嵌套循环 4.跳转语句 一.for循环的使用 1.进行数值循环 利用数值循环输出三次‘你好’: >>> for i in ...
- Python3基础教程(二十)—— flask介绍
基本概念 什么是Flask? Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序.这个 web 应用程序可以是一些 web 页面.博客.w ...
- k8s集群之master节点部署
apiserver的部署 api-server的部署脚本 [root@mast-1 k8s]# cat apiserver.sh #!/bin/bash MASTER_ADDRESS=$1 主节点IP ...
- v8引擎详解
引用网址: https://blog.csdn.net/swimming_in_it_/article/details/78869549 前言 JavaScript绝对是最火的编程语言之一,一直具有很 ...
- MessageBox的使用
一 函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口 ...