1.用if+return代替复杂的if...else(if+return)

  1. public static void test1(String str) {
  2. if ("1".equals(str)) {
  3. System.out.println("输入的参数是1");
  4. return;
  5. }
  6. if ("2".equals(str)) {
  7. System.out.println("输入的参数是2");
  8. return;
  9. }
  10. if ("3".equals(str)) {
  11. System.out.println("输入的参数是3");
  12. return;
  13. }
  14. System.out.println("你输入的不是123`````````");
  15. // ...这里可以写不满足上述条件的处理
  16. }

2.尽量减少对变量的重复计算(for循环的用法)

明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,包括创建栈帧、调用方法时保护现场、调用方法完毕时恢复现场等。所以例如下面的操作:

  1. for (int i = 0; i < list.size(); i++)
  2.  
  3. {...}

建议替换为:

  1. for (int i = 0, int length = list.size(); i < length; i++)
  2.  
  3. {...}

这样,在list.size()很大的时候,就减少了很多的消耗

补充:

用第一种方法时进行非空验证:

  1. for (int i = 0; list!=null && i < list.size(); i++)
  2.  
  3. {...}

3.循环内不要不断创建对象引用

例如:

  1. for (int i = 1; i <= count; i++)
  2.  
  3. {
  4.  
  5. Object obj = new Object();
  6.  
  7. }

这种做法会导致内存中有count份Object对象引用存在,count很大的话,就耗费内存了,建议为改为:

  1. Object obj = null;
  2.  
  3. for (int i = 0; i <= count; i++)
  4.  
  5. {
  6.  
  7. obj = new Object();
  8.  
  9. }

这样的话,内存中只有一份Object对象引用,每次new Object()的时候,Object对象引用指向不同的Object罢了,但是内存中只有一份,这样就大大节省了内存空间了。

4、尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销

5.字符串变量和字符串常量equals的时候将字符串常量写在前面

  1. String str = "123";
  2.  
  3. if ("123".equals(str))
  4.  
  5. {
  6.  
  7. ...
  8.  
  9. }

这么做主要是可以避免空指针异常

推荐荐使用 java.util.Objects#equals(JDK7 引入的工具类),源码如下:

  1. public static boolean equals(Object a, Object b) {
  2. return (a == b) || (a != null && a.equals(b));
  3. }

6.任何数据在使用之前进行非空判断(包括对象,list)

  1. List<Employeeexam> employeeInExams = exam.getEmployeeInExams();
  2. List<Employeeexam> employeeOutExams = exam.getEmployeeOutExams();
  3. boolean insertEmployeeResult = false;
  4. int in_size, out_size;
  5. in_size = employeeInExams != null ? employeeInExams.size() : 0;
  6. out_size = employeeOutExams != null ? employeeOutExams.size() : 0;
  7. Integer employeeNum = in_size + out_size;

7.if...else...语句用条件运算符

  1. return examMapper.deleteByPrimaryKey(id) > 0 ? true : false;
  1. result = examService.deleteExamById(examId) ? "删除成功!" : "删除失败!";

8.善于使用commons-io包和commons-lang包中的工具类

  io包中FilenameUtils和IOUtils和FileUtils的使用

  lang包中  StringUtils和NumberUtils的使用等。

9.线程休眠的另一种方法

  1. try {
  2. TimeUnit.SECONDS.sleep(1);
  3. } catch (InterruptedException e) {
  4. e.printStackTrace();
  5. }

10. 对一些properties配置文件,我们可以在SVN或者Git放一个其样本文件,具体的文件不添加到版本管理,这样不会造成开发小组的冲突。

  比如:db.properties文件,我们创建一个db.sample.properties(类似于模板)文件并传到git,db.properties文件不添加索引即可。

11. request对象可以当前文件在服务器的完整路径

  1. request.getRealPath("/")

结果:

E:\xiangmu\SessionTest\WebContent\

12. 所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。

说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在

IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行 判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑, 推荐使用 equals 方法进行判断。

 

13.  null可以强转为其他类型

  1. String str = (String) null;

等价于

  1. String str = null;

  类型强转对应的指令是checkcast类型检查,如果检查失败会抛出类型转换异常ClassCastException

  checkcast指令实际上和INSTANCEOF指令是很像的,不同的是CHECKCAST如果失败,会抛出一个异常,INSTANCEOF是返回一个值。

例如:

  1. package cn.qlq;
  2.  
  3. public class Client {
  4.  
  5. public static void main(String[] args) {
  6. Object object = null;
  7. String str = (String) object;
  8. System.out.println(str instanceof String);
  9. }
  10.  
  11. }

结果:

false

反编译查看字节码如下:

  1. Compiled from "Client.java"
  2. public class cn.qlq.Client {
  3. public cn.qlq.Client();
  4. Code:
  5. 0: aload_0
  6. 1: invokespecial #8 // Method java/lang/Object."<init>":()V
  7. 4: return
  8.  
  9. public static void main(java.lang.String[]);
  10. Code:
  11. 0: aconst_null
  12. 1: astore_1
  13. 2: aload_1
  14. 3: checkcast #16 // class java/lang/String
  15. 6: astore_2
  16. 7: getstatic #18 // Field java/lang/System.out:Ljava/io/PrintStream;
  17. 10: aload_2
  18. 11: instanceof #16 // class java/lang/String
  19. 14: invokevirtual #24 // Method java/io/PrintStream.println:(Z)V
  20. 17: return
  21. }

14  重构方法

  有时候我们用了一个方法为两个参数,现在如果需要改造该方法传入3个参数。

  1. private static void operate1(int i, int j) {
  2. // do something with i, j
  3. }

如果项目中太多地方用到两个参数的方法,如果直接改方法加入一个参数并不合适,可以重构一个方法,如下:将代码移到三个参数的,并在原来两个参数的方法中调用新方法,第三个参数传入null或者默认值。

  1. private static void operate1(int i, int j) {
  2. operate1(i, j, 0);
  3. }
  4.  
  5. private static void operate1(int i, int j, int k) {
  6. // do something with i, j
  7.  
  8. // do something with k
  9. }

Java开发一些小的思想与功能小记(二)的更多相关文章

  1. 鸿蒙Java开发模式11:鸿蒙图片裁剪功能的实现

    鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 目录: 1. 鸿蒙版图片裁剪功能效果展示 2.Java代码实现 3.裁剪工具类实现 4.<鸿蒙Java开发模式>系 ...

  2. 01 java开发前小知识

    1.常见的dos命令 盘符: 进入指定的盘符下. dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录    注意:rd不能删除非空的文件夹,而且只能用于删除文件夹. c ...

  3. Java开发人员必须掌握的Linux命令(二)

    子曰:"工欲善其事,必先利其器." 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解让知识或者技术,让学习之旅充满乐趣,这就是写博文的初心. 本篇的旅 ...

  4. Java练习 SDUT-2733_小鑫の日常系列故事(二)——石头剪子布

    小鑫の日常系列故事(二)--石头剪子布 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 小鑫在上幼儿园的时候,喜欢跟小伙 ...

  5. 「小程序JAVA实战」小程序的举报功能开发(68)

    转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudeweixinapicaidancaozuo66-2/ 通过点击举报 ...

  6. 「小程序JAVA实战」小程序的关注功能(65)

    转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeguanzhugongneng64/ 在个人页面,根据发布者个人和 ...

  7. Egret白鹭开发微信小游戏手机震动功能

    最近一直在修改调整项目,没有接触新功能,今天终于有机会,去翻了微信API,发现手机震动的API,今天分享出来大家一起学习学习 对于震动,微信提供了两个API,分别是: wx.vibrateShort: ...

  8. Java开发学习(三十四)----Maven私服(二)本地仓库访问私服配置与私服资源上传下载

    一.本地仓库访问私服配置 我们通过IDEA将开发的模块上传到私服,中间是要经过本地Maven的 本地Maven需要知道私服的访问地址以及私服访问的用户名和密码 私服中的仓库很多,Maven最终要把资源 ...

  9. Java开发人员必须掌握的Linux命令-学以致用(5)

    ================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...

随机推荐

  1. 【转】10种简单的Java性能优化

    10种简单的Java性能优化 2015/06/23 | 分类: 基础技术 | 14 条评论 | 标签: 性能优化 分享到: 本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加 ...

  2. re正则表达式公式讲解3

    1.分组匹配    用()把需要分组的类型括起来,如下 import re m = re.search("([a-z]+)([0-9]+)","alex123" ...

  3. Android图片压缩上传(二)

    之前有用到libjpeg,还是有一定的局限性,最近用了一个新的方式,效果还是挺不错,随着作者的版本更新,Bug也随之变少,目前项目中运用已上线. 1.之前的方式Android图片压缩,不失真,上线项目 ...

  4. Linux服务器用iotop命令分析服务器磁盘IO情况

    Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦.如果会systemtap, 或者blktrace这些事情 ...

  5. 实战角度比较EJB2和EJB3的架构异同

    ] EJB编程模型的简化 首先,EJB3简化的一个主要表现是:在EJB3中,一个EJB不再象EJB2中需要两个接口一个Bean实现类,虽然我们以前使用JBuilder这样可视化开发工具自动生成了EJB ...

  6. (转)Spring4.2.5+Hibernate4.3.11+Struts2.3.24整合开发

    http://blog.csdn.net/yerenyuan_pku/article/details/52902851 前面我们已经学会了Spring4.2.5+Hibernate4.3.11+Str ...

  7. Pygame - Python游戏编程入门

    >>> import pygame>>> print(pygame.ver)1.9.2a0 如果没有报错,应该是安装好了~ 如果报错找不到模块,很可能是安装版本的问 ...

  8. Codeforces 1076D——最短路算法

    题目 给你一个有n个顶点.m条边的无向带权图.需要擦除一些边使得剩余的边数不超过k,如果一个点在原始图到顶点1的最短距离为d,在删边后的图中到顶点的最短距离仍是d,则称这种点是 good.问如何删边, ...

  9. 【整理】用JSON-server模拟REST API

    用JSON-server模拟REST API https://www.cnblogs.com/ys-wuhan/p/6387791.html

  10. celery worker集群搭建

    举个小栗子,在生产环境下,我们有两个异步任务需求,需要分别部署在两台服务器上,并用不同的队列实现 用户邮件发送 pageview统计 主要的注意点,在任务执行时需指定queue,routing_key ...