【Java】构造方法

一、概述

构造方法也叫作构造器、构造函数。但是我们平时习惯上还是会叫做构造方法。

作用:在创建对象的时候给成员变量进行初始化。

这里的 初始化 是一个专业名字,其实就是赋值的意思。

因此构造方法简单理解:就是在创建对象的时候给成员变量进行赋值的。

在以前的代码中,小括号中都是空着的,什么也不写。此时就表示我们调用的是空参的构造方法。

image-20240405142757180

二、构造方法格式

1)格式

public class Student {
    修饰符 类名(参数) {
        方法体;
    }
}

2)特点

  1. 方法名与类名必须完全一样,大小写也要一致。
  2. 构造方法它虽然叫做方法,但是它是没有返回值类型的,连void都不能写。
  3. 因为构造方法没有返回值,因此在大括号里面是不能写return的,一旦写了,代码就会报错。

3)示例

第一个是 空参构造(空参构造一般是空的,什么也不写),利用空参构造来创建对象的时候,成员变量都是默认初始化值。

第二个是 带全部参数构造方法,在方法里面就可以给所有的成员变量进行赋值了。这样我们在创建对象的时候,name 和 age就有值了,就省的我们再去调用 set方法 进行赋值了,可以让我们的代码变得更加的简单。


4)执行时机

  1. 创建对象的时候由虚拟机调用,不能手动调用构造方法
  2. 每创建一次对象,构造方法就会被调用一次

三、代码示例

Student.java

package com.itheima.test5;

public class Student {
    private String name;
    private int age;


    // 如果我们自己没有写任何的构造方法
    // 那么虚拟机给我们加一个空参构造方法
    /* public Student(){
        System.out.println("看看我执行了吗?");
    } */

    // 有参构造
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

StudentTest.java

package com.itheima.test5;

public class StudentTest {
    public static void main(String[] args) {
        //创建对象
        //调用的空参构造 tudent ss = new Student();

        Student ss = new Student("zhangsan",23);
        System.out.println(ss.getName());
        System.out.println(ss.getAge());
    }
}

四、赋值的原理

在我们创建对象的时候,会自动根据后面的参数去调用对应的构造方法。

因为我这里传了两个参数,一个是 String,一个是 int,所以它会调用这里的有参构造。

Student ss = new Student("zhangsan",23);

一般写代码的时候有参构造和无参构造我们一般都是会写上的。因为在实际开发中,有的时候我们创建对象时,是不知道属性值的。例如:对象的属性值不是直接写死的,而是由键盘录入来的,此时我创建对象的时候,就不知道对象里的属性是什么了,此时我只能先用空参构造先把对象创建出来,然后等用户键盘录入了,此时再通过 s.setName"";,把用户键盘录入的数据进行复制。


五、构造方法注意事项

1、构造方法的定义

  • 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
  • 如果定义了构造方法,系统将不再提供默认的构造方法

Student.java

package com.itheima.test5;

public class Student {
    private String name;
    private int age;

    // 有参构造
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
}

由于在 Student 类中已经定义了一个有参构造,系统将不再提供默认的构造方法,下述代码就会报错。

// 会调用Student的无参构造
Student s = new Student(); // 报错

2、构造方法的重载

带参构造方法,和无参构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载。

推荐的使用方式:无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法。这是因为在以后的实际开发,基本上不是你一个人写一个项目,而是很多人一起开发的。假设现在自己只用到了有参构造,但是别人却可能使用无参构造。因此无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法,这已经成为了一个习惯了。


六、总结

1、构造方法的作用?

创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的。

2、构造方法有几种,各自的作用是什么?

  • 无参数构造方法(空参构造方法):初始化对象时,成员变量的数据均采用默认值。
  • 有参数构造方法:在初始化对象的时候,同时可以为对象进行赋值。

3、构造方法有哪些注意事项?

  • 任何类定义出来,默认就自带了无参数构造器,写不写都有。
  • 一旦定义了有参数构造器,无参数构造器就没了,此时就需要自己写无参数构造器了。
  • 建议在任何时候都手动写上空参和带全部参数的构造方法。

七、构造方法扫盲

有很多资料书都这么解释:构造方法就是用来创建对象的。其实这句话是错误的。

真正创建对象其实是 new 关键字干的。虚拟机在创建对象的时候其实是有很多很多步骤的,其中调用构造方法只是创建对象的其中一步而已,这一步就是为了给成员变量进行初始化的。

image-20240405155248518

因此真正构造方法的作用就是:在创建对象的时候,虚拟机会自动调用构造方法,它的作用是给成员变量进行初始化的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值