1、classpath的获取规则
/**
* 获取文件在classpath下的物理路径
* @param fileName
* @return
*/
public static String getUrl(String fileName) {
if (fileName == null) throw new NullPointerException();
return ClassLoader.getSystemResource("").getPath() + fileName;
}
资源文件在系统资源目录下,如resources/,输出则在target目录下
2、方法结果接收方式
- 参数接收
- 全局变量
- 返回值接收
说明:如果没有特殊情况,一律用第三种方式:返回值接收与上下文无关,只与方法当前状态有关,方便测试。
3、将过程拆分,提高代码可重用性
4、Java类加载的过程
java中类加载的全过程及内存图分析
类加载机制:
jvm把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成jvm可以直接使用的java类型的过程。
5、禁止在catch中出现 e.printStackTrace()
从源码可以看到,e.printStackTrace() 对线程上锁,影响多线程下的执行效率。
应该使用Logback进行日志管理。
6、代码的系统无关性
例如:换行符 \n 和 \r\n,可以使用:
(1)System.getProperties()
(2)Guava中可以使用StandardSystemProperty
这个是用来方便调用如java.version, java.home 等环境变量的,使用的是enum了,比如:
StandardSystemProperty.JAVA_VERSION.value();
// [result] 1.7.0_25
7、是否要提供无参构造方法
这个要考虑Bean是否允许属性缺失的对象,如果允许,则可提供无参构造方法。
8、使用Preconditions进行参数校验
Preconditions里面的方法:
1 .checkArgument(boolean) :
功能描述:检查boolean是否为真。 用作方法中检查参数
失败时抛出的异常类型: IllegalArgumentException
**2.checkNotNull(T): **
功能描述:检查value不为null, 直接返回value;
失败时抛出的异常类型:NullPointerException
3.checkState(boolean):
功能描述:检查对象的一些状态,不依赖方法参数。 例如, Iterator可以用来next是否在remove之前被调用。
失败时抛出的异常类型:IllegalStateException
4.checkElementIndex(int index, int size):
功能描述:检查index是否为在一个长度为size的list, string或array合法的范围。 index的范围区间是[0, size)(包含0不包含size)。无需直接传入list, string或array, 只需传入大小。返回index。
失败时抛出的异常类型:IndexOutOfBoundsException
5.checkPositionIndex(int index, int size):
功能描述:检查位置index是否为在一个长度为size的list, string或array合法的范围。 index的范围区间是[0, size)(包含0不包含size)。无需直接传入list, string或array, 只需传入大小。返回index。
失败时抛出的异常类型:IndexOutOfBoundsException
6.checkPositionIndexes(int start, int end, int size):
功能描述:检查[start, end)是一个长度为size的list, string或array合法的范围子集。伴随着错误信息。
失败时抛出的异常类型:IndexOutOfBoundsException
例子:
Preconditions.checkNotNull(neme, "neme为null");
Preconditions.checkArgument(neme.length()>0, "neme为\'\'");
Preconditions.checkArgument(age>0, "age 必须大于0");