概念
成员变量
成员变量就是属于类的变量,在类中,方法体外定义的变量
成员变量又分为两种:
- 类变量(静态变量):是被static所修饰的成员变量,是属于类的部分,属于类的范畴。
- 实例变量(非静态变量):是没有被static修饰的成员变量,是属于类的部分,但是属于对象的范畴。
局部变量:
局部变量就是定义在方法体,代码块内的变量,是局部的变量,属于方法的范畴。
比如:方法的形参,方法内定义的变量等等。
区别
1、定义的位置不一样
局部变量:在方法的内部
成员变量:在方法的外部,直接写在类中
public class Demo {
//在方法的外部,直接写在类中
//成员变量
String name;
public void test(){
//在方法的内部
//局部变量
int num;
}
}
2、适用范围不一样
局部变量:只有方法当中才可以使用,方法外不可用
成员变量:整个类都可以用
public class Demo {
//成员变量
String name = "kenvie";
public void testA(){
//局部变量
int num = 666;
//输出的name为成员变量
//成员变量,整个类都可以用
System.out.println(name);
}
public void testB() {
//输出的num为局部变量
//所以这个写法是错误的!!!
System.out.println(num);;
}
}
3、默认值不一样
局部变量:没有默认值,如果想使用,必须手动赋值
成员变量:如果没有赋值,会有默认值,规则和数组一样
public class Demo {
//在方法的外部,直接写在类中
//成员变量
String name;
public void test(){
//在方法的内部
//局部变量
int num;
//name是成员变量,没有手动赋值的话本身有默认值
System.out.println(name);
//num是局部变量,使用的时候必须手动赋值
//所以这种是错误写法
System.out.println(num);
}
}
4、内存的位置不一样
局部变量:位于栈内存
成员变量:位于堆内存
5、生命周期不一样
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失