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 变量:
-
Local variables
-
Instance variables
-
Class/Static variables
1. Java Local Variables
-
局部变量在 methods、 constructors 或代码块中声明。
-
局部变量是在进入方法、构造函数或块时创建的,并且将在退出方法、构造函数或块后销毁该变量。
-
Access modifiers 无法用于局部变量。
-
局部变量仅在已声明的方法、构造函数或块中可见。
-
局部变量在内部以栈级别实现。
-
局部变量没有默认值,因此在首次使用之前应声明局部变量并分配一个初始值。
这里,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
-
实例变量在 class 中声明,但在方法、构造函数或任何块的外部。
-
当在堆中为对象分配空间时,将为每个实例变量值创建一个槽。
-
当使用关键字“new”创建对象时将创建实例变量,并在销毁对象时销毁实例变量。
-
实例变量保存着必须由不止一个方法、构造函数或块引用的值,或者是必须在整个类中存在的对象的必需状态部分。
-
实例变量可以在使用之前或之后在类级别中声明。
-
实例变量可以提供访问修饰符。
-
实例变量对于类中的所有方法、构造函数和块可见。通常,建议将这些变量设为私有(访问级别)。但是,可以使用访问修饰符为这些变量提供子类的可见性。
-
实例变量具有默认值。对于数字,默认值是 0,对于布尔值,默认值是 false,而对于对象引用,默认值是 null。在声明期间或在构造函数中可以分配值。
-
可以通过在类内调用变量名称直接访问实例变量。但是,在静态方法中(当实例变量具有可访问性时),应使用完全限定名调用它们。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
-
类变量(也称为静态变量)在类中使用 static 关键字声明,但位于方法、构造函数或块外部。
-
每个类只会有一个类变量副本,无论从它创建了多少个对象。
-
静态变量很少使用,除了被声明为常量。常量是被声明为 public/private、final 和 static 的变量。常量变量永远不会从其初始值更改。
-
静态变量存储在静态内存中。除了声明为 final 并用作公共或私有常量外,很少使用静态变量。
-
静态变量在程序启动时创建,并在程序停止时销毁。
-
可见性类似于实例变量。然而,大多数静态变量被声明为公共的,因为它们必须对类的用户可用。
-
默认值与实例变量相同。对于数字,默认值是 0;对于布尔值,默认值是 false;而对于对象引用,默认值是 null。在声明期间或在构造函数中可以分配值。此外,还可以在特殊的静态初始化程序块中分配值。
-
可以通过用类名 ClassName.VariableName 调用访问静态变量。
-
在将类变量声明为 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 访问