JAVA_SE基础——26.[深刻解析]局部变量与成员变量的区别

黑马程序员入学blog ...
html


若是这章节很难懂的话应该返回去先看  JAVA_SE基础——10.变量的做用域java

定义的位置上区别:
1. 成员变量是定义在方法以外,类以内的。
2. 局部变量是定义在方法以内。

做用上的区别:
1. 成员变量的做用是用于描述一类事物的公共 属性的。
2. 局部变量的做用就是提供一个变量给方法内部使用而已。

生命周期区别:
1. 随着对象 的建立而存在,随着对象的消失而消失。
2. 局部变量在调用了对应的方法时执行到了建立该变量的语句时存在,局部变量一旦出了本身的做用域
那么立刻从内存中消失。

初始值的区别:
1. 成员变量是有默认的初始值。
数据类型     默认的初始值
int                0
float              0.0f
double              0.0
boolean            false
char                 ' '
String(引用数据类型) null

2. 局部变量是没有默认的初始值的,必需要先初始化才能使用。程序员


下面来看个例子:spa

//人类
class Person {
	
	String name; //成员变量

	public void eat(){
		int age ;

		age = 12;
		for(int i =  0 ; i< 5 ; i++){
			System.out.println("hello world"+ age);
		}
	}

}



class Demo3 
{
	public static void main(String[] args) 
	{
		Person p1 =  new Person();
		p1.eat();

	}
}
结果:
hello world12
hello world12
hello world12
hello world12
hello world12


下面是内存中代码的执行图.net




首先内存整体分为了五个部分,包括 stack segment(栈内存)、heap segmentheap segment(堆内存)、code segment(方法区)、data segment(静态代码块)、运行时常量池(Runtime Constant Pool)是方法区的一部分


    其中咱们程序中用关键字new出来的东西都是存放在heap segment(堆内存)。


    程序中的局部变量存放在stack segment(栈内存),这些局部变量是在具体方法执行结束以后,系统自动释放内存资源(而heap segment中的资源须要java垃圾回收机制来处理)。


    程序中的方法,是内存中的code segment(方法区)中的,并且是多个对象 共享一个代码空间区域。


    static静态变量,须要放在内存中的data segment(静态代码块)中。
code

运行时常量池,储存常量。
htm


关于内存机制 ,等我弄懂些再发表文章。都怪我太菜哭对象

相关文章
相关标签/搜索