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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

成员变量和局部变量的区别,有没简单点的理解,感觉好绕啊?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
成员变量和局部变量的作用域不一样   我的理解就可以看那个变量在哪个大括号内就可以知道它所起作用的区域  
比如说class A{
public String s1;

public void test(){
public String s2;

}

}

如上 s1可以作用在最外面那一层大括号中 s2只可以作用test方法中

如果方法中的局部变量和全局变量名一样,则起作用的是局部变量

以上是我的理解

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class A
{
int a;//成员变量
public static void main(String[] args)
{
int b;//局部变量
}
}
成员变量在整个类中都有效. (全局变量应该是成员变量的俗称) 在方法体中定义的变量叫做局部变量,局部变量只在定义它的方法中有效. 成员变量又分为 实例变量 和 类变量。成员变量:作为类的成员而存在,直接存在于类中;局部变量:作为方法或语句块的成员而存在,存在于方法的参数列表和方法定义中。
局部变量在使用前必须被程序员主动的初始化,和此形成对比,系统中的成员变量则会被系统提供一个默认的初始值。所以在语法上,类的成员变量能够定义后直接使用,而局部变量在定义后先要赋初值,然后才能使用。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
成员变量
1.成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及static修饰;两者都可以定义成final型
2.成员变量存储在堆,局部变量存储在栈
3.存在时间不同
4.成员变量有默认值,(被final修饰且没有static的必须显式赋值),局部变量不会自动赋值
局部变量
类体分为两部分。变量定义部分所定义的变量被称为类的成员变量,在方法体中定义的变量和方法的参数都被称为局部变量
什么是局部,方法内部,块内部都是局部,执行指令退出那个局部,局部变量自动清除
比如方法中,不用说
块中
{
int i=0; //这是一个局部变量,它的作用范围就在其中
}
成员变量就会涉及到谁的成员,类的成员?实例的成员?
class A{
int i=0; //实例的成员
static j=1;//类的成员
}
static 的差别,是否依赖于实例而存在 。

成员变量:作为类的成员而存在,直接存在于类中。
局部变量:作为方法或语句块的成员而存在,存在于方法的参数列表和方法定义中。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
成员变量与局部变量:

1.定义成员变量无需显示初始化,而局部变量除了形参外,都必须显示初始化。

2.一个类里不能定义两个同名的成员变量,即使一个是类属性,一个是实例属性也不行。一个方法里也不能定义两个同名的局部变量,即使一个是代码块局部变量或者形参,一个是方法局部变量也不行。

3.允许局部变量与成员变量同名,如果同名,则在方法中局部变量会覆盖成员变量;如果要访问成员变量则需使用this(实力属性)或类名(类属性)作为调用者。

4.try{}块里声明的变量是代码块局部变量,它只在try块内有效,catch块中不能访问该变量。
回复 使用道具 举报
本帖最后由 cjx2080@163.com 于 2012-12-10 15:50 编辑

1.在java里,按照变量定义位置的不同可以将变量分为两大类:成员变量和局部变量。
a. 成员变量指的是在类范围内定义的变量。
b. 局部变量指的是在一个方法内定义的变量。
c. 变量再次细分可以得到下面这张图:

2.成员变量和局部变量的作用范围不同
成员变量:
a.类属性(成员变量的一种,以static修饰),从这个类的准备阶段存在,直到这个类销毁。类属性的作用域和这个类的生存范围相同。
b.实力属性(成员变量的一种,不以static修饰),从实例开始创建时存在,直到系统销毁这个实例。实例属性的作用域和这个对应实例的生存范围相同。
局部变量:
a.形参:在定义方法签名时定义的局部变量,作用域在整个方法内有效。
b.方法局部变量:在方法体内定义的局部变量,作用域在整个方法内有效。
c.代码块变量:在代码块中定义的局部变量,作用域在代码块范围内有效。
3.是否需要初始化?
a.成员变量无须显式初始化,只要为一个类定义了类属性或实例属性,系统会进行默认初始化。
b.局部变量(除形参外)必须显式初始化,否则不可以访问它们。
4.关于成员变量和局部变量重名的问题?
a.成员变量之间不能重名,即使一个是类属性一个是实例属性。
b.局部变量之间不能重名,即使一个是方法局部变量一个是代码块局部变量。
c.但是成员变量和局部变量可以重名,而且局部变量会覆盖成员变量,如果想要引用被覆盖的成员变量需要用this(调用实例属性)或类名(调用类属性)。
5.内存里存放位置不同
a.成员变量存放在堆内存中。
b.局部变量存放在栈内存中。

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 赞一个!

查看全部评分

回复 使用道具 举报

成员变量和局部变量。
作用范围。
成员变量作用于整个类中。
局部变量变量作用于函数中,或者语句中。
在内存中的位置:
成员变量:在堆内存中,因为对象的存在,才在内存中存在。
局部变量:存在栈内存中。

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
我想暂时可以这么理解,类中的变量是成员变量,而方法中的变量是局部变量
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马