技术黑马程序员成员变量和局部变量

Java语言中可以将变量分为两大类:成员变量和局部变量。它们在运行机制,存储方式,作用范围等方面有所不同。作为Java初学者,应该掌握成员变量和局部变量的特征,知其然知其所以然,更高效地编写代码。

成员变量和局部变量的关系如下图所示:

成员变量是在类里定义的;局部变量是在方法里定义的。成员变量被分为实例变量和类变量两种,实例变量没有static修饰,类变量有static修饰,例:

实例变量:publicStringname;

类变量:publicstaticStringname;

实例变量从该类的实例创建开始就存在,直到系统完全销毁这个实例,才会消失,其作用域与实例的作用域相同;类变量从类的准备阶段起就开始存在,直到系统完全销毁这个类,类变量的作用域也是与这个类的作用域相同。正是基于这个原因,可以把类变量和实例变量称为成员变量,类变量与类共存亡,实例变量与该实例共存亡。

类变量的访问方法为:“类名.类变量”;实例变量的访问方法为:“实例名.实例变量”。类变量也能以“实例名.类变量”进行访问,但这样的访问方式会让人产生误解,容易与“实例名.实例变量”产生混淆,请看如下代码:

publicclassTest{publicstaticvoidmain(String[]args){Demod=newDemo();Demo.name=我是程序员;d.name=我是黑马程序员;//打印结果为“我是黑马程序员System.out.println(Demo.name);}}//定义一个类classDemo{//定义一个类变量publicstaticStringname;}上面的代码显示,改变了对象中的变量同时,居然改变了类变量。实际上,这是java的一个bug,java允许通过对象名.类变量来调用类变量,对象名.类变量=类名.类变量。所以无论是对象调用类变量还是类名调用类变量,都是内存中的同一个类变量。为了阅读方便,建议大家以后在调用类变量时, 用类名.类变量进行调用,而不用对象名.类变量(避免和对象名.实例变量相混淆)。

局部变量根据定义形式的不同,可以被分为以下三种:

1.形参:在定义方法签名时定义的变量,形参的作用域在整个方法内有效。

2.方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效。

3.代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域从定义该变量的地方生效,到该代码块结束时失效。

与成员变量不同的是,局部变量除了形参之外,都必须显示初始化,也就是说,必须先给方法局部变量和代码块局部变量指定初始值,否则不可以访问它们。

一点需要注意,Java允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量(所谓强龙不压地头蛇),如果需要在这个方法里引用同名成员变量,可使用this(对于实例变量)或类名(作为类变量)作为调用者来访问成员变量。如下代码所示:

publicclassTest{publicstaticvoidmain(String[]args){Demod=newDemo();//将会打印两行; 行为局部变量1,第二行为成员变量2d.info();}}//定义一个类classDemo{publicStringname1=成员变量1;publicStringname2=成员变量2;publicvoidinfo(){Stringname1=局部变量1;Stringname2=局部变量2;System.out.println(name1);System.out.println(this.name2);}}

长按







































早期如何治疗白癜风好
北京治疗白癜风哪家正规



转载请注明:http://www.xxcyfilter.com/zyfl/3650.html