1. 在类中的位置不同
成员变量:在类中方法外
局部变量:在方法内或方法声明上
1 //手机类 2 class Phone { 3 4 //成员变量 5 String brand; //品牌 6 7 //成员方法 8 public void call(String name) { //在方法的声明上(局部变量) 9 System.out.println("给"+name+"打电话。。。。"); 10 } 11 12 13 }
2. 在内存中的位置不同
成员变量:在堆内存中
局部变量:在栈内存中
3. 生命周期不同
成员变量:随着对象的存在而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
4. 初始化值不同
成员变量:有默认的初始化值
局部变量:没有默认的初始化值,必须先定义赋值才能使用
//手机类 class Phone { //成员变量 String brand; //品牌 int price; //价格 String color; //颜色 //成员方法 public void call(String name) { //在方法的声明上(局部变量) String user; //局部变量(定义在方法内) System.out.println(user); //编译时报错(可能尚未初始化变量user) System.out.println("给"+name+"打电话。。。。"); } } //手机类的测试类 class PhoneDemo { public static void main(String[] args) { //创建手机对象 Phone p = new Phone(); p.call("李明"); System.out.println(p.brand + "---" + p.color+"---" + p.price); //null---null---0 } }
5. 注意事项
局部变量名称可以和成员变量名称一样,在方法中使用的时候才用的是就近原则
1 //手机类 2 class Phone { 3 int num = 20; //这里定义了一个成员变量num 4 5 public void testNum() { 6 int num = 100; // //这里定义了一个局部变量num 7 System.out.println(num); //输出 100 8 } 9 10 } 11 12 //手机类的测试类 13 class PhoneDemo { 14 public static void main(String[] args) { 15 //创建手机对象 16 Phone p = new Phone(); 17 p.testNum(); 18 19 } 20 } 21
测试2,如果我们将局部变量num删除,结果会是怎么样呢?
1 //手机类 2 class Phone { 3 int num = 20; 4 5 public void testNum() { 6 //int num = 100; 7 System.out.println(num); //此时输出成员变量num的值:20 8 } 9 10 } 11 12 //手机类的测试类 13 class PhoneDemo { 14 public static void main(String[] args) { 15 //创建手机对象 16 Phone p = new Phone(); 17 p.testNum(); 18 19 } 20 }