Java成员变量与局部变量

l  成员变量和局部变量

成员变量:在类范围内的属性就是成员变量。在类这个范围内(不包含方法和其他成员)带有static修饰的属性就是类的属性,不带static修饰的属性就是对象(实例)属性。类属性与类共存亡,对象属性与对象共存亡,当类销毁时类属性才会消失,当对象消失时,对象属性才消失。

 

局部变量:方法中的形式参数、在方法中的变量、代码块局部变量都是局部变量。局部变量是在执行方法时生效,当方法执行结束时,这个方法中的局部变量消失。代码块局部变量执行完代码块后这个局部变量消失。

 

注意:Java能通过对象来访问类属性。当新建一个对象时候访问类属性居然属性有值,因为对象也能访问类属性并且可以修改它,其他对象访问它的时候它的值就是改变的了,他们访问的是通一个内存区。

           成员变量无需初始化也能使用,局部变量必须初始化后才能使用,但是方法的形式参数不用显示的初始化,形参初始化在调用方法时由系统完成,形参值由方法调用者负责指定。

 

变量命名规范:开头为小写字母,后面是连续的单个或多个连续合法字符或单词,并且从第二个单词开始首字母大写。

 

成员变量与局部变量的异同:

   成员变量在声明时不需要显示的初始化成员变量,但是局部变量在声明的时候就要给它初始化赋值。

 

 


//成员变量

class Var

{

         publicString name;                  //这个是成员变量,具体属于对象属性

         publicstatic int eyeNum;       //这个也是成员变量,具体属于类属性

}

 

public class PersonTest2

{

         publicstatic void main(String[] args)

         {

                   System.out.println(Var.eyeNum);

 

                   Varv = new Var();

                   System.out.println(v.name+ " " +  v.eyeNum);

 

                   v.name= "name";

                   v.eyeNum=520;

                   System.out.println(v.name+ " " +  v.eyeNum);

 

                   Varv2 = new Var();           //再次定义一个新的对象

                   System.out.println(v2.eyeNum);  //这里的输出结果会让你诧异。这里输出结果也是:520

 

         }

         }

 

 

·成员变量初始化和内存中的运行机制

   当系统加载类或创建对象时,系统自动为成员变量分配内存空间并初始化它。上例中当执行Var v = new Var(); 后如果系统没有初始化过Var类,则初始化Var类并在堆中分配这个类属性eyeNum的内存(这是类属性独立的内存,与对象没关系),接着在堆内存创建Var对象并把Var对象的地址赋值给v这个引用变量,对象属性是是包含在对象中的,所以对象属性name存在于堆内存的对象中,对象属性在创建对象时分配内存空间并初始化(所以这里对象中并没有包含类属性eyeNum)。因为可以使用对象.类属性,去修改类属性的值,这里用v引用变量的Var对象改变了eyeNum的值,下面又用v2引用变量的Var对象调用eyeNum类属性,此时v与v2引用变量的对象都修改访问的都是Var类属性eyeNum的那块内存,所以他们访问的是同一个eyeNum属性,所以下面的v2.eyeNum的值是v.eyeNum 修改过的值。

 

  建议访问类属性时候不要用对象.类属性来访问,用类.类属性来访问,以免造成混乱。所以把上面用对象调用类属性改为用该属性的类调用它。

 

 

 

局部变量作用域

·形参:整个方法内有效。

·方法局部变量:从定义该变量的地方生效,到方法结束变量消失。

·代码块局部变量:只在这个代码块内有效。

 

·使用类或对象调用方法时,会在方法的栈区初始化方法的局部变量

·Java中允许成员变量与局部变量同名,如果他们同名局部变量会覆盖成员变量,如果在这个方法中引用被覆盖的成员变量使用this指令(因为this.属性,就是对象或类的属性)。虽然这样但是还是尽量避免同名。

 

 


public class Var

{

         privateString name = "Fq";

         privatestatic double price = 88.0;

 

         publicstatic void main(String[] args)

         {

                   intprice = 66;

 

                   System.out.println(price);

 

                   System.out.println(Var.price);

        

                   newVar().vara();

         }

 

 

         publicvoid vara()

         {

 

                   Stringname = "HouGE";                  //局部变量覆盖成员变量。

                   System.out.println(name);

 

                   System.out.println(this.name);    //因为是var()对象调用的vara()方法,所以this代表var对象

         }

}

 

 

 

局部变量的初始化和内存中的运行机制

  局部变量不属于任何对象或类,它保存在其所在方法的栈内存中,栈内存中的变量无需垃圾回收,方法结束变量消失。局部变量只保存基本类型的值或引用变量的地址值。

 

变量的使用规则:

·类成员变量:如果定义对象固有信息,例如人有2只眼睛,就可以定义为类属性。

·对象成员变量:如果信息是对象相关的,例如张三体重与李四的体重,它们体重就可以定义为对象属性。

·在某个类中需要以一个变量保存该类或实例的运行时状态信息,例如五子棋程序中的棋盘数组,用以保存五子棋实例的运行时状态信息,就用成员变量。

·如果某个信息需要在某个类的多个方法之间共享,都用成员变量。

 

  能用局部变量尽量用局部变量,这样程序占用内存小程序运行速度快(局部变量作用域就是方法,所以当方法结束后它就消失了),程序性能就好,同时提升程序内聚性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值