java构造方法详解

在java语言中,构造方法是一种比较特殊的方法,它用于创建实例(也就是对象)的时候进行初始化操作

在创建对象的时候,实际上就用到了构造方法,只不过是new的方式

例:Preson p = new Person();

此处的Person()就是一个构造方法,构造方法默认不可见。

如果我们需要将某些特定的变量进行特殊的初始化,以便让其他对象创建的时候能够获取到预期的值,我们就可以通过自定义构造方法的方式来实现。

在没有定义手工定义构造方法的时候,采用的是系统为操作类提供的一个无参数的默认的构造方法,它的形式就是:public 类名() {}

    static class MagicBox{
        public int length;
        public int width;
        public int height;

        //定义一个构造方法,用于对盒子进行初始化
        //定义一个带参的方法,用于接收外界传递来的初始化参数
        public MagicBox(int length,int width,int height){
            this.height = height;
            this.length = length;
            this.width = height;
        }

    }

    public static void main(String[] args) {
        MagicBox box = new MagicBox(50,20,10);
        System.out.println("length:"+box.length);
        System.out.println("width:"+box.width);
        System.out.println("height:"+box.height);

    }

在案例中,在没有定义构造方法之前,MagicBox box2 = new MagicBox();这种方式是可以被使用的,但此时定义了一个带有参数的构造方法,这种方法就不适用了。

在java语言中,一旦用户定义了构造方法,系统就不再提供默认的构造方法了。


    static class MagicBox{
        public int length;
        public int width;
        public int height;
        
        
       //系统默认提供的构造方法,在用户未自定义构造方法之前,这个方法是由系统提供的,并不可见。
       //如果用户自定义了一个构造方法,并与原来系统默认的构造方法一致,那么原来的构造方法失效。
       //一个类中可以同时存在多个构造方法,此时形成了构造方法重载
        public MagicBox() {
        }

        //定义一个构造方法,用于对盒子进行初始化
        //定义一个带参的方法,用于接收外界传递来的初始化参数
        public MagicBox(int length,int width,int height){
            this.height = height;
            this.length = length;
            this.width = height;
        }

    }

    public static void main(String[] args) {
        MagicBox box = new MagicBox(50,20,10);
        System.out.println("length:"+box.length);
        System.out.println("width:"+box.width);
        System.out.println("height:"+box.height);

        //系统默认的初始化
        MagicBox box2 = new MagicBox();
        System.out.println(box2.height);
        System.out.println(box2.length);
        System.out.println(box2.width);

    }

运行结果

因为构造方法主要用于被其他类调用并创建对象,所以通常构造方法的访问权限是public,允许系统中的其他类来创建该类的对象。如果将构造方法设置为protected,主要用于被子类调用;如果将其设置为private,其他类则不能创建该类的实例。

建议将构造方法的访问权限设置为public,且保留原默认构造方法。

如果一个构造方法的结构能够包含另一个构造方法的结构,那么他们之间是存在可调用关系的。


    static class MagicBox{
        public int length;
        public int width;
        public int height;




       //系统默认提供的构造方法,在用户未自定义构造方法之前,这个方法是由系统提供的,并不可见。
       //如果用户自定义了一个构造方法,并与原来系统默认的构造方法一致,那么原来的构造方法失效。
       //一个类中可以同时存在多个构造方法,此时形成了构造方法重载
        public MagicBox() {
        }

        //定义一个构造方法,用于对盒子进行初始化
        //定义一个带参的方法,用于接收外界传递来的初始化参数
        public MagicBox(int length,int width,int height){

            //可以使用this关键字对构造方法进行调用,
            //使用this调用另一个构造方法的时候,调用语句必须放在第一行
            //在普通方法中无法引用构造方法,对构造方法的调用只能出现在构造方法中。
            //在使用构造方法引用时,也不能出现调用闭环,不能相互调用。
            this(length, width);
            this.width = width;
        }
        public MagicBox(int length,int width){
            this.length = length;
            this.width = height;
        }


    }

    public static void main(String[] args) {
        MagicBox box = new MagicBox(50,20,10);
        System.out.println("length:"+box.length);
        System.out.println("width:"+box.width);
        System.out.println("height:"+box.height);

        //系统默认的初始化
        MagicBox box2 = new MagicBox();
        System.out.println(box2.height);
        System.out.println(box2.length);
        System.out.println(box2.width);

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值