Java中的构造方法

1、什么是构造方法,有什么用?

构造方法是一个比较特殊的方法,通过构造方法可以完成对象的创建,以及实例变量的初始化。换句话说,构造方法就是用来创建对象,同时给对象的属性赋值

(PS:当实例变量没有被我们手动去赋值的时候,系统会给实例变量赋默认值)

2、构造方法的语法结构

构造方法的语法结构

[修饰符列表] 构造方法名(形式参数列表){
    构造方法体;
    通常在构造方法体当中给属性赋值,完成属性的初始化
}

 注意:

1、修饰符列表统一写:public

2、构造方法名和类名必须一致

3、构造方法不能写返回值的类型

对比普通方法的语法结构

[修饰符列表] 返回值类型 方法名(形式参数列表){
    方法体;
}

怎么调用构造方法

使用new运算符来调用构造方法

语法格式:

new 构造方法名(实际参数列表);

重点(需要记忆):当一个类没有提供任何构造方法,系统会默认提供一个无参数的构造方法(而这个构造方法被称为缺省构造器) 。

public class ConstructorTest01{
    public static void main(String[] args){
        //创建Student类型的对象
        Student s1 = new Student();
        
        //输出“引用”
        //只要输出结果不是null,说明这个对象一定是创建完成了
        System.out.println(s1);

        //调用Student类的无参数构造方法
        new Student();//结果:无参数的构造方法执行了!
    }
}

class Student{
    //学号
    int no;
    //姓名
    String name;
    //年龄
    int age;

    //当Student这个类当中并没有定义任何构造方法
    //但是我们创建对象的时候成功了,这里就是系统提供的缺省构造器
    //将无参数的构造方法(缺省构造器)写出来
    public Student(){
        System.out.println("无参数的构造方法执行了!");
    }
}

3、构造方法的重载

我们都知道普通方法能够重载,那构造方法能够重载吗?

答案:能,并且和普通方法重载一样,可以创建多个构造方法,方法名相同,参数列表不同

具体请参照方法重载:(6条消息) Java方法重写与重载的区别_徐念安的博客-CSDN博客_请简述方法重写和方法重载的区别

当一个类当中手动的提供了构造方法,那么系统将不再提供无参数构造方法

(建议:将无参数构造方法手动写出来,这样一定不会出问题)

public class ConstructorTest01{
    public static void main(String[] args){
        //这里将会报错,因为在Student中我们手动的定义了一个带参数列表的构造方法
        //所以缺省构造器已经没了,除非我们在Student当中再去手动的把无参构造方法定义出来
        new Student();
    }
}

class Student{
    //学号
    int no;
    //姓名
    String name;
    //年龄
    int age;

    public Student(int i){
        System.out.println("有参数的构造方法执行了!");
    }
}

当我们手动的定义了无参构造方法和有参构造方法之后,无参构造方法和有参构造方法都可以调用

public class ConstructorTest01{
    public static void main(String[] args){
        new Student();//无参数的构造方法执行了!
        new Studnet(100);//有参数的构造方法执行了!
        new Studnet("zhangsan");//有参数的String构造方法执行了!
    }
}

class Student{
    //学号
    int no;
    //姓名
    String name;
    //年龄
    int age;

    public Student(){
        System.out.println("无参数的构造方法执行了!");
    }
    public Student(int i){
        System.out.println("有参数的构造方法执行了!");
    }
    public Student(String name){
        System.out.println("有参数的String构造方法执行了!");
    }
}

实例变量没有手动赋值的时候,实际上系统会默认赋值

那么这个默认赋值操作是在什么时间进行的?

        是在类加载的时候给这些实例变量赋值吗?

                不是,实例变量是在构造方法执行的过程中完成初始化的,完成赋值的

public class ConstructorTest01{
    public static void main(String[] args){
        Student student = new Student();
        System.out.println(student.no);//输出结果30
        System.out.println(student.name);//输出结果zhangsan
        System.out.println(student.age);//输出结果10

        //由于有参构造方法我们并没有对实例变量进行赋值
        //所以在这里的输出依然是系统的默认值
        Student student1 = new Student(1);
        System.out.println(student1.no);//输出结果0
        System.out.println(student1.name);//输出结果null
        System.out.println(student1.age);//输出结果0
    }
}

class Student{
    //学号
    int no;//默认值0
    //姓名
    String name;//默认值null
    //年龄
    int age;//默认值0

    public Student(){
        //这里手动赋值,将不再使用系统默认值
        no = 30;
        name = "zhangsan";
        age = 10;
    }
    public Student(int i){
    }
}

除此之外,我们还可以在调用构造方法创建对象的时候对实例变量进行赋值

public class ConstructorTest01{
    public static void main(String[] args){
        Student student = new Student();
        System.out.println(student.no);//输出结果30
        System.out.println(student.name);//输出结果zhangsan
        System.out.println(student.age);//输出结果10

        //由于该构造方法我们设置了参数列表,所以我们可以在创建对象的时候传值

        //此处表示no = 20;name = lisi;age = 30;
        Student student1 = new Student(20,lisi,30);
        System.out.println(student1.no);//输出结果20
        System.out.println(student1.name);//输出结果lisi
        System.out.println(student1.age);//输出结果30
    }
}

class Student{
    //学号
    int no;//默认值0
    //姓名
    String name;//默认值null
    //年龄
    int age;//默认值0

    public Student(){
        //这里手动赋值,将不再使用系统默认值
        no = 30;
        name = "zhangsan";
        age = 10;
    }

    //这里使用传参的形式来赋值
    public Student(int xueHao,String mingZi,int nianLing){
        no = xueHao;
        name = mingZi;
        nianLing = age;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值