JAVA笔记:成员变量与局部变量

来源:互联网 发布:数据库系统的主要功能 编辑:程序博客网 时间:2024/06/05 15:02

1、成员变量定义:【修饰符】 属性类型 属性名 【=属性值】

           【修饰符】:成员变量的上一级单元为类,所以修饰符public、protected(父子类访问权限)、private(同一个类的访问权限)、省略的话默认包访问权限

           【属性类型】:基本类型、引用类型

           【属性名】:第一个单词首字母小写,其他单词首字母大写。

      a.类成员变量(static修饰的成员变量)

               生命周期:类准备阶段开始存在,直到系统完全销毁这个类(也就是说这个变量是类的全局变量,对象访问此变量时互相影响)。

               内存分配:分配在堆,并且只分配一块内存块,由垃圾回收器来控制回收。

               初始化:加载类时默认初始化,也可以通过静态初始化块或定义处显式初始化。

               调用方式:类名.变量、实例.变量(实际上还是调用类的成员变量,这样导致降低可读性,不建议使用)

               final(不可变)修饰符:必须在静态初始化块或变量定义处显式初始化,否则出错。

      b.实例成员变量(非static修饰的成员变量)

               生命周期:与对象实例的生命周期一致(也就是说对象的成员变量是在不同的内存块,所以访问实例变量时不会互相影响)。

               内存分配:分配在堆,并且不同的对象分配不同的内存块,由垃圾回收器来控制回收。

               初始化:创建对象时默认初始化,也可以通过普通初始化块或定义出或构造方法进行显式初始化。

               调用方式:实例.变量

               final(不可变)修饰符:必须在普通初始化块或变量定义处或构造方法中显式初始化,并且只能够初始化一次,否则出错。

      c.成员变量默认的初始值

              基本类型:byte、short、int、long默认为0

              基本类型:float、double默认为0.0

              基本类型:char默认为\u0000

              基本类型:boolean默认为false

              引用类型:默认为null


2、局部变量定义:变量类型 变量名 【=变量值】

        【变量类型】:基本类型、引用类型          

        【变量名】:第一个单词首字母小写,其他单词首字母大写。 

     a.局部变量

             生命周期:

                      形参:整个方法内有效

                     局部变量:变量定义处开始,直到方法结束。

                     代码块局部变量:变量定义处开始,直到代码块结束。

             内存分配: 在栈中分配内存,随方法结束或者代码块结束销毁。

                     基本类型变量:存放变量的值

                     引用类型变量:存放指向该类型对象的地址

              初始化:必须进行显式初始化后,才能够使用此变量

              调用方式:

                     首先查找方法内的局部变量、然后查找本来的成员变量、然后查找父类的成员变量...最后查找根类的成员变量。

                     变量冲突时访问:this.成员变量(访问本类的成员变量)、super.成员变量(访问父类的成员变量)来解决与局部变量的冲突。

              final修饰局部变量:只能够进行一次初始化

                     基本类型:不能够对基本类型进行重新赋值,因此基本类型变量的值不会被改变。

                     引用类型:只保存引用的一个地址,因此只是引用的地址不会被改变,而引用的这个对象是完全可以被改变的。


final修饰符(宏替换规则,也就是编译时期final定义的变量用常量来替换):

        a.必须要用final来修饰

        b.在变量定义处进行初始化

        c.在编译时期就能够确定其值(如常量、基本算术表达式、字符串连接运算,不能够访问普通变量,调用方式)

                基本类型常量池、字符串常量池。

                        String a ="java";            执行此语句之后,系统的字符串池中就会缓存一个字符串java

                        String b = "java";          系统会在字符串池中查找java字符串,如果找到则b直接指向此内存块,所以  a==b 将会返回true

                                                                         

使用规则:

      定义变量时,尽量缩小变量的作用范围,否则

              a.增大了变量的生存空间,这将导致更大的内存开销

              b.扩大了变量的作用域,这不利于提高程序的内聚性。

       如下几种情况使用成员变量

             a.类或实例固有的属性

             b.保存类或实例运行时的状态

             c.多个方法之间进行共享

 

案例参考《JAVA疯狂讲义》

原创粉丝点击