Java编程中最容易忽略的10个常见问题分别有哪些

介绍

本篇文章给大家分享的是有关Java编程中最容易忽略的10个常见问题分别有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在Java编码中,我们容易犯一些错误,也容易疏忽一些问题,因此笔者对日常编码中曾遇到的一些经典情形归纳整理成文,以共同探讨。

癑ava编程中最容易忽略的10个常见问题分别有哪些"

<强> 1。纠结的同名

<强>现象

很多类的命名相同(例如:常见于异常,常量,日志等类),导致在进口时,有时候张冠李戴,这种错误有时候很隐蔽。因为往往同名的类功能也类似,所以IDE不会提示警告。

<>强解决

写完代码时,扫视下导入部分,看看有没有不熟悉的。替换成正确导入后,要注意下注释是否也作相应修改。

<>强启示

命名尽量避开重复名,特别要避开与JDK中的类重名,否则容易导入错,同时存在大量重名类,在查找时,也需要更多的辨别时间。

<强> 2。想当然的API

<强>现象

有时候调用API时,会想当然的通过名字直接自信满满地调用,导致很惊讶的一些错误:

示例一:国旗是真的吗?

布尔标志=Boolean.getBoolean (“true");

可能老是假的。

示例二:这是去年的今天吗(今年是2012年,不考虑闰年)?结果还是2012年:

日历日历=GregorianCalendar.getInstance ();
calendar.roll(日历。DAY_OF_YEAR, -365)、

下面的才是去年:

calendar.add(日历。DAY_OF_YEAR, -365)、

<强>解决办法

问自己几个问题,这个方法我很熟悉吗?有没有类似的API ?区别是什么?就示例一而言,需要区别的如下:

避免(b) VS Boolean.parseBoolean VS Boolean.getBoolean (b) (b),

<>强启示

名字起的更详细点,注释更清楚点,不要不经了解,测试就想当然的用一些API,如果时间有限,用自己最为熟悉的API。

<强> 3。有时候溢出并不难

<强>现象

有时候溢出并不难,虽然不常复现:

示例一:

长x=Integer.MAX_VALUE + 1,
System.out.println (x);

x是多少?竟然是-2147483648,明明加上1之后还是长期的范围。类似的经常出现在时间计算:

<代码>数字1,次;数字2,次;数字3,白马王子

示例二:

在检查是否为正数的参数校验中,为了避免重载,选用参数数字,于是下面代码结果小于0,也是因为溢出导致:

数量我=Long.MAX_VALUE;
System.out.println (i.intValue()在0);

<强>解决

<李>

让* * *个操作数是长型,例如加上L或者L(不建议小写字母L,因为和数字1太相似了),

<李>

不确定时,还是使用重载吧,即使用doubleValue(),当参数是BigDecimal参数时,也不能解决问题。

<>强启示

对数字运用要保持敏感:涉及数字计算就要考虑溢出;涉及除法就要考虑被除数是0;实在容纳不下了可以考虑BigDecimal之类。

4。日志跑哪了?

<强>现象

有时候觉得日志都打了,怎么找不到?

示例一:没有堆栈跟踪!

}捕捉(异常交货){
,,,log.error (ex);
}

示例二:找不到日志!

}捕捉(ConfigurationException e) {
,,,e.printStackTrace ();
}

<强>解决

<李>

替换成log.error (ex.getMessage(),特异);

<李>

换成普通的log4j吧,而不是系统。李。

<>强启示

<李>

API定义应该避免让人犯的错,如果多加个重载的log.error(异常)自然没有错误发生

<李>

在产品代码中,使用的一些方法要考虑是否有效,使用e.printStackTrace()要想下终端(控制台)在哪。

<强> 5。遗忘的 <>强挥发性

<强>现象

在DCL模式中,总是忘记加一个波动。

私有静态CacheImpl实例,,//失去挥发性
公共静态CacheImpl getInstance () {
,,,如果(实例==null) {
,,,,,,,同步(CacheImpl.class) {
,,,,,,,,,,,如果(实例==null) {
,,,,,,,,,,,,,,,实例=new CacheImpl ();
,,,,,,,,,,,}
,,,,,,,}
,,,}
,,,返回实例;
}

<强>解决

毋庸置疑,加上一个吧,同步锁的是一块代码(整个方法或某个代码块),保证的是这“块”代码的可见性及原子性,但是实例==null * * *次判断时不再范围内的,所以可能读出的是过期的null。

Java编程中最容易忽略的10个常见问题分别有哪些