小白的JAVA学习笔记(七)----对象的生存空间,构造函数,生命周期

对象也有生命周期,我们得决定在何处创建对象,怎样创建对象,还要决定何时销毁对象,本章将针对上述内容进行介绍。

一、对象的生存空间——堆与栈

类由两大块组成:实例变量与方法,方法里可能会有局部变量。通过类可声明对象。

这里再重述一遍实例变量是声明在类中方法之外的地方,局部变量是声明在方法或方法的参数里。

堆:存放所有的对象,实例变量

栈:存放方法和局部变量,栈顶方法是正在执行的方法,执行完即弹栈

注:如果局部变量是一个引用变量,则引用变量本身依然存放于栈中,引用的对象还是存放在堆上。

总而言之,变量存放在哪个空间由到底是哪种变量决定,哪种变量不是指变量类型,而是指是局部变量还是实例变量。

二、构造函数

1、一旦新建一个对象,构造函数就会被执行

2、构造函数没有返回类型,且名字一定与类名相同

3、如果我们未编写构造函数,编译器会自动生成没有参数的构造函数;如果我们编写了构造函数,编译器就不会再生成。

例:编译器生成的构造函数:

public Duck(){

}

4、一个类可以有多个构造函数,但不能有相同的参数类型和顺序,这叫做重载过的构造函数

5、调用父类的构造函数:super()//调用无参数的父类构造函数   

                                         super(x)//调用带有参数的父类构造函数

注:如果我们未在子类中编写super语句,编译器会自动加上super()调用,即自动调用不带参数的父类构造函数!!如果有super语句,一定是第一句!!

假如:Dog继承了Animal,且都有构造函数:

Dog d=new Dog();//最早调用Dog的构造函数,但最后一个执行完毕,因为Dog的构造函数中第一句是调用Animal的构造函数。

6、使用this()来从某个构造函数调用同一个类的另一个构造函数;this()只能用于构造函数中,且必须是第一行语句;super()和this()不可兼得!!即每个构造函数中可选择调用this()或super(),但不能同时调用,因为都必须是第一行语句!!

例:

class Dog{

int size;

public Dog(){

this(5);

System.out.println("wang");

}

public Dog(int ss){

size=ss;

System.out.println(size);

}

}

如果调用语句:Dog d=new Dog();

输出:

5

wang

三、生活周期

1、局部变量:只存活在声明该变量的方法内,活到方法执行完毕

2、实例变量:寿命与对象相同,对象活多久,实例变量活多久

3、引用变量:三种方法释放对象的引用,若对象无法获得引用,会被垃圾收集器处理。

法1:void go{

                 Dog d=new Dog();

                  }//方法结束后即会消失

法2:Dog d=new Dog();  d=new Dog();//将引用赋值到其他对象

法3:Dog d=new Dog();d=null;//将引用设定为null

                                                                                                                                             BY   ZJQ

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值