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

在本教程中,我们将了解 Java 的不同类型的作用域变量。

Java实例变量的范围

在类内部以及所有方法和块外部声明的变量是实例变量。实例变量的一般作用域在整个类中,静态方法除外。实例变量的生存期是直到对象留在内存中为止。

示例:Java 实例变量的作用域

在下面的示例中,我们定义了一个实例变量 puppyAge 我们通过setAge()方法修改它,我们通过 getAge() 方法获取它。该变量在 myPuppy 对象实例的生命周期内一直可用。

package com.yxjc123;

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("Puppy Age :" + myPuppy.getAge() );
   }
} 

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

输出

Puppy Age :2 

Java 类(静态)变量的范围

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

示例:Java 类(静态)变量的作用域

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

package com.yxjc123;

public class Puppy {
   private int puppyAge;
   public static String BREED="Bulldog";
   
   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("Puppy Age :" + myPuppy.getAge() );
      //访问类变量
      System.out.println("Breed :" + Puppy.BREED );
   }
} 

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

输出

Puppy Age :2
Breed :Bulldog 

Java 局部变量的范围

所有不是实例和类变量的其他变量都被视为局部变量,包括方法中的参数。局部变量的作用域在声明该变量的块内,局部变量的生存期为直到控件离开声明它的块为止。

示例:Java 局部变量示例

在下面的示例中,我们在 Puppy的 main() 方法中定义了两个局部变量 。这些变量在声明这些变量的方法/块的生命周期内一直可用,并且可以按如下所示访问:

package com.yxjc123;

public class Puppy {
   private int puppyAge;
   public static String BREED="Bulldog";
   
   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("Puppy Age :" + myPuppy.getAge() );
      //访问类变量
      System.out.println("Breed :" + Puppy.BREED );
	  
      //局部变量
      int a = 10;
      int b = 20;
      
      int c = a + b;
      
      System.out.println("c: " + c);
   }
} 

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

输出

Puppy Age :2
Breed :Bulldog
c: 30 

关于变量范围的重要要点

默认情况下,变量具有默认访问权限。默认的访问修饰符意味着我们不显式地为类、字段、方法等声明访问修饰符。
在没有任何访问控制修饰符的情况下声明的变量或方法可用于同一包中的任何其他类。接口中的字段是隐式公共静态final,接口中的方法默认是public的。
Java提供了许多访问修饰符来设置类、变量、方法和构造函数的访问级别。四个访问级别是
  • default−对包可见。不需要修改器。
  • private−仅对类可见。
  • public-世界可见。
  • protected−对包和所有子类可见。