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

黑马程序猿入学blog ...

假设这章节非常难懂的话应该返回去先看  JAVA_SE基础——10.变量的作用域

定义的位置上差别:


1. 成员变量是定义在方法之外,类之内的。

2. 局部变量是定义在方法之内。

作用上的差别:

1. 成员变量的作用是用于描写叙述一类事物的公共 属性的。

2. 局部变量的作用就是提供一个变量给方法内部使用而已。



生命周期差别:

1. 随着对象 的创建而存在。随着对象的消失而消失。

2. 局部变量在调用了相应的方法时运行到了创建该变量的语句时存在,局部变量一旦出了自己的作用域

那么立即从内存中消失。

初始值的差别:

1. 成员变量是有默认的初始值。

数据类型     默认的初始值

int                0

float              0.0f

double              0.0

boolean            false

char                 ' '

String(引用数据类型) null

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

以下来看个样例:

//人类
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

以下是内存中代码的运行图

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

当中我们程序中用keywordnew出来的东西都是存放在heap segment(堆内存)。





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

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





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

执行时常量池。储存常量。

关于内存机制 ,等我弄懂些再发表文章。都怪我太菜JAVA_SE基础——26.[深入解析]局部变量与成员变量的差别

上一篇:【转】C++ const用法 尽可能使用const


下一篇:MySQL Replication 线程(理解详细过程)