Java 简明教程

Java - Variable Types

What is a Java Variable?

变量为我们的程序提供命名存储,以便其进行操作。Java 中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局;可以在该内存中存储的值的范围;以及可以应用于该变量的操作集。

Variable Declaration and Initialization

在你使用所有变量之前,都必须声明它们。以下是变量声明的基本形式 −

data type variable [ = value][, variable [ = value] ...] ;

此处数据类型是 Java’s data types 之一,变量是变量的名称。要声明指定类型的多个变量,可以使用以逗号分隔的列表。

Example of Valid Variables Declarations and Initializations

以下是在 Java 中变量声明和初始化的有效示例 −

int a, b, c;         // Declares three ints, a, b, and c.
int a = 10, b = 10;  // Example of initialization
byte B = 22;         // initializes a byte type variable B.
double pi = 3.14159; // declares and assigns a value of PI.
char a = 'a';        // the char variable a iis initialized with value 'a'

Java Variables Types

以下是三种类型的 Java 变量:

  1. Local variables

  2. Instance variables

  3. Class/Static variables

1. Java Local Variables

  1. 局部变量在 methodsconstructors 或代码块中声明。

  2. 局部变量是在进入方法、构造函数或块时创建的,并且将在退出方法、构造函数或块后销毁该变量。

  3. Access modifiers 无法用于局部变量。

  4. 局部变量仅在已声明的方法、构造函数或块中可见。

  5. 局部变量在内部以栈级别实现。

  6. 局部变量没有默认值,因此在首次使用之前应声明局部变量并分配一个初始值。

这里,age 是一个局部变量。它在 pupAge() 方法中定义,并且其范围仅限于此方法。

public class Test {
   public void pupAge() {
      int age = 0;
      age = age + 7;
      System.out.println("Puppy age is : " + age);
   }

   public static void main(String args[]) {
      Test test = new Test();
      test.pupAge();
   }
}

Output

Puppy age is: 7

以下示例在未初始化的情况下使用了 age,因此它将在编译时给出错误。

public class Test {
   public void pupAge() {
      int age;
      age = age + 7;
      System.out.println("Puppy age is : " + age);
   }

   public static void main(String args[]) {
      Test test = new Test();
      test.pupAge();
   }
}

Output

Test.java:4:variable number might not have been initialized
age = age + 7;
         ^
1 error

2. Java Instance Variables

  1. 实例变量在 class 中声明,但在方法、构造函数或任何块的外部。

  2. 当在堆中为对象分配空间时,将为每个实例变量值创建一个槽。

  3. 当使用关键字“new”创建对象时将创建实例变量,并在销毁对象时销毁实例变量。

  4. 实例变量保存着必须由不止一个方法、构造函数或块引用的值,或者是必须在整个类中存在的对象的必需状态部分。

  5. 实例变量可以在使用之前或之后在类级别中声明。

  6. 实例变量可以提供访问修饰符。

  7. 实例变量对于类中的所有方法、构造函数和块可见。通常,建议将这些变量设为私有(访问级别)。但是,可以使用访问修饰符为这些变量提供子类的可见性。

  8. 实例变量具有默认值。对于数字,默认值是 0,对于布尔值,默认值是 false,而对于对象引用,默认值是 null。在声明期间或在构造函数中可以分配值。

  9. 可以通过在类内调用变量名称直接访问实例变量。但是,在静态方法中(当实例变量具有可访问性时),应使用完全限定名调用它们。ObjectReference.VariableName。

import java.io.*;

public class Employee {

   // this instance variable is visible for any child class.
   public String name;

   // salary  variable is visible in Employee class only.
   private double salary;

   // The name variable is assigned in the constructor.
   public Employee (String empName) {
      name = empName;
   }

   // The salary variable is assigned a value.
   public void setSalary(double empSal) {
      salary = empSal;
   }

   // This method prints the employee details.
   public void printEmp() {
      System.out.println("name  : " + name );
      System.out.println("salary :" + salary);
   }

   public static void main(String args[]) {
      Employee empOne = new Employee("Ransika");
      empOne.setSalary(1000);
      empOne.printEmp();
   }
}

Output

name  : Ransika
salary :1000.0

3. Java Class/Static Variables

  1. 类变量(也称为静态变量)在类中使用 static 关键字声明,但位于方法、构造函数或块外部。

  2. 每个类只会有一个类变量副本,无论从它创建了多少个对象。

  3. 静态变量很少使用,除了被声明为常量。常量是被声明为 public/private、final 和 static 的变量。常量变量永远不会从其初始值更改。

  4. 静态变量存储在静态内存中。除了声明为 final 并用作公共或私有常量外,很少使用静态变量。

  5. 静态变量在程序启动时创建,并在程序停止时销毁。

  6. 可见性类似于实例变量。然而,大多数静态变量被声明为公共的,因为它们必须对类的用户可用。

  7. 默认值与实例变量相同。对于数字,默认值是 0;对于布尔值,默认值是 false;而对于对象引用,默认值是 null。在声明期间或在构造函数中可以分配值。此外,还可以在特殊的静态初始化程序块中分配值。

  8. 可以通过用类名 ClassName.VariableName 调用访问静态变量。

  9. 在将类变量声明为 public static final 时,则变量名(常量)均为大写。如果静态变量不是公共的和最终的,则命名语法与实例变量和局部变量相同。

import java.io.*;

public class Employee {

   // salary  variable is a private static variable
   private static double salary;

   // DEPARTMENT is a constant
   public static final String DEPARTMENT = "Development ";

   public static void main(String args[]) {
      salary = 1000;
      System.out.println(DEPARTMENT + "average salary:" + salary);
   }
}

Output

Development average salary:1000

Note − 如果变量是从外部类访问的,则常量应作为 Employee.DEPARTMENT 访问

What is Next?

您已经在本章中使用过访问修饰符(public 和 private)。下一章将详细说明访问修饰符和非访问修饰符。