JAVA对象的创建与回收

1.对象与变量的生存空间

生存空间为栈与堆。对象生存空间是堆。不管实例变量还是局部变量,对象本身都会生存在堆上。
对象是存在于堆上的。
变量分为实例变量和局部变量。局部变量指的是存在于方法里面或者方法的参数上的变量,它的生存空间为栈,它是暂时的,生命周期只限于方法被放在栈上的这段期间(也就是方法调用至执行完毕为止)。当调用一个方法时,该方法会被置于栈顶,为正在执行的方法。
实例变量如果是primitive主数据类型的,则java会依据该数据类型的大小如int,long,为该类型变量留下空间,这空间存在于所创建对象占有的堆空间内。若实例变量是个对象,如下代码块:

public calss CellPhone(){
 private Antenna ant;//1
 private Antenna ant = new Antenna();//2
}

上面代码1是声明了实例变量但没有赋值,则只会在Cellphone对象堆内留下变量的空间。代码2是引用变量被赋值到一个新的Antenna对象上。此时堆内有两个对象堆空间,分别为CellPhone和Antenna,而变量ant存在于CellPhone堆空间内。

2.构造方法

其实每次创建对象在new的时候都会默认调用一个方法,这个方法就是构造方法。构造方法最重要的特点是无返回类型,且方法名与类名一致。

public class Dog{
public Dog(){
	} //这就是一个构造方法
}

即使我们不写这个构造方法,编译器也会帮你写一个无参的构造方法。每次在新建一个对象的时候就会调用一次构造方法。注意,当你写了构造方法后,编译器就不会帮你写无参的构造方法了。另外,构造方法可以重载。

public class Animal{
public Animal(){
	} //这就是一个构造方法
}
public class Dog extends Animal{
public Dog(){
	} //这就是一个构造方法
public static void main(String[]args){
	Dog dog = new Dog();
}
}

如上,在创建Dog对象的时候,先将Dog类的构造方法置于栈顶,由于Dog继承于Animal,再次调用Animal的构造方法,将其置于栈顶。

3.垃圾收集器

当创建了一个对象之后,该对象会在堆里面占用空间。例如下面的Dog对象,会占用堆空间,实例变量dog存在于这个Dog堆空间内。当对象没有引用连接它的时候,就会被垃圾收集器回收。

Dog dog = new Dog();

有三种方法可以回收也就是销毁对象。
(1)将对象放在方法里面

void go(){
Life z = new Life();//z会在方法结束时消失,对象就会变成可回收的
}

(2)引用被赋值到其他对象上

Life z = new Life();
z = new Life();

(3)直接将引用设定为null

Life z = new Life();
z = null;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值