King's Studio

Java中变量的作用范围

字数统计: 648阅读时长: 2 min
2019/01/13 Share

继续Java语法的复习,最近在学习的过程中,发现很多地方会定义重名的变量,一旦重名变量多了之后,就会分不清各个变量是做什么用的,所以现在想到来总结一下变量的作用范围以及定义的时候应该注意的问题。

Java中变量的作用范围

类的变量的作用域是整个类,即类中的方法都可以进行访问和操作;而方法中声明的变量的作用域在方法内部;像for/while/try…catch/if语句中声明的变量作用域在对应的语句块内。总结下来,大部分情况下,变量的作用域就是包含它的一对大括号。

特殊情况

当类中声明一个变量,类中的方法也声明了一个同名的变量,这种情况不会冲突,默认会优先使用方法中的变量,而要给类中的成员变量赋值时,则需用到this关键字。这一点,带有参数的方法中就能体现。

1
2
3
4
5
6
7
8
9
10
11
public class Test {
private String name;
public String getName() {
return name;
}
//含参方法,参数名和成员变量同名,用this关键字调用成员变量
//this关键字只能在类的方法中使用,不能在外部使用
public void setName(String name) {
this.name = name;
}
}

而像我们最常用的for循环,我们经常能够见到定义循环次数变量i,两个不同的for循环中,能够重复使用变量i,此时的变量i会冲突吗?答案是不会,因为在循环内部声明的变量,外部是无法识别的,所以一个同名的变量在不同循环中是没有冲突的,但当循环之间有包含关系时,就会引起冲突。if/while/try…catch语句同理。

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args){
//两个不同的循环,含有同名变量,但不冲突
for(int i = 1, int j = 0; i < 10; i++){
j += i;
System.out.println("j = " + j);
}
for(int i = 1, int j = 1; i < 5; i++){
j *= i;
System.out.println("j = " + j);
}
}

注意

为什么有时候两个方法块内会出现同名的变量而不会有冲突呢?这是因为,当执行完第一个方法后,该方法所使用的局部变量就会被回收,下一个方法再执行时,JVM会对该局部变量重新声明并使用,所以两个方法块内的同名变量并不会产生冲突。

原文作者:金奇

原文链接:https://www.rossontheway.com/2019/01/13/java回顾1/

发表日期:January 13th 2019, 12:00:00 am

更新日期:March 21st 2019, 9:35:20 am

版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,除特别声明外,转载请注明出处!

CATALOG
  1. 1. Java中变量的作用范围
  2. 2. 特殊情况
  3. 3. 注意