构造函数

什么是构造函数?

构造函数 是一种特殊的方法,主要用来在创建对象时初始化对象。

为什么需要构造函数?

构造函数是完成对象的初始化,这个当然可以定义一个成员方法予以实现。但是这个方法必须显式调用,否则就可能因未初始化出现错误。我们希望这样的方法能够被自动调用,能被自动调用,那么它的名字一定是独一无二的,什么样的名字才是独一无二的呢?——以类名作为方法名。这就是构造函数。

        构造函数,是在对象实例化时自动被系统调用,该函数名必须独一无二。对于一个类来说,就是将一个类名作为函数名。

        构造函数不需要程序员去定义返回值,他是系统自动决定的,void也不行。

构造函数无法、也无需指定指定返回值,它是自动被调用的。

函数重载 多个函数使用同一个函数名,系统根据参数自动调用相应的函数。

函数重载解决了标识符统一的问题。

拷贝构造函数 用一个已经存在的本类的对象去复制新的对象

垃圾回收:所谓的“垃圾”是指之前系统分配的内存单元,但是现在没用了,

再具体的讲,就是没有引用指向它。对于“垃圾”来讲,程序员不需要自己去回收,而是系统提供的垃圾回收机制自动回收,

当程序员觉得有必要时,也可以强制让系统回收。

让我们用代码来理解一下

坐标类:判断圆是否相离,相切,相交

public class Point {


    private double x;//横坐标
    private double y;//纵坐标

    //两个方法名都是init,但是参数不同,这个叫做函数重载。
    //构造函数
    public  Point(){
        x = 0;
        y = 0;
    }

    public Point(double x,double y){
        //这里有两个x,一个是数据成员x,一个是形参x
        //前者在类的整个内部有效
        //后者只在当前这个函数中有效
        //当两者冲突时默认指的是行参x
        //如果要访问前者得用this.x
        this.x = x;
        this.y = y;
    }

    /**
     * 计算亮点之间的距离
     * @param p 另一个点坐标
     * @return 距离
     * 按道理计算亮点之间的距离,需要提供两个点,那还一个点在哪?
     * 还有一个就是当前这个点(this),每个成员方法都隐含一个参数-this
     */
    public double distance(Point p){
        return Math.sqrt((this.x-p.x)*(this.x-p.x)+(this.y-p.y)*(this.y-p.y));
    }
}

如果用构造函数的话要使用多个函数使用一个函数名

public class Circle {
    private Point p;
    private double r;

    public Circle(double x,double y,double r){
        p = new Point(x, y);
        this.r = r;
    }

    /**
     * 计算两个圆的位置关系
     * @param c 另一个圆
     * @return 0(相切);1(相离);-1(相交)
     */
    public int position(Circle c){
        double d = this.p.distance(c.p);
        if(d == this.r+c.r){
            return 0;
        }
        if (d>this.r+c.r){
            return 1;
        }
        return -1;
    }
}
测试
public class Test {
    public static void main(String[] args) {
        Circle c1 = new Circle(0,0,5);
        Circle c2 = new Circle(4,4,7);

        int p = c1.position(c2);
        switch (p){
            case 0:
                System.out.println("相切");
                break;
            case 1:
                System.out.println("相离");
                break;
            case -1:
                System.out.println("相交");
                break;
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值