黑马程序员入学blog ...
如果这章节很难懂的话应该返回去先看 JAVA_SE基础——10.变量的作用域
定义的位置上区别: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(); } }结果:
下面是内存中代码的执行图
首先内存总体分为了五个部分,包括 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(静态代码块)中。
运行时常量池,储存常量。
关于内存机制 ,等我弄懂些再发表文章。都怪我太菜
版权声明:本文为博主原创文章,未经博主允许不得转载。
JAVA_SE基础——26.[深入解析]局部变量与成员变量的区别
原文地址:http://blog.csdn.net/thescript_j/article/details/47789043