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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姿_`态 高级黑马   /  2014-6-11 08:39  /  2440 人查看  /  22 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 姿_`态 于 2014-6-12 09:07 编辑

为什么成员变量可以不先赋初值,也可以使用,但是局部变量,就会报错。

22 个回复

倒序浏览
成员变量的作用域是类的内部,而且,它的初始化工作一般交给构造函数,在实例对象的时候才初始化,而局部变量的作用域是局部的,初始化只能在局部内完成
回复 使用道具 举报 1 0
变量定义时可以不赋值,但是在调用的时候就需要。
成员变量,系统会给他初始化,赋默认值,比如int为0,boolean类型为flase,String类型为null等。
方法里面的变量即局部变量,系统不会给他赋值,在调用之前需要明确给他指定一个值。
报错是因为调用的时候没有值,所以会报错
回复 使用道具 举报
成员变量系统会先进行默认赋初值操作,一般是null或者0;而局部变量没有这个机制,如果不自己赋初值就没有可以使用的值,所以会报错
回复 使用道具 举报 2 0
局部变量和成员变量主要是他们作用域的区别,
成员变量个是类内部;局部变量是定义其的方法体内部(或者方法体内部的某一程序块内——大括号,主要看定义的位置)。
另外,成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。
还有,在内存中的位置也不一样。成员变量在所在类被实例化后,存在堆内存中;局部变量在所在方法调用时,存在栈内存空间中。
回复 使用道具 举报
Java中成员变量有默认初始化,也就是如果不显式设置初始值的话就会被初始化为其类型的默认值(0、false、null等)。
          Java中的局部变量没有默认初始化。为了减少因为缺乏初始化而带来的程序错误隐患,Java要求局部变量在使用前必须显式设置初始值,也就是说在某个变量第一次被读取前在任意代码路径上都必须对它至少有一次赋值操作
回复 使用道具 举报
成员变量和局部变量的区别在于其有效范围不同。成员变量在整个类内都有效,而局部变量只在定义它的成员方法内才有效。
另外,成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。
回复 使用道具 举报
能给个程序吗?
下面的局部变量int b 就没报错!

class Test3
{
        public static void main(String[] args)
        {
                System.out.println("Hello World!");
                for(int a=0;a<5;a++)
                {
                        int b;
                }
        }
}
回复 使用道具 举报
sun_jun 发表于 2014-6-11 21:20
能给个程序吗?
下面的局部变量int b 就没报错!

我知道原因 b没有报错是因为他没有被掉用
class Test3
{
        public static void main(String[] args)
        {
                System.out.println("Hello World!");
                for(int a=0;a<5;a++)
                {
                        int b;
                  System.out.println(b);//报错,b没有初始化
                }
               
        }
}
回复 使用道具 举报
坠花湮 发表于 2014-6-11 14:08
成员变量和局部变量的区别在于其有效范围不同。成员变量在整个类内都有效,而局部变量只在定义它的成员方法 ...

讲解的很好,明白了 ,谢谢啦
回复 使用道具 举报
peku 发表于 2014-6-11 09:12
成员变量系统会先进行默认赋初值操作,一般是null或者0;而局部变量没有这个机制,如果不自己赋初值就没有 ...

谢谢啦,这下明白了,
回复 使用道具 举报
woshihq 发表于 2014-6-11 08:47
成员变量的作用域是类的内部,而且,它的初始化工作一般交给构造函数,在实例对象的时候才初始化,而局部变 ...

一个在堆区,一个在栈区,堆区一般都不默认初始化,所以要我们自己初始化,谢谢啦
回复 使用道具 举报
uu993 发表于 2014-6-11 09:05
变量定义时可以不赋值,但是在调用的时候就需要。
成员变量,系统会给他初始化,赋默认值,比如int为0,bool ...

变量定义时可以不赋值,但是在调用的时候就需要。说得对 ,及解决了我的问题,也解决了下面有一个那哥们的
问题,谢谢啦啊
回复 使用道具 举报
阿布Yocan 发表于 2014-6-11 09:44
局部变量和成员变量主要是他们作用域的区别,
成员变量个是类内部;局部变量是定义其的方法体内部(或者方 ...

解释的很清晰,明白了 谢谢啊
回复 使用道具 举报
因为成员变量是会默认初始化的,而局部变量不会!
回复 使用道具 举报
axuan 发表于 2014-6-11 10:36
Java中成员变量有默认初始化,也就是如果不显式设置初始值的话就会被初始化为其类型的默认值(0、false、n ...

一个有默认初始化值,一个没有,为了规避错误,必须做赋初值操作,这方法不错,谢谢啦
回复 使用道具 举报
坠花湮 发表于 2014-6-11 14:08
成员变量和局部变量的区别在于其有效范围不同。成员变量在整个类内都有效,而局部变量只在定义它的成员方法 ...

讲的很清晰,明白啦,谢谢啦
回复 使用道具 举报
uu993 中级黑马 2014-6-12 09:06:35
18#
姿_`态 发表于 2014-6-12 09:02
变量定义时可以不赋值,但是在调用的时候就需要。说得对 ,及解决了我的问题,也解决了下面有一个那哥们 ...

呵呵,客气~
回复 使用道具 举报
成员变量系统会默认赋值,而局部变量不会
回复 使用道具 举报
我是来学习的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马