初始化与构造器

C++引入了构造器的概念,这是一个在创建对象时被自动调用的特殊方法,Java中也采用了构造器,通过提供构造器,类的设计者可以确保每个对象得到初始化。
在创建对象时:

new Rock();

将会为对象分配存储空间,并调用相应的构造器。这就确保了在你能操作对象之前,它已经被恰当地初始化了。并且额外提供了“垃圾回收器”。对于不再使用的资源,垃圾回收器自动将其释放。
1.构造器的语法格式

类名:构造器的名字必须和类名一致
参数列表

2.构造器的返回值类型

构造器不能定义返回值的类型,如果定义了返回值的类型,编译并不会报错,因为JVM已经把所谓的构造器当做是一个普通的方法.没有返回值类型并不是没有返回值,构造器有返回值的,返回的是当前类的对象,因此构造器的返回值类型总是当前类,因此没有定义返回值的类型.可以理解为构造器的返回值是隐式的.

3.默认的构造器,

如果程序中没有显示的定义构造器,系统会默认的给程序一个无参的构造器.一旦加了构造器,默认的构造器就不存在了。

4构造器是创建对象的重要途径,是不是说构造器就完全负责创建对象呢?

不是,构造器是创建对象的重要途径,通过new 关键字来调用构造器也可以返回一个该类实例,但是这个过程并不是完全由构造器执行的。
实际上,在系统调用构造器的时候,系统会先为该对象分配内存空间,为对象的成员变量赋初值,这个时候对象就已经产生了—这些操作都是在构造器的执行体之前执行的.也就是说,在构造器的执行体执行之前,对象就已经存在了,只是不能被外部的程序调用,构造体执行之后,对象就可以被外部的程序调用了。

5.构造器的重载

public class ConstructorDemo {
private int a ;

private String s;

public ConstructorDemo() {
}

public ConstructorDemo(int a ){
this.a = a;
}

public ConstructorDemo (String s,int a){
this(a);
this.s = s;
}
}

6.初始化块(代码块)

初始化块可以当做是Java程序里面的一种成员,代码块又分为:静态代码块和非静态的代码块,一个类中可以有多个代码块,代码块之间执行的顺序是根据代码块在程序中的位置来决定.静态的代码块总是比非静态的代码块先执行。
非静态代码块:可以把它当做是类的成员属性来理解.每次创建对象的时候都会执行一遍是属于成员变量。
静态的代码块:同样的可以把它理解成类变量,只有在加载类的时候才会执行.
程序对属性进行初始化的顺序是:代码块->属性声明时候指定的初始值->构造器中指定的值。

7.初始化块和构造器

从某种程度上来讲,可以理解为初始化快是构造器的补充,因为初始化块总是在构造器之前执行,同样也可以对对象初始化。
与构造器不同的是:初始化块只能执行一段固定的代码,不能够像构造器一样接受参数,而且是对类的所有的对象进行初始化。
跟构造器一样的,程序在执行的时候不仅会执行当前类的初始化块和构造器,会一直追溯到object类的初始化块和构造器.先执行父类的初始化块和构造器(先初始化块,再构造器),然后再执行当前类的初始化块和构造器

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值