一个简单的例子
class Man{
String name;
void introduce() {
System.out.println("大家好!我叫"+name+"。");
}
}
public class Test {
public static void main(String[] args) {
Man i=new Man();
i.name="张三";
i.introduce();
}
}
案例分析:
·本例中Man、i分别表示类Man和Man类的引用。new Man()创建一个对象,并返回对象的起始地址并赋值给i。
·类的基本定义形式为:
class 类名{ /*定义成员(包括成员变量/常量、成员方法等)*/ }
注意:
1)只能通过引用名来操控对象,不能通过属性值。(i.name是对的,"张三".name则不行)。
2)类成员可以缺省,俗称空类。(class Woman{})
3)成员变量可以定义递归。(class node{int dat; node next;})
4)在Java中,类是根据名字加以区分的,而非根据内容。
对象和对象引用的内存管理
内存空间的自动管理机制:基于栈的内存管理模式
栈空间中的数据被系统自动管理,即在函数调用是自动创建数据空间,在函数运行结束时自动释放数据空间。栈空间中的数据数据与特定函数直接相关。
程序员在函数中定义的所有变量,无论是基本类型还是引用类型,均存储与栈空间。
内存空间的手动管理机制:基于堆的内存管理模式
基于栈的内存管理模式虽然简便自动,但只能按照最大可能进行空间分配。基于堆的内存管理模式,在程序中给出申请或释放内存单元指令时,可实现内存单元的按需分配或释放。
所有对象均存储于堆空间。
对象及其引用的创建和初始化
1)引用的构造和初始化
int [][]x; String str;
int[] a={1,2,3}; str=" ";
2)对象的构造和结构化
new 构造函数名(参数);
#若类中未定义构造函数,则系统提供一个默认的构造函数。
#构造函数必须通过new指令调用。
对象的销毁
对象的数据成分可能很复杂、占用很多资源,所以对象释放空间后还可能需要一系列的扫尾工作(释放相关资源、关闭相应文件或数据库连接等)。Java用finalize()方法来扫尾清理。
该方法位于始祖类Object中,用到时只需重写即可。但要注意,finalize()方法仅在对象销毁前(即垃圾回收时)执行。换言之,由于对象销毁只能由垃圾回收器完成,垃圾回收器何时执行是不确定的,因此对finalize()方法何时执行也是不确定的。