继续Java语法的复习,最近在学习的过程中,发现很多地方会定义重名的变量,一旦重名变量多了之后,就会分不清各个变量是做什么用的,所以现在想到来总结一下变量的作用范围以及定义的时候应该注意的问题。
Java中变量的作用范围
类的变量的作用域是整个类,即类中的方法都可以进行访问和操作;而方法中声明的变量的作用域在方法内部;像for/while/try…catch/if语句中声明的变量作用域在对应的语句块内。总结下来,大部分情况下,变量的作用域就是包含它的一对大括号。
特殊情况
当类中声明一个变量,类中的方法也声明了一个同名的变量,这种情况不会冲突,默认会优先使用方法中的变量,而要给类中的成员变量赋值时,则需用到this关键字。这一点,带有参数的方法中就能体现。
1 | public class Test { |
而像我们最常用的for循环,我们经常能够见到定义循环次数变量i,两个不同的for循环中,能够重复使用变量i,此时的变量i会冲突吗?答案是不会,因为在循环内部声明的变量,外部是无法识别的,所以一个同名的变量在不同循环中是没有冲突的,但当循环之间有包含关系时,就会引起冲突。if/while/try…catch语句同理。
1 | public static void main(String[] args){ |
注意
为什么有时候两个方法块内会出现同名的变量而不会有冲突呢?这是因为,当执行完第一个方法后,该方法所使用的局部变量就会被回收,下一个方法再执行时,JVM会对该局部变量重新声明并使用,所以两个方法块内的同名变量并不会产生冲突。