A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaoya0o0o 中级黑马   /  2015-9-16 22:17  /  515 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

成员变量和局部变量的区别:
                        1).成员变量:
                                A.定义在"类体"中;可以是任何数据类型;
                                B.会被自动初始化;
                                        class Student{
                                                String name;
                                                void show(){
                                                        System.out.println("我叫:" + num);        //打印:我叫:null
                                                }
                                        }
                                C.当实例化对象后,被存储在"堆"中;
                                D.当"对象"不被使用(没有任何引用),并被垃圾回收器回收时被清理;
                                       
                        2).局部变量:
                                A.定义在某个方法、或其它代码块中;
                                B.必须显示初始化,否则不能访问其值;
                                        class Student{
                                                void show(){
                                                        String name;
                                                        System.out.println("我叫:" + name);        //编译错误。局部变量必须显示初始化才能访问其值;
                                                        name = "张三";        //OK。可以被赋值。
                                                }
                                        }
                                C.当方法或其它代码块被执行时,基本数据类型的"值"和引用数据类型的"引用"都是存储在"栈"中;
                                D.当方法或代码块执行完毕时,会被立即清理;
  1. /*
  2.         局部变量:
  3.                 1.定义的位置:在某个方法,或者代码块内部;
  4.                 2.在内存中的位置:在"栈"中:
  5.                                 基本数据类型:int a = 10; //a 和10 都存储在栈中
  6.                                 引用数据类型:int[] array = new int[3];// array 和 "数组的引用"都存储在栈中;

  7.                 3.在使用(获取值)前,必须要先赋初始值;
  8.                 4.当所在的方法,或者代码块执行完毕,对于"局部变量"的"栈"内存,会立即释放;
  9.         成员变量:
  10.                 1.定义的位置:在"类体"中;
  11.                 2.在内存中的位置:在"堆"中;

  12.                 3.定义后,即使不赋初始值,也可以直接访问。因为JVM会自动赋初始值:
  13.                                 整数:0
  14.                                 小数:0.0
  15.                                 字符:'\u0000'
  16.                                 布尔:false
  17.                                 引用类型:null
  18.                 4.当栈中的引用消失后,堆中的内容不会立即消失,会成为垃圾,后期被"垃圾回收器"自动检测,并处理。
  19. */
  20. class Book
  21. {
  22.         String name;//成员变量
  23.         String author;//成员变量
  24. }
  25. class Demo
  26. {
  27.         public static void main(String[] args)
  28.         {
  29.                 int a = 10 ;//局部变量
  30.                 int[] arr = {24,4,23};

  31.                 System.out.println(a);//a此时没有值,编译错误
  32.                 for(int i = 0;i < 10 ;i++){//i 是局部变量
  33.                 }
  34.         }
  35. }
复制代码

1 个回复

倒序浏览
总结得相当详细  感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马