构造函数

通过一个案例来解释构造函数

改写C102_06

如果忘了调用圆的初始化操作(这种情况是经常存在的),程序就会出现错误,报错如下:

Exception in thread "main" java.lang.NullPointerException

这种空指针错误,java中出现频率最高的异常

通过调试发现,圆心对象为null

 

因为在初始化方法中创建了圆心对象,如果忘了调用,p的值当然为null

public void init(double x, double y, double r){
    p = new C102_05_Point();
    p.init(x,y);
    this.r = r;
}

怎么解决可能存在的遗忘问题,如果该初始化的函数能够自动调用,不就能解决吗!那么怎么才能自动调用呢?

如果一个函数要能被自动调用,该函数名应该是独一无二的。那么对于一个类来说,什么样的函数名才是独一无二的呢?

那就是将类名作为函数名——构造函数。

构造函数存在的价值就是自动被调用。

如何使用构造函数呢?

init函数名换为类名作为函数名,同时去掉返回值(注意构造函数的返回值由系统自己决定,程序员不能指定,即使为void也不行)。

构造函数定义如下

public C102_07_Circle() {
    p = new C102_05_Point();
    r = 0;
    System.out.println("第一个构造函数被自动调用了!");
}

public C102_07_Circle(double x, double y, double r){
    p = new C102_05_Point();
    p.init(x,y);
    this.r = r;
    System.out.println("第二个构造函数被自动调用了!");
}


public C102_07_Circle(C102_05_Point p, double r){
    this.p = p;
    this.r = r;
    System.out.println("第三个构造函数被自动调用了!");
}

构造怎么调用呢?

构造函数无法显式调用(也无需),而是自动被调用。

C102_07_Circle c1 = new C102_07_Circle();

C102_05_Point p = new C102_05_Point();
C102_07_Circle c2 = new C102_07_Circle(p,6);

 

那么是何时被自动调用的呢?可以通过调试来查看。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值