变量的作用域指的是它们在一个特定的程序或函数中被创建和访问的区域。变量的作用域也决定了它的生命周期。
在本教程中,我们将了解不同类型的 Java 变量的作用域。
Java 实例变量的作用域
一个变量如果在类内部声明但在所有方法和块之外,则它是一个实例变量。实例变量的一般作用域是整个类,除了静态方法外。实例变量的生命周期直到对象保留在内存中为止。
示例:Java 实例变量的作用域
在下面的例子中,我们在 Puppy
类中定义了一个实例变量 puppyAge
,并通过 setAge()
修改它,使用 getAge()
获取它。这个变量一直有效直到 myPuppy
对象实例的生命周期结束。
package com.tutorialspoint;
public class Puppy {
private int puppyAge;
public void setAge( int age ) {
puppyAge = age;
}
public int getAge( ) {
return puppyAge;
}
public static void main(String []args) {
Puppy myPuppy = new Puppy();
myPuppy.setAge( 2 );
System.out.println("小狗年龄:" + myPuppy.getAge() );
}
}
输出
小狗年龄:2
Java 局部变量的作用域
一个变量如果在类内部声明但在所有块之外并且标记为 static
,则它是一个类变量。类变量的一般作用域是整个类,其生命周期直到程序结束或类保留在内存中为止。
示例:Java 局部变量的作用域
在下面的例子中,我们在 Puppy
类中定义了一个类变量 BREED
。这个变量在整个程序的生命周期内都是有效的。由于它是静态的,我们可以直接使用类名来访问它。
package com.tutorialspoint;
public class Puppy {
private int puppyAge;
public static String BREED = "斗牛犬";
public void setAge( int age ) {
puppyAge = age;
}
public int getAge( ) {
return puppyAge;
}
public static void main(String []args) {
Puppy myPuppy = new Puppy();
myPuppy.setAge( 2 );
System.out.println("小狗年龄:" + myPuppy.getAge() );
System.out.println("品种:" + Puppy.BREED );
}
}
输出
小狗年龄:2
品种:斗牛犬
Java 类(静态)变量的作用域
所有其他不是实例变量或类变量的变量都被视为局部变量,包括方法中的参数。局部变量的作用域在其声明的块内,其生命周期直到控制离开其声明所在的块为止。
示例:Java 类(静态)变量的作用域
在下面的例子中,我们在 Puppy
类的 main()
方法中定义了两个局部变量。这些变量在其声明的方法/块的生命周期内可用,并可以像下面这样访问:
package com.tutorialspoint;
public class Puppy {
private int puppyAge;
public static String BREED = "斗牛犬";
public void setAge( int age ) {
puppyAge = age;
}
public int getAge( ) {
return puppyAge;
}
public static void main(String []args) {
Puppy myPuppy = new Puppy();
myPuppy.setAge( 2 );
System.out.println("小狗年龄:" + myPuppy.getAge() );
System.out.println("品种:" + Puppy.BREED );
int a = 10;
int b = 20;
int c = a + b;
System.out.println("c: " + c);
}
}
输出
小狗年龄:2
品种:斗牛犬
c: 30
关于变量作用域的重要要点
-
默认情况下,一个变量具有默认访问权限。默认的访问修饰符意味着我们没有明确声明类、字段、方法等的访问修饰符。
-
没有声明任何访问控制修饰符的变量或方法对同一个包中的其他类可用。接口中的字段默认是
public static final
的,而接口中的方法默认是 public
的。
-
Java 提供了几种访问修饰符来设置类、变量、方法和构造函数的访问级别: