zoukankan      html  css  js  c++  java
  • 面向对象-成员变量和局部变量的区别

    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 }
  • 相关阅读:
    vim可以打开,gvim无法打开
    Ubuntu用apt-get安装时依赖包无法安装
    如何用mm、mmm编译android中的模块
    装饰模式简单的代码
    FileWriter和FileReader简单使用
    TCP/IP、Http、Socket的区别--特别仔细
    surface实例-小球弹起事例
    android中图片的三级缓存cache策略(内存/文件/网络)
    接口回调
    大公司的Java面试题集
  • 原文地址:https://www.cnblogs.com/happy520/p/6613827.html
Copyright © 2011-2022 走看看