面向对象-成员变量和局部变量的区别

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 }
原文地址:https://www.cnblogs.com/happy520/p/6613827.html