java基础:成员变量在赋值前先置空?

Asura211 2014-04-30 04:00:24
今天看了一下commons-logging的源码,看到Log接口的实现类的时候,发现一个问题,在这些实现类的构造方法中,为成员变量name和logger赋值之前,都会先把它们置为null。以Log4JLogger为例吧:

public class Log4JLogger implements Log, Serializable {
private transient Logger logger;
private String name;
public Log4JLogger() {
logger = null;
name = null;
}

public Log4JLogger(String name) {
logger = null;
this.name = null;
this.name = name;
logger = getLogger();
}

public Log4JLogger(Logger logger) {
this.logger = null;
name = null;
name = logger.getName();
this.logger = logger;
}
//.......getter、setter等其他代码.........
}

这么做有什么好处么?
...全文
659 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
铁魔 2015-08-18
  • 打赏
  • 举报
回复
我想也许是因为开发者是从C++转过来的
chen870201 2014-05-03
  • 打赏
  • 举报
回复
初始化的一种?
yuhouqingchen_2648 2014-05-03
  • 打赏
  • 举报
回复
存在jdk版本问题???有的难道不是默认为null???
cjb7625 2014-05-03
  • 打赏
  • 举报
回复
引用 10 楼 Android_iPhone 的回复:
这个问题可以分开考虑 像下面这样的代码,完全没有必要写成两行,直接写成this.name = name;就可以了 this.name = null; this.name = name; 而下面的代码,依赖于getLogger这个方法的具体实现 比如getLogger中发生了Exception,主程序中处理异常的代码中可以判断一下logger是否为null,如果不为null也许得做一些关闭文件的操作才能最终终止程序,这个时候null的设定就有一些用了,不会保留上一次运行的结果 logger = null; logger = getLogger();
他这是在构造器给成员赋值默认的初始值,没看到有什么意义,写代码的习惯而已吧。
风铃浩 2014-05-03
  • 打赏
  • 举报
回复
这里的name和Log4JLogger()是String类型和transient类型,都是属于引用类型变量,所以在构造函数的初始化中,被设置为null
唉唉唉33 2014-04-30
  • 打赏
  • 举报
回复
有解吗?只有编码人清楚吧
blueprint1988 2014-04-30
  • 打赏
  • 举报
回复
猜测有可能是编码习惯吧
_平凡的自我_ 2014-04-30
  • 打赏
  • 举报
回复
引用 10 楼 Android_iPhone 的回复:
这个问题可以分开考虑 像下面这样的代码,完全没有必要写成两行,直接写成this.name = name;就可以了 this.name = null; this.name = name; 而下面的代码,依赖于getLogger这个方法的具体实现 比如getLogger中发生了Exception,主程序中处理异常的代码中可以判断一下logger是否为null,如果不为null也许得做一些关闭文件的操作才能最终终止程序,这个时候null的设定就有一些用了,不会保留上一次运行的结果 logger = null; logger = getLogger();
抛异常了,写一行还是分开写都是null吧?
sbbtcsdbn 2014-04-30
  • 打赏
  • 举报
回复
引用 2 楼 haorengoodman 的回复:
基本类型的数据,你可以自己试一下,看到底默认值是什么 如果 只声明对象类型的引用,那引用指向 null
基本数据类型都是默认的0. 引用数据类型默认的是null
MaterJMG 2014-04-30
  • 打赏
  • 举报
回复
我是来学习的、、、
grapepaul 2014-04-30
  • 打赏
  • 举报
回复
确实没意义。。。
日知己所无 2014-04-30
  • 打赏
  • 举报
回复
这个问题可以分开考虑 像下面这样的代码,完全没有必要写成两行,直接写成this.name = name;就可以了 this.name = null; this.name = name; 而下面的代码,依赖于getLogger这个方法的具体实现 比如getLogger中发生了Exception,主程序中处理异常的代码中可以判断一下logger是否为null,如果不为null也许得做一些关闭文件的操作才能最终终止程序,这个时候null的设定就有一些用了,不会保留上一次运行的结果 logger = null; logger = getLogger();
Sailhere 2014-04-30
  • 打赏
  • 举报
回复
原来是这样子的
xuefeng0707 2014-04-30
  • 打赏
  • 举报
回复
可能写代码时忽然NC了。
fu0709281031 2014-04-30
  • 打赏
  • 举报
回复
可能他们那边写代码是按行数算钱的吧。
EggItayi 2014-04-30
  • 打赏
  • 举报
回复
感觉毫无意义
Asura211 2014-04-30
  • 打赏
  • 举报
回复
引用 2 楼 haorengoodman 的回复:
基本类型的数据,你可以自己试一下,看到底默认值是什么 如果 只声明对象类型的引用,那引用指向 null
默认值我知道,我不明白的是在构造方法中初始化这些变量的时候,为什么要先写上 logger = null; this.name = null; 他们本来就是null,直接赋值不就可以了,何必多此一举,这有什么特别用途还是说仅仅书写习惯而已?
Mich_LY 2014-04-30
  • 打赏
  • 举报
回复
难道是为了手动释放资源,让gc更容易回收么?围观答案
whos2002110 2014-04-30
  • 打赏
  • 举报
回复
不太清楚,不过我这里1.1.1版本不存在你说的情况
haorengoodman 2014-04-30
  • 打赏
  • 举报
回复
基本类型的数据,你可以自己试一下,看到底默认值是什么 如果 只声明对象类型的引用,那引用指向 null
加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧