1、在类中的位置不同
成员变量: 在类中定义
局部变量:在方法中定义或者方法的参数
2、在内存中的位置不同
成员变量:在堆内存(成员变量属于对象,对象进堆内存)
局部变量: 在栈内存(局部变量属于方法,方法进栈内存)
3、生命周期不同
成员变量: 随着对象的创建而存在,随着对象的销毁而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
4、初始化值不同
成员变量:有默认初始化值,引用类型默认为null
局部变量: 没有默认初始化值,必须定义,赋值, 然后才能使用
注意:
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
public class Test2{
public static void main(String[]args){
Person p1 = new Person();
//属性未封装,直接赋值
//p1.name ="飞飞";
//p1.age = 18;
//属性封装了,通过调用方法
p1.setName("飞飞");
p1.setAge(17);
p1.run(10);
p1 = null;
}
}
//没有封装之前
class Person{
//属性的封装
private String name;//成员变量,在类中定义
private int age;//成员变量,在类中定义
//getter and setter
//对外提供一个为mane属性设置的方法
public void setName(String name){
this.name = name;
}
//对外提供一个获取name属性的方法
public String getName(){
return name;
}
public void setAge(int age){
//this.age = age;
}
public int getAge(){
return age;
}
public void run(int len){//参数也是局部变量
int i;
int m = len;//m也是局部变量
System.out.println("我跑了"+m+"米");
//System.out.println(i);必须赋值初始化才正确
System.out.println(age);//成员变量有默认值
}
}