Code 【Bug】JavaBean规范中构造方法的注意事项 bug 编程 分享 78次访问 09-23 22:42 ### 什么是JavaBean JavaBean是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类。为了规范JavaBean的开发,Sun公司发布了JavaBean的规范,他要求一个标准的JavaBean组件需要遵循一定的编码规范: 1. 他必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的默认构造方法。 2. 它提供公共的setter方法和getter方法,让外部程序设置和获取JavaBean的属性。 ### 事情经过 今天我在项目中需要往数据库插入一个JavaBean,为了简化代码,我没有使用该JavaBean的setter方法赋值,而是添加了一个多参的构造方法,方便我赋值(注意原来的JavaBean中是没有构造方法的)。因此,编译器就报错了。  ### 问题所在 问题就出在我添加了一个**多参的构造方法**。 在Java中如果没有构造方法,虚拟机会默认一个无参构造方法。 如果有构造方法,无论是有参的还是无参的,就不会有默认的无参构造方法 在这里我添加了有参构造方法,覆盖了原来的无参构造方法。一是违反了JavaBean的规范,二是因为没有了无参构造方法,框架无法反射生成该对象。 Read More→
Code File.mkdir()的坑 编程 分享 53次访问 09-22 11:11 mkdir()方法是File类的一部分。 mkdir()函数用于创建由抽象路径名表示的新目录。如果创建目录,则该函数返回true,否则返回false。 如果我的目录里暂时没有/upload/temp/这个路径时, ```java String storePath = request.getSession().getServletContext().getRealPath("/") + "upload/temp/" File parentDirBefor=new File(storePath); if (!parentDirBefor.exists()){ parentDirBefor.mkdir(); } ``` 这时我是无法成功创建的,原因在于路径“upload/temp”,java在mkdir时会创建temp,但是无法找到upload,因为upload还未创建。所以正确的顺序应该是 ```java String storePath = request.getSession().getServletContext().getRealPath("/") + "upload"; File parentDirBefor=new File(storePath); if (!parentDirBefor.exists()){ parentDirBefor.mkdir(); } parentDirBefor=new File(storePath+"/temp"); if (!parentDirBefor.exists()){ parentDirBefor.mkdir(); } ``` Read More→
Code 【Java】MessageFormat.format({0},{1})格式化输出 随笔 编程 36次访问 09-08 15:05 ```java String fields="时间"; String sortDire="Desc"; //MessageFormat.format("field:{0},sortDire:{1}",fields,sortDire); System.out.println(MessageFormat.format("field:{0},sortDire:{1}",fields,sortDire)); field:时间,sortDire:Desc ``` 相较于String.Format()的占位符更好用 Read More→
Code 【事务控制】dbutils关于使用ThreadLocal实现事务控制 编程 29次访问 05-12 12:29 #### 前言 事务控制是数据库重要的一个环节,一个事务包含一个或多个SQL语句。 在我们的正常开发中,经常遇到需要一次执行多个SQL语句的情况,好比是插入后需要查询该条记录。亦或是保证事物的原子性和数据的一致性,我们必须在多条语句的业务中使用事物。 #### 分析 - **如何实现事务控制** 以使用dbutils为例: dbutils中一个connection就是一个事物,但是正常的业务操作使用了很多个dao的操作(QueryRunner)。  为保证dao的操作都能使用到同一个connection。我们在使用runner查询时可以在sql前加入同一个connecttion。实现业务层和持续层使用同一个connection. 如下图所示:那么可想而知,这个工具类方法的功能就是获取一个正在使用的connection.  - **那么为什么要使用ThreadLocal呢?** ThreadLocal的特性:“**隔离性**”它可以在指定线程中存储信息,且只能在该线程中进行存取,新创建的threadlocal对数据进行了备份,每个访问他的线程都会得到这个备份的副本,保证了线程的**安全**性;同时它作为一种线程域,能够隐式的获取对象。极大的降低了程序的**耦合**度。 #### 代码 ...... Read More→
Code 【Knuth洗牌算法】如何在多个值中不重复的抽取任意个数? 编程 算法 C# 11次访问 01-26 19:53 有时我们在随机生成上会遇到一个问题,如果我们需要从多个值中**不重复**的**随机的**抽出**任意**个参数。 例如如何从8张卡牌中公平的抽取4张,且不重复。 那么洗牌算法是最好的选择。 洗牌算法,顾名思义就是如同洗牌一样将一组数据的顺序打乱。 ```csharp public class Utility : MonoBehaviour { //knuth洗牌算法 public static T[] Knuth(T[] _datelist) { for (int i = 0; i < _datelist.Length; i++) { int randomNum = Random.Range(0, _datelist.Length);//随机生成一个下标 T temp = _datelist[i]; _datelist[i] = _datelist[randomNum]; _datelist[randomNum] = temp; } return _datelist; } } ``` Read More→