A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/**
源码1 在类中方法外定义成员变量,还有在show方法中定义局部变量,在main函数中创建一个对象
*/
class Demo
{
        int i;
        String st;
        char c;        //'\u0000'(null)
        byte by;        //0(byte 1字节)
        short sh;        //0(short 2字节)
        long l;        //0L
        float f;//0.0f
        double d;        //o.od
        boolean        b;//false
        void show()
        {
                int i1;
                String st1;
                char c1;        //'\u0000'(null)
                byte by1;        //0(byte 1字节)
                short sh1;        //0(short 2字节)
                long l1;        //0L
                float f1;//0.0f
                double d1;        //o.od
                boolean        b1;//false
                System.out.print(i1+":"+st1+":"+c1+":"+by1+":"+sh1+":"+l1+":"+f1+":"+d1+":"+b1);
        }
}
class Test
{
        public static void main(String[] args)
        {
                Demo d=new Demo();
                System.out.println(d.i+":"+d.st+":"+d.c+":"+d.by+":"+d.sh+":"+d.l+":"+d.f+":"+d.d+":"+d.b);
        }
}
编译后发现定义在方法中的局部变量没有初始化


现在将局部变量注释掉,重新编译,
/**
源码2 在类中方法外定义成员变量,在main函数中创建一个对象
*/
class Demo
{
        int i;
        String st;
        char c;        //'\u0000'(null)
        byte by;        //0(byte 1字节)
        short sh;        //0(short 2字节)
        long l;        //0L
        float f;//0.0f
        double d;        //o.od
        boolean        b;//false
}
class Test
{
        public static void main(String[] args)
        {
                Demo d=new Demo();
                System.out.println(d.i+":"+d.st+":"+d.c+":"+d.by+":"+d.sh+":"+d.l+":"+d.f+":"+d.d+":"+d.b);
        }
}
运行发现默认初始化值int--0;String--null;char--'\u0000';byte--0;short--0;long--0;float--0.0;double--0.0;boolean--false;

现在将show方法中输出成员变量,主方法中定义变量输出
/**
源码3 在类中方法外定义成员变量,在show中输出成员变量,在main函数中定义变量并输出。
*/
class Demo
{
        int i;
        String st;
        char c;        //'\u0000'(null)
        byte by;        //0(byte 1字节)
        short sh;        //0(short 2字节)
        long l;        //0L
        float f;//0.0f
        double d;        //o.od
        boolean        b;//false
        void show()
        {
               
                System.out.print(i+":"+st+":"+c+":"+by+":"+sh+":"+l+":"+f+":"+d+":"+b);
        }
}
class Test
{
        public static void main(String[] args)
        {
                int a;
                Demo d=new Demo();
                d.show();
                System.out.println(a);
        }
}
编译后发现

将main方法中变量去掉
/**
源码4 在类中方法外定义成员变量,在show中输出成员变,说明成员变量在整个类中有用
*/
class Demo
{
        int i;
        String st;
        char c;        //'\u0000'(null)
        byte by;        //0(byte 1字节)
        short sh;        //0(short 2字节)
        long l;        //0L
        float f;//0.0f
        double d;        //o.od
        boolean        b;//false
        void show()
        {
               
                System.out.print(i+":"+st+":"+c+":"+by+":"+sh+":"+l+":"+f+":"+d+":"+b);
        }
}
class Test
{
        public static void main(String[] args)
        {
                Demo d=new Demo();
                d.show();
        }
}
运行结果:说明成员变量能够作用整个类兵器额初始化



/*******************************************/
反思:java的这种机制避免了没有被初始化的数据成员在进行其它操作时引起的严重性错误,尽量从语法上避免程序员犯错。(网上的答案)还有static定义的变量也能够自动默认初始化。求大神解释一下为什么成员变量是能够默认自动初始化的,谢谢!

更多图片 小图 大图
组图打开中,请稍候......

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 很给力!

查看全部评分

10 个回复

正序浏览
lf027 中级黑马 2015-3-31 22:19:01
11#
7楼讲的挺好
回复 使用道具 举报
fantacyleo 发表于 2015-3-28 22:59
楼主不是已经自己把答案写出来了吗:
java的这种机制避免了没有被初始化的数据成员在进行其它操作时引起的 ...

是的。。。
回复 使用道具 举报
乐生 中级黑马 2015-3-31 22:14:31
9#
赞了!!!
回复 使用道具 举报
没看懂………………:'(
回复 使用道具 举报
我来。成员变量的生命周期是跟随着对象来的。当对象在堆内存中产生,成员变量也就产生了。内存为这个对象开辟出了一个空间,成员变量是这个对象的成员,内存会动态给成员变量赋值。如果一开始你就给成员变量赋值了,在这个之前也有一次默认的初始化。这是堆内存的特性吧。
回复 使用道具 举报
非常好 !!!长见识了 !!赞一个

评分

参与人数 1黑马币 +12 收起 理由
JARVIS_YJ + 12 神马都是浮云

查看全部评分

回复 使用道具 举报 1 0
李大大 发表于 2015-3-28 22:53
阿亮老师是亮哥么?

嗯。。。。。。。。。。。。
回复 使用道具 举报
fantacyleo 发表于 2015-3-28 22:59
楼主不是已经自己把答案写出来了吗:
java的这种机制避免了没有被初始化的数据成员在进行其它操作时引起的 ...

还没熟悉,现在还不是特别的理解。
回复 使用道具 举报
楼主不是已经自己把答案写出来了吗:
java的这种机制避免了没有被初始化的数据成员在进行其它操作时引起的严重性错误,尽量从语法上避免程序员犯错。(网上的答案)还有static定义的变量也能够自动默认初始化。
回复 使用道具 举报
阿亮老师是亮哥么?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马