引出:面向对象编程(Object-oriented)把很多的变量和方法都封装在类中,方便代码调用;这就存在一个问题,声明在类中不同位置的变量在调用时,有那些区别?
先看一个代码:
class Person { String name; //成员变量 public void eat(){ int age ; //局部变量 age = 12; for(int i = 0 ; i< 5 ; i++){ System.out.println("hello world"+ age); } } }
如代码中所示,类中的变量分为成员变量和局部变量。
定义的位置上区别:
1. 成员变量是定义在方法之外,类之内的。
2. 局部变量是定义在方法之内。
作用上的区别:
1. 成员变量的作用是用于描述一类事物的公共属性的。
2. 局部变量的作用就是提供一个变量给方法内部使用而已。
生命周期区别:
1. 成员变量随着对象的创建而存在,随着对象的消失而消失。
2. 局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量一旦出了自己的作用域,马上从内存中消失。
初始值的区别:
1. 成员变量是有默认的初始值。
数据类型 默认的初始值
int 0
float 0.0f
double 0.0
boolean false
char ' '
String(引用数据类型) null
2. 局部变量是没有默认的初始值的,必须要先初始化才能使用。
内存分析:
对象的内存一般保存在"对象栈"内,栈内存中保存着对象中变量的地址,这些地址均指向堆内存中,真正的变量值其实存储在堆内存中。