Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java APIs 和框架

Java 类引用

Java 有用资源

Java - 变量作用域



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

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

Java 实例变量的作用域

在类内但所有方法和块之外声明的变量是实例变量。实例变量的一般作用域是在整个类中,静态方法除外。实例变量的生命周期直到对象保留在内存中。

示例

在下面的示例中,我们在 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() );
   }
}

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

输出

Puppy Age :2

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

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

示例

在下面的示例中,我们在 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 );
   }
}

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

输出

Puppy Age :2
Breed :Bulldog

Java 局部变量的作用域

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

示例

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

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);
   }
}

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

输出

Puppy Age :2
Breed :Bulldog
c: 30

关于变量作用域的重要几点

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