Java 简明教程

Java - Variable Scopes

变量的作用域是指在给定的程序或函数中创建和访问它们的那个区域。变量作用域还指它的生命周期。

在本教程中,我们将学习不同类型 Java variables 的范围。

Scope of Java Instance Variables

class 内且在所有方法和块的外部声明的变量是一个实例变量。实例变量的一般范围在整个类中,静态方法除外。实例变量的生命周期是对象保留在内存中为止。

Example: Scope of Java Instance Variables

在下面的示例中,我们定义了 Puppy 类中的实例变量 puppyAge,并使用了 setAge() 来修改它,使用了 getAge() 方法来获取它。此变量在 myPuppy 对象实例的生命期内可用。

package com.tutorialspoint;

public class Puppy {
   private int puppyAge;

   public void setAge( int age ) {
      // access the instance variable and modify it
      puppyAge = age;
   }

   public int getAge( ) {
	  // access the instance variable
      return puppyAge;
   }

   public static void main(String []args) {
      Puppy myPuppy = new Puppy();
      myPuppy.setAge( 2 );
      System.out.println("Puppy Age :" + myPuppy.getAge() );
   }
}

编译并运行程序。这将产生以下结果−

Output

Puppy Age :2

Scope of Java Local Variables

在类内、在所有块外部声明并标记为静态的变量被称为类变量。类变量的一般作用域是在整个类的范围内,并且类变量的生命周期持续到程序结束或类加载到内存中。

Example: Scope of Java Local Variables

在下面的示例中,我们在 Puppy 类中定义了一个类变量 BREED。此变量在程序的整个生命周期内可用。由于其静态性质,我们可以直接使用类名来访问它,如下所示:

package com.tutorialspoint;

public class Puppy {
   private int puppyAge;
   public static String BREED="Bulldog";

   public void setAge( int age ) {
      // access the instance variable and modify it
      puppyAge = age;
   }

   public int getAge( ) {
	  // access the instance variable
      return puppyAge;
   }

   public static void main(String []args) {
      Puppy myPuppy = new Puppy();
      myPuppy.setAge( 2 );
      System.out.println("Puppy Age :" + myPuppy.getAge() );
      // access the class variable
      System.out.println("Breed :" + Puppy.BREED );
   }
}

编译并运行程序。这将产生以下结果−

Output

Puppy Age :2
Breed :Bulldog

Scope of Java Class (Static) Variables

所有其他不是实例变量和类变量的变量,包括方法中的参数,都将被视为局部变量。局部变量的作用域是在其被声明的块内,并且局部变量的生命周期持续到控制权离开其被声明的块时为止。

Example: Scope of Java Class (Static) Variables

在下方的示例中,我们在 Puppy 类的 main() 方法中定义了两个本地变量。这些变量在声明所在的持续lifetime 方法/块中可用,可以如下所示访问:

package com.tutorialspoint;

public class Puppy {
   private int puppyAge;
   public static String BREED="Bulldog";

   public void setAge( int age ) {
      // access the instance variable and modify it
      puppyAge = age;
   }

   public int getAge( ) {
	  // access the instance variable
      return puppyAge;
   }

   public static void main(String []args) {
      Puppy myPuppy = new Puppy();
      myPuppy.setAge( 2 );
      System.out.println("Puppy Age :" + myPuppy.getAge() );
      // access the class variable
      System.out.println("Breed :" + Puppy.BREED );

      // local variables
      int a = 10;
      int b = 20;

      int c = a + b;

      System.out.println("c: " + c);
   }
}

编译并运行程序。这将产生以下结果−

Output

Puppy Age :2
Breed :Bulldog
c: 30

Important Points About Variables Scope

  1. 默认情况下,变量具有默认访问权限。默认访问修饰符意味着不显式地为类声明访问修饰符, fieldmethod 等。

  2. 在不声明任何 access control modifier 的情况下声明的变量或方法可用于同一包中的任何其他类。接口中的字段隐式地是 public static final,而接口中的方法默认情况下是 public。

  3. Java 提供了许多访问修饰符,用于设置类、变量、方法和构造函数的访问级别。四个访问级别为 − default − 对该包可见。不需要任何修饰符。 private − 仅对类可见。 public − 对整个世界可见。 protected − 对该包和所有子类可见。