1. 域的定义
-
域 是类或对象中声明的变量,用于存储数据。
-
域可以是 静态域(Static Field) 或 实例域(Instance Field)。
-
域的作用是描述类或对象的特征或状态。
2. 域的类型
(1)实例域(Instance Field)
-
属于类的每个对象(实例)。
-
每个对象都有自己的一份实例域的拷贝。
-
实例域的值可以因对象而异。
-
示例:
class Employee { private int id; // 实例域 private String name; // 实例域 }
-
每个
Employee
对象都有自己的id
和name
。
-
(2)静态域(Static Field)
-
属于类本身,而不是类的某个实例。
-
无论创建多少个对象,静态域在内存中只有一份拷贝。
-
静态域的值在所有对象之间共享。
-
示例:
public class Math { private static double PI= 3.1415926; // 静态域 }
-
所有 Math对象共享同一个 PI。
-
通过Math.PI获取这个常量
-
如果没有声明static,PI就变成Math类的一个实例域,需要通过Math的类对象访问PI,并且,每个Math对象都有属于自己的PI拷贝。
-
3. 域的作用域
-
作用域 是指变量在程序中的可见性和生命周期。
-
域的作用域取决于它的修饰符(如
public
、private
、protected
)以及是否使用static
。
(1)实例域的作用域
-
实例域的作用域是整个类的实例。
-
实例域在对象创建时分配内存,在对象销毁时释放内存。
-
示例:
class Employee { private int id; // 实例域,作用域是整个对象 }
(2)静态域的作用域
-
静态域的作用域是整个类。
-
静态域在类加载时分配内存,在程序结束时释放内存。
-
示例:
class Employee { private static int nextId; // 静态域,作用域是整个类 }
4.本地方法
在System类中,setOut方法可以将System.out设置为不同的流。这个方法可以修改final变量值,这是由于setOut是一个本地方法,而不是由Java语言实现的。本地方法可以绕过Java语言的存取机制。