一、本地变量
本地变量的规则:
- 本地变量声明在方法、构造函数或区块内。
- 当我们进入到方法、构造函数或区块内时本地变量才被创建,而当方法、构造函数和区块执行完成后本地变量将被销毁。
- 我们不能为本地变量指定访问修饰符。
- 本地变量只在声明的方法、构造函数和区块内可见。
- 本地变量存储在栈(Stack)中。
- 本地变量没有默认值,因此在使用前我们应对本地变量进行初始化处理。
示例:
如果age未赋值,则程序报错。
public class Test {
public void pupAge() {
int age=0 ;
age = age + 7;
System.out.println("Puppy的年龄是: " + age);
}
public static void main(String[] args) {
Test test = new Test();
test.pupAge();
}
}
如果age未赋值,则程序报错。
二、实例变量
实例变量的规则:
- 实例变量声明在类中(方法、构造函数和区块之外)。
- 当我们通过
new
关键词创建了对象以后(在堆Heap中),该对象中的实例变量才会被创建,一旦对象被销毁,该对象的实例变量也将被自动销毁。 - 我们可以为实例变量指定访问修饰符。
- 我们可以在方法、构造函数和区块中访问类中定义的实例变量,通常情况下我们将它们定义为私有级别(private),为了让子类能够使用它们,我们也可以将修饰符调整为受保护(protected)。
- 实例变量有对应的默认值。例如:数字的默认值为0,boolean的默认值为false,对象引用的默认值为null,我们可以在变量定义或构造函数中为变量赋初值。
- 在当前类中我们可以通过变量名直接访问实例变量,然而在静态方法或其它类中我们必须通过全称访问他们。例如:
ObjectReference.VariableName
示例:
public class Employee {
// 实例变量name对所有类可见
public String name;
// 实例变量salary仅对Employee类可见
private double salary;
// 在Employee的构造函数中初始化name
public Employee(String empName) {
name = empName;
}
// 为实例变量salary赋值
public void setSalary(double empSal) {
salary = empSal;
}
// 该方法输出Employee的详细信息
public void printEmp() {
System.out.println("name : " + name);
System.out.println("salary :" + salary);
}
public static void main(String args[]) {
Employee empOne = new Employee("Tom");
empOne.setSalary(1000);
empOne.printEmp();
}
}
三、类变量(静态变量)
类变量的规则:
- 类变量也称作静态变量,我们通过使用
static
关键词修饰它,它必须声明在方法、构造函数和区块外。 - 无论该类生成了多少个实例对象,它们将共用同一个类变量。
- 通常类变量用于常量的声明(这里的常量特指初始化后不会再被修改的变量)。
- 类变量是在程序运行时创建的,程序运行结束时销毁的。
- 类变量初始化与实例变量相似,同时我们也可以在静态区块中初始化它们。
- 访问类变量时我们可以直接通过类名访问它们。
ClassName.VariableName
- 当我们使用public static final修饰类变量时,类变量的所有字母都应大写,如果类变量不是public和static的,那么变量的命名规则与实例变量和本地变量是一样的。
示例:
public class Employee {
// 此处的salary为私有静态变量
private static double salary;
// 此处的部门为公开静态变量(final)
public static final String DEPARTMENT = "部门 ";
public static void main(String args[]) {
salary = 1000;
System.out.println(DEPARTMENT + "平均薪资为: " + salary);
}
}
// 此处的salary为私有静态变量
private static double salary;
// 此处的部门为公开静态变量(final)
public static final String DEPARTMENT = "部门 ";
public static void main(String args[]) {
salary = 1000;
System.out.println(DEPARTMENT + "平均薪资为: " + salary);
}
}