java垃圾回收机制中成员变量和局部变量的区别

1543人阅读
成员变量:包括实例变量和类变量,用static修饰的是类变量,不用static修饰的是实例变量,所有类的成员变量可以通过this来引用。
局部变量:包括形参,方法局部变量,代码块局部变量,存在于方法的参数列表和方法定义中以及代码块中。
1.成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及 static修饰;两者都可以定义成final型。
2.成员变量存储在堆,局部变量存储在栈。局部变量的作用域仅限于定义它的方法,在该方法的外部无法访问它。成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它。如果访问权限允许,还可以在类的外部使用成员变量。
3.局部变量的生存周期与方法的执行期相同。当方法执行到定义局部变量的语句时,局部变量被创建;执行到它所在的作用域的最后一条语句时,局部变量被销毁。类的成员变量,如果是实例成员变量,它和对象的生存期相同。而静态成员变量的生存期是整个程序运行期。
4.成员变量在累加载或实例被创建时,系统自动分配内存空间,并在分配空间后自动为成员变量指定初始化值,初始化值为默认值,基本类型的默认值为0,复合类型的默认值为null。(被final修饰且没有static的必须显式赋值),局部变量在定义后必须经过显式初始化后才能使用,系统不会为局部变量执行初始化。
5.局部变量可以和成员变量 同名,且在使用时,局部变量具有更高的优先级,直接使用同名访问,访问的是局部变量,如需要访问成员变量可以用this.变量名访问
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:10543次
排名:千里之外
原创:10篇
(1)(1)(4)(4)(2)温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'成员变量和局部变量的区别——王郡实',
blogAbstract:'&
1:成员变量直接定义在类中。
&& 局部变量定义在方法中,参数上,语句中。
2:成员变量在这个类中有效。
局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。
3:成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。
局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。',
blogTag:'王郡实',
blogUrl:'blog/static/9',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:9,
permalink:'blog/static/9',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}6451人阅读
……【面向对象】(3)
? 进阶之路(37)
? 编程语言(16)
……【Java】(18)
& & & &之前在刚开始学习Java的时候,就谈了谈,虽然知道这货以后会经常用到,但没想到了基本语法这里,竟然有冒出来了成员变量、局部变量和静态变量。变来变去太容易让人搞晕了,挑拣出来梳理一下喽!
& & & &要想区分这哥仨,首先,我们得知道它们分别是什么。先从成员变量下刀。
& & & &我们来研究一个事物:
& & & & & & & &属性:外在特征;例如人的身高,体重
& & & & & & & &行为:能够做什么;例如人有说话,打球等行为。
& & & &而在Java语言中,最基本的单位是类,类就是用来体现事物的。
& & & &用类class来描述事物也是如此:
& & & & & & & &属性:对应类中的成员变量
& & & & & & & &行为:对应类中的成员函数
& & & &定义类其实就是在定义类中的成员(成员变量和成员函数)
& & & 拓展:类是一个抽象的概念,而对象就是类的具体的存在,体现。例如:生活中的汽车,可以看做一个类,我们称之为汽车类,每一台车都有颜色和轮胎数(可以定义为属性,即成员变量),每一台车都可以跑(即车的行为,对应类总的成员函数),我们把汽车实例化一下,即会产生一个对象,比如奔驰、宝马(BMW)。
public class Car {
private S // 定义汽车颜色,全局变量
private int numL // 定义汽车轮胎数,全局变量
public Car(String color, int numLuntai){
this.color =
this.numLuntai = numL
public void run() {
System.out.println(this.numLuntai+ &个轮子的& +this.color + &轿车在马路上行驶着&);
}public class ClassTest {
public static void main(String[] args){
Car bmw = new Car(&黑色&, 4);
// 创建一个轿车对象,名字为bmw
bmw.run();
运行结果:
4个轮子的黑色轿车在马路上行驶着
& & & 其中color和numLuntai就称为Car 类的成员变量,这个属性能够用来描述一个类的属性,否则,它就应该定义为局部变量。
& & & 例如一个for循环中的i即是局部变量。
for(int i = 0; i & args. i++) {
又例如写在成员方法中变量是局部变量。
publicclass Car {
private S // 定义汽车颜色,全局变量
private int numL // 定义汽车轮胎数,全局变量
public Car(String color, int numLuntai){
this.color =
this.numLuntai = numL
public void run() {
String carName=”宝马牌”;
//这个就是局部变量
System.out.println(this.numLuntai+ &个轮子的& +this.color + carName+&轿车在马路上行驶着&);
publicclass ClassTest {
public static void main(String[] args){
Car bmw = new Car(&黑色&, 4);
// 创建一个轿车对象,名字为bmw
bmw.run();
4个轮子的黑色宝马牌轿车在马路上行驶着
成员变量和局部变量的区别
& & & &成员变量:
& & & & & ①成员变量定义在类中,在整个类中都可以被访问。
& & & & & ②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
& & & & & ③成员变量有默认初始化值。
& & & 局部变量:
& & & & & ①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。
& & & & & ②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。
& & & & & ③局部变量没有默认初始化值
& & & 在使用变量时需要遵循的原则为:就近原则
& & & 首先在局部范围找,有就使用;接着在成员位置找。
& & & 由static修饰的变量称为静态变量,其实质上就是一个全局变量。如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰;没有被静态修饰的内容,其实是属于对象的特殊描述。
class Person{
//成员变量,实例变量
//静态变量,类变量
//所有对象共享的属性用static修饰
static String country = &CN&;
public void show(){
System. out.println(country + &:& + name);
//等效语句:System.out.println(Person.country+ &:& + this.name);
class StaticDemo{
public static void main(String[]args){
Personp = new Person();
System. out.println(p.country);
//可以用类名直接调用
System. out.println(Person.country);
成员变量和静态变量的区别
& & & 1、两个变量的生命周期不同
& & & & & & 成员变量随着对象的创建而存在,随着对象被回收而释放。
& & & & & & 静态变量随着类的加载而存在,随着类的消失而消失。
& & & 2、调用方式不同
& & & & & & 成员变量只能被对象调用。
& & & & & & 静态变量可以被对象调用,还可以被类名调用。
& & & 3、别名不同
& & & & & & 成员变量也称为实例变量。
& & & & & & 静态变量也称为类变量。
& & & 4、数据存储位置不同
& & & & & & 成员变量存储在堆内存的对象中,所以也叫对象的特有数据。
& & & & & & 静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
列表对比:
& & & &成员变量、局部变量、静态变量的区别
&在类中,方法外
方法中,或者方法的形式参数
在类中,方法外
初始化值
有默认初始化值
无,先定义,赋值后才能使用
有默认初始化值
对象调用,类名调用
与对象共存亡
与方法共存亡
与类共存亡
& & & & 尽管三者的本质都是变量,可是使用时却有相当大的区别,稍不留神就可能陷入陷阱。且先记住:在一个类中,如果一个变量能够用来描述一个类的属性,那就定义为成员变量,否则,它就应该定义为局部变量。而如果一个变量在全局中都能使用(某个内容是被所有对象所共享),那么我们就可以把这个变量用static来修饰,即为静态变量。(还要注意它与静态方法的紧密联系,这里且不细述了)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:288267次
积分:5789
积分:5789
排名:第4243名
原创:97篇
转载:12篇
评论:1484条
阅读:5494
阅读:38777
阅读:17737
(1)(3)(1)(6)(2)(3)(2)(5)(6)(3)(4)(2)(2)(3)(9)(1)(3)(5)(5)(2)(4)(1)(3)(2)(2)(2)(6)(2)(4)(4)(2)(2)(2)(2)(1)(1)(1)查看: 1646|回复: 7
属性 字段 全局变量 成员变量 局部变量 都是什么?
该用户从未签到
属性 字段 全局变量 成员变量 局部变量 都是什么? 有什么区别
TA的每日心情开心 12:40签到天数: 1 天[LV.1]初来乍到
本帖最后由 摸鱼儿 于
18:56 编辑
Java中的属性,通常可以理解为get和set方法。而字段,通常叫做“类成员”
属性只局限于类中方法的声明,并不与类中其他成员相关。例如:
void setA(String s){}
String getA(){}
当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的a属性(注意是小写a)。如果去掉了set的方法,则是可读属性,反之亦然。
类成员(字段),通常是在类中定义的类成员变量,例如:
public class A{
private String s = &123&;
void setA(String s){
我们可以说A类中有一个成员变量叫做s
类中的成员变量s相对于set方法来讲,属于全局变量,括号中s属于局部变量,即指对该方法有效,出了这个方法就无效了,即局部有效~
该用户从未签到
TA的每日心情慵懒 22:58签到天数: 16 天[LV.4]偶尔看看III
全局变量成员变量一样,在哪都可以使用
局部变量 只能在声明的方法中使用
属性是字段的封装
该用户从未签到
属性 字段 全局变量 成员变量 局部变量 都是什么? 有什么区别
把*.txt归为txt类,那么1.txt和2.txt是一类的。它们有书写的时间、大小、位置等信息,这些信息就是属性。
2.字段:就是把1.txt中属性表达出来,形成的一段代码。比如:String time=&...&;...
3.全局变量:1.txt和2.txt它们都有创建时间、大小、位置等属性,这些都有的信息可以同时改变。
4.成员变量:你有女朋友,但是别人没有女朋友。这女朋友就是一个特别的。程序中就是类中通用的属性,在不同对象中结果不一样。
先通俗的想这些概念在学java中专业点的 描述就好理解。。。。。
该用户从未签到
摸鱼儿 发表于
Java中的属性,通常可以理解为get和set方法。而字段,通常叫做“类成员”
属性只局限于类中方法的声明,并 ...
public class A{
String getA(){};
void setA(String a){
这个类中拥有一个可读写的a属性(注意是小写a)。 a是属性?
类成员(字段),通常是在类中定义的类成员变量& & a又是字段?
补充内容 ( 22:07):
这个类中拥有一个可读写的a属性(注意是小写a) ? 你想说的是不是 这个类就拥有了一个可读写属性的a字段?
补充内容 ( 22:07):
这个类中拥有一个可读写的a属性(注意是小写a) ? 你想说的是不是 这个类就拥有了一个可读写属性的a字段?
该用户从未签到
转眼之间 发表于
属性 字段 全局变量 成员变量 局部变量 都是什么? 有什么区别
把*.txt归为txt类,那么1.txt和2.t ...
你描述的很通俗 但你描述的估计很多人看不懂
该用户从未签到
转眼之间 发表于
属性 字段 全局变量 成员变量 局部变量 都是什么? 有什么区别
把*.txt归为txt类,那么1.txt和2.t ...
你描述的很通俗 但你描述的估计很多人看不懂
Beijing Aptech Beida Jade Bird Information Technology Co.,Ltd
北大青鸟IT教育 北京阿博泰克北大青鸟信息技术有限公司 版权所有

我要回帖

更多关于 java中堆和栈的区别 的文章

 

随机推荐