JAVA 对象的创建与毁灭 构造函数与垃圾收集器(GC)

JAVA程序运行时会发生什么,堆和栈:
方法和局部变量存储入栈
对象存储在可垃圾回收的堆(不同于局部变量,实例变量存储在对象中)
实例变量:Duck.size(类中的数据)
局部变量 i=x+3

对象的创建:
Pig myPig=new Pig();
上面这个语句从细节上分析有3步:
①声明一个Pig类型的引用 myPig
②通过new来为新的对象分配空间 随即调用Pig的构造函数---Pig()默认构造函数
③用"="将myPig引用与刚刚分配空间的新对象相互关联


构造函数:

public Pig(){}

//系统默认的构造函数
①构造函数理论上来讲都在创建对象的时候被调用
②构造函数与类名同名
③构造函数没有返回值
④构造函数可以被重载和覆盖(一旦自己写了构造函数,系统默认的构造函数就不会被调用,可以有多个不同参数的构造函数)
⑤对象是像洋葱一样有层次的,先调用父类的构造函数,再调用本身的构造函数。在子类中调用父类的构造函数要用super(..), 如果我们没调用super()编译器会替我们调用,不过如果父类的构造函数没有无参类型的,就要我们自己调用,见第⑥
 
⑥如果父类的构造函数被覆盖,而没有写无参的构造函数,父类的默认构造函数就不能被调用:
JAVA 对象的创建与毁灭 构造函数与垃圾收集器(GC) - 小镜子~ - 菜园子
 

 
 解决方法:要养成 父类中一定要写无参的构造函数 的好习惯
JAVA 对象的创建与毁灭 构造函数与垃圾收集器(GC) - 小镜子~ - 菜园子
 以下是上面代码的输出结果:
 
 
 
JAVA 对象的创建与毁灭 构造函数与垃圾收集器(GC) - 小镜子~ - 菜园子
⑦构造函数可以是private私有的,可以在类的内部定义一个Pig getInstance(){ return new Pig(12);} 通过getInstance()来返回类规定的一个Pig对象。不细说
⑧可以用this(.)调用本类中其他的构造函数,但是不能与super()一起用
JAVA 对象的创建与毁灭 构造函数与垃圾收集器(GC) - 小镜子~ - 菜园子






对象的存活时间(生命周期):
①局部变量只会存活在声明该变量的方法中
public void go(){
int i=2;
}
②实例变量(对象内部的变量)的寿命与对象相同
如果没有引用指向该对象的话(1.引用变量作为局部变量生命周期到了,2.引用换对象了,3.引用被直接赋值NULL),该对象就要等着被垃圾回收机回收(GC:garbage collector)
//对于被赋值为NULL的引用,用.调用方法会抛出异常NullPointerException
Pig a=new Pig(”p1“);//新建一个Pig对象name为p1,假设Pig类有个Pig(String n){ name=n;}构造函数,用引用a拴住
Pig b=new Pig(”p2“);//新建另一个Pig对象name为p2,用引用b拴住
a=b;//b应用把他指向的对象的地址拷贝给a,那么a就和b一起指向了p2
//不好了!( ⊙ o ⊙ )那p1不是没有引用拴住了嘛。。等死吧,垃圾收集器会来收它的



 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值