Java高级篇-8-构造方法和初始化

       这篇来学习下构造方法的话题,首先什么是构造方法。所谓构造方法,就是这个类在被实例化时(创建对象时)就要执行的方法,方法名和类名相同。下面,主要从三个方面来学习构造方法:构造方法的定义,构造方法重载,构造方法内参数的初始化。

1. 构造方法定义

       我们已经知道了构造方法是和类同名,其实还有其他的条件。构造方法是一定没有返回值的,所以不能有类型返回,连void都不可以有。构造方法前面可以用private,public,protected修饰,也可以不写,但是不能有static、final、synchronized、abstract关键字修饰。下面来看一个例子。

package javademo;

public class Car {

    public String name ;
    public double speed;
    public String color;

    public Car(){
        this.name = "ford";
    }

    public Car(String name){
        this.name = name;
    }

    public Car(double speed){
        this.speed = speed;
    }

    public Car(double speed, String name){
        this.speed = speed;
        this.name = name;
    }

}
       上面代码,我们只看上面四个构造函数,不看构造函数内部代码。上面有四个构造函数,分别是Car(), Car(String name), Car( double speed ), Car( double speed, String name ), 构造函数的名称和类名称相同,前面不能有static或者返回类型的修饰。关于构造函数的定义,就可以像上面这样去写,下面我们讨论下构造函数内参数。

2.构造函数的重载

       构造方法(函数)和普通的实例方法一样,也支持方法的重载(overload)。先复习一下什么是重载。重载就是方法名称相同,只是参数的个数,类型,顺序不同。Car(), Car(String name), Car(double speed), Car(double speed, String name)这四个就是构造方法的重载。第一个是没有参数的,第二个和第三个都是一个参数,只是参数类型不同,第四个是两个参数。构造函数写了好几个,那么,类初始化的时候到底调用哪个呢。

3.类初始化和调用构造函数方式

       先说一下,如果一个类没有写构造函数。Java编译器会自动给你添加一个默认的什么也不干的构造函数。类的初始化是根据提供参数个数,类型来自动去匹配调用哪个构造函数,如果匹配不上,就好报错。下面我们新建一个main方法,来测试下构造函数的调用和类实例的初始化。

package javademo;

public class PassDataTypeMethodDemo {

    public static void main(String args[]){
        //调用构造函数Car(),参数为空
        Car c = new Car();
        System.out.println(c.name);

        //调用构造函数Car(double speed),参数为speed
        Car c2 = new Car(233.0);
        System.out.println(c2.speed);

        //调用构造函数Car(String name),参数为name
        Car c3 = new Car("toyota");
        System.out.println(c3.name);

        //调用构造函数Car(doubel speed, String name),参数为name和speed
        Car c4 = new Car(240, "BWM");
        System.out.println(c4.name + " "+c4.speed);
    }

}
运行结果:

ford
233.0
toyota
BWM 240.0
       通过打印出来的结果,可以看到 调用了那个构造函数。这里先说说类的初始化, Car c = new Car(), 我们这里看到了new这个关键字,new表示新建一个对象,放在内存中。所以构造函数在调用的时间就是执行了new Car()就完成了调用。然后我们来思考下,构造方法中参数如果没有传参数是如何初始化的。很简单,你可以这样测试输出看看效果。

 Car c = new Car();
 System.out.println(c.name);
 System.out.println(c.color);
 System.out.println(c.speed);
       你会发现,由于这个实例在初始化过程没有去管c olor和speed的值是什么,但是运行结果我们看到color=null, speed=0.0 所以,在构造函数中基本数据类型的参数一定要进行初始化操作,如果没有,int型就是0,上面我们speed是doubel型,所以显示0.0,字符串默认返回null,char默认返回'\u0000',布尔型默认是false。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值