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


    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 }
  • 相关阅读:
    电力基础知识培训(三)
    VB开发——打开Excel并使特定的worksheet处于激活状态
    电力基础知识培训(二)
    Professionals train themselves
    WINCE6.0 + S3C2443的启动过程nboot篇
    WINCE下如何设置/删除/查询这些环境变量
    WINCE6.0+S3C6410 watchdog重新启动
    在WinCE 6.0系统下实现USB功能定制
    在WINCE5.0开始菜单中添加应用程序
    WINCE内存机制
  • 原文地址:https://www.cnblogs.com/happy520/p/6613827.html
Copyright © 2020-2023  润新知