首页 理论教育 局部变量和实例变量的区别

局部变量和实例变量的区别

时间:2022-02-28 理论教育 版权反馈
【摘要】:实例变量和类变量定义在类内、方法外的变量,它们的作用域是以类为单位的。区别在于引用变量的方式不同。因此,若某一局部变量与类的实例变量名或类变量名相同时,局部变量在查找时首先被查找,而该实例变量或类变量在方法体内被暂时“屏蔽”起来,只有退出这个方法后,实例变量或类变量才起作用。图4-3显示了ClassName类中各个变量的作用域。

4.4.5 变量的作用域

类中定义的变量可分为局部变量、实例变量、类变量、方法参数和异常处理参数。

变量的作用域是指变量有效使用的范围,是变量的属性。根据定义变量的位置不同,其作用域也不相同。

局部变量是定义在块内、方法内的变量。其作用域是以块和方法为单位的,仅在定义该变量的块或方法内有效。

实例变量和类变量定义在类内、方法外的变量,它们的作用域是以类为单位的。区别在于引用变量的方式不同。引用实例变量的方式是对象变量名.实例变量名,引用类变量的方式是类名.类变量名或对象变量名.类变量名。

方法参数和异常处理参数的作用域分别是以方法和块为单位的,与局部变量类似。

局部变量可以与类变量、实例变量同名。因为当一个方法使用某个变量时,按以下的顺序查找变量定义:当前方法、当前类、一级一级向上经过各级父类、import类和包,若都找不到所引用的变量定义,则产生编译错误。因此,若某一局部变量与类的实例变量名或类变量名相同时,局部变量在查找时首先被查找,而该实例变量或类变量在方法体内被暂时“屏蔽”起来,只有退出这个方法后,实例变量或类变量才起作用。

在局部变量的作用域中,当语句块有嵌套时,内层语句块定义的变量不能与外层语句块的变量同名。

img193

img194

方法method输出的结果为:x=6(注:这个程序不能直接运行)。

img195

图4-3 ClassName类中各个变量的作用域

图4-3显示了ClassName类中各个变量的作用域。成员变量i与方法f()中的局部变量i和方法i()中的局部变量i同名,方法i()的方法名与成员变量i同名,这些是合法的;而方法f()中的局部变量i和其块语句中的局部变量i同名,方法i()中的局部变量i和其块语句中的局部变量i同名,这些是非法的。

局部变量、实例变量和类变量的小结:

(1)局部变量与成员变量(实例变量、类变量)的变量名可以相同;

(2)局部变量的语句块发生嵌套时,内层语句块定义的变量不能与外层语句块定义的变量同名;

(3)成员变量名可与成员方法名相同;

(4)方法的参数属于局部变量;

(5)局部变量必须显式初始化,成员变量不必显式初始化,系统首先给成员变量分配一个默认值;

(6)方法体内不能定义类变量。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈