标题: 成员变量的声明时初始化和构造方法中初始化的区别是什么? [打印本页] 作者: 李中豪 时间: 2012-3-16 13:07 标题: 成员变量的声明时初始化和构造方法中初始化的区别是什么? 成员变量的声明时初始化和构造方法中初始化的区别是什么? 什么情况下用什么方式?作者: 于紫洋 时间: 2012-3-16 13:14
问题看的有点晕,是指成员变量赋初值么?还是说成员变量和局部变量没分清楚,期待楼下解答作者: 李深山 时间: 2012-3-16 13:20
声明时为成员变量赋值,那么你一创建对象,这个赋值就进行,而且先于构造器执行。
而且你每次创建这个类的对象,都是同一个值,比如你声明的时候写private int age = 18;,那么你每一个对象的age的值都是被初始成18.但是如果你把赋值语句写在构造器,
比如:constructor(int a){
age = a;}
那么你每次创建对象都可以单独为每一个对象赋值不同的age。比如你创建10个学生对象,他们的年龄不一定都是18啊,所以最好不要用声明时就赋值,最好写进构造器,为每一个对象赋不同的年龄。作者: 蒙武辉 时间: 2012-3-16 13:26
在构造函数中初始化。具有前瞻性。很好的考虑了项目未来的优化,维护。
例如:
这个类里面有一个属性String name ;代表了公司的名称。
如果你直接初始化 String name = "XXX公司";
那么如果以后公司换了名称,但是开发者离公司很远。
那么你势必要跑很远去那个公司重新安装。
而且你也要重新修改代码,重新编译。
如果是用构造函数初始化,这个公司的名称保存在一个文本文档里面。
那么你只需要让那个公司在对应的文本文档里面把名字修改了即可。 作者: 周建 时间: 2012-3-16 13:27
成员变量初始化是随着类的加载而存在的,构造函数的初始化是建立对象后才有的,前者先存在,且存储在不同区域作者: 李创 时间: 2012-3-16 13:33
class demo
{
private int x=10;
demo(){};
demo(int x)
{
this.x = x;
}
public int getX()
{
return x;
}
}
class Noname1
{
public static void main(String[] args)
{
//当你创建对象时,类中的成员变量已经存在 值为初始化的值
//demo de = new demo();
//System.out.println(de.getX());
//当你用构造函数时,像这样可以修改里面的值
demo de = new demo(15);
System.out.println(de.getX());
}
} 作者: 段浩亮 时间: 2012-3-16 13:33 本帖最后由 段浩亮 于 2012-3-16 13:43 编辑
成员变量的初始化过程是这样的:
静态成员变量随着类的加载而建立
非静态成员变量随着对象的建立而建立,声明时初始化成为显示初始化,声明时不初始化,建立对象时系统会默认给它初始化(称为隐式初始化),数值型会默认初始化为0,字符默认是0在ASCII中对应的字符,boolean型默认为false,引用型默认为null
成员变量的初始化过程是 隐式初始化----->显示初始化----->构造代码块初始化----->构造函数初始化,举一个简单的例子来说
class Person(
String name = “lisi”;
Person(String name){
this.name = name;
}
}
Person p = new Person(”zhangsan“);name在堆内存中值的变化过程是:null------->"lisi"------>"zhangsan"