Java初学(九)构造方法


一、构造方法

1.构造方法作用

  • 完成对属性或者成员变量赋值

2.什么是构造方法

构造方法是一个特殊的方法,具体有两点:

  • 构造方法的名字必须与类名一致
  • 构造方法必须没有返回值类型,也就是:不需要编写void

3.构造方法的语法格式:

public 类名([参数列表]){
}

4.在IDEA中,构造方法的快捷键

  • 第一种方式:按Alt + Insert键,选择第一项Constructor,其中Constructor表示构造器、构造方法、构造函数,然后按回车键,再按两次Tab键,则生成无参构造方法

    • 注意:一般无参构造方法中,没有要求方法体中不编写任何内容,也就是:当执行无参构造方法时,属性依然是默认值
    • 在这里插入图片描述
  • 第二种方式:按Alt + Insert键,选择第一项Constructor,然后按回车键,鼠标左键点击第一个要赋值的属性,然后再按Ctrl + 鼠标左键点击其他要赋值的属性,按回车键,则生成带参构造方法,完成对部分属性赋值

  • 第三种方式:按Alt + Insert键,选择第一项Constructor,然后按回车键,再按Ctrl+ A表示全选,则生成带参构造方法,完成对所有属性赋值

5.构造方法如何执行?

---当创建对象同时执行相匹配的构造方法
也就是:当创建对象时,如果小括号中没有内容则执行无参构造方法,否则执行带参相匹配的构造方法

在这里插入图片描述

6.构造方法注意事项

  • 当一个类中没有编写构造方法,则系统会提供一个默认的无参的构造方法,称为隐式构造方法
    也就是说:一个类如果没有编写构造方法则只有一个构造方法
  • 当一个类中编写构造方法,,则系统不会提供默认的无参构造方法,称为显式构造方法
    也就是说:一个类中编写几个构造方法,则就共计有几个构造方法
  • 当在一个类中编写构造方法时,建议:先将无参构造方法编写上, 然后再编写需要的带参构造方法,否则出现编译错误

7.构造方法的重载

  • 什么是构造方法重载?
    • 在同一个类中,构造方法的名字必须相同,参数列表必须不同(个数不同、类型不同、顺序不同),至少编写2个构造方法
  • 当构造方法构成重载以后如何确定执行的是哪个构造方法?
    • 在调用时,会自动找相匹配的构造方法执行,否则出现编译错误
  • 构造方法重载好处
    • 在调用时,相对使用更灵活
// Student.java
public class Student {
     int id;
     String name;
     int age;
     char gender;
     String address;
     double score;
     // 注意:下面这个方法不属于构造方法,但是也不报错
     public void Student() {
     }
     // 编写无参构造方法
     public Student() {
          // 加入实现对名字、年龄、性别属性赋值
          name = "庸子";
          age = 81;
          gender = '男';
     }
     // 带参构造,完成学号、名字赋值
     public Student(int id, String name) {
          this.id = id;
          this.name = name;
     }
     // 带参构造,完成学号、名字、年龄赋值
     public Student(int id, String name, int age) {
          this.id = id;
          this.name = name;
          this.age = age;
     }
     // 带参构造,完成学号、名字、年龄、性别赋值
     public Student(int id, String name, int age, char gender) {
          this.id = id;
          this.name = name;
          this.age = age;
          this.gender = gender;
     }
     // 带参构造,完成学号、名字、年龄、性别、地址赋值
     public Student(int id, String name, int age, char gender, String address) {
          this.id = id;
          this.name = name;
          this.age = age;
          this.gender = gender;
          this.address = address;
     }
     // 带参构造,完成学号、名字、年龄、性别、地址、分数赋值
     public Student(int id, String name, int age, char gender, String address, double score) {
          this.id = id;
          this.name = name;
          this.age = age;
          this.gender = gender;
          this.address = address;
          this.score = score;
     }
     // 编写方法:输出学生的所有信息
     public void print(){
          System.out.println( "学号:" + id + '\r' +  " 姓名:" + name + " 年龄:" + age + " 性别:" + gender + " 地址:" + address + " 分数:" + score);
     }
}
// Test01.java
package demo1.com.yulesong.structure;

public class Test01 {
    public static void main(String[] args) {
        Student s = new Student();
        s.id = 20220425;
        s.name = "庸子";
        s.age = 18;
        s.gender = '男';
        s.address = "北京";
        s.score = 88.88;
        // 学号:20220425 姓名:庸子 年龄:18 性别:男 地址:北京 分数:88.88
        s.print();
        

        // 创建学生对象,打印无参构造
        Student s1 = new Student();
        // 学号:0 姓名:庸子 年龄:81 性别:男 地址:null 分数:0.0
        s1.print();
        // 创建学生对象,完成对学号、名字赋值,执行带两个参数的构造方法
        Student s2 = new Student(20220425,"张三");
        // 学号:20220425 姓名:张三 年龄:0 性别:  地址:null 分数:0.0
        s2.print();
        // 创建学生对象,完成对学号、名字、年龄赋值,执行带三个参数的构造方法
        Student s3 = new Student(20220425,"张四",19);
        // 学号:20220425 姓名:张四 年龄:19 性别:  地址:null 分数:0.0
        s3.print();
        // 创建学生对象,完成对所有属性赋值,执行带六个参数的构造方法
        Student s4 = new Student(20220425,"张五",20,'男',"北京",66.66);
        // 学号:20220425 姓名:张五 年龄:20 性别:男 地址:北京 分数:66.66
        s4.print();
    }
}

8. 变量按数据类型分为

  • 基本数据类型:在内存中存放的是真正的值
    • 又分为4大类,共计8种
  • 引用数据类型:在内存中存放的是地址(引用)
      • 系统提供的类,比如:String、System、Scanner ………
      • 用户自定义的类,比如:Student Car Computer Cat Dog ………
  • ………

9. 对引用数据类型赋值方式有两种(重点)

  • 第一种方式:将对象的内存地址赋给左侧的变量名称
    • 比如:c = new Car();
  • 第二种方式:将null值赋给左侧的变量名称
    • 比如:c = null;

10. 空指针异常(重点)

1.空指针异常属于运行错误java.lang.NullPointerException
2.出现空指针异常原因
当前对象名中存放的是null,也就是没有存放对象的地址,也就没有指向某个对象,因此就不能访问对象中的属性或者对象中的方法,如果非要访问则就出现空指针异常
3.出现空指针异常解决办法
在访问对象中的属性或对象中的方法之前,必须保证对象名中存放的是对象的地址
比如:c = new Car();
在这里插入图片描述

11. 对象中的属性可以是用户自定义的类作为数据类型

在这里插入图片描述
在这里插入图片描述

12. 参数传递

  1. 基本数据类型作为参数传递
    在这里插入图片描述

  2. 引用数据类型作为参数传递
    在这里插入图片描述

作业与代码(点击领取)

创建新的模块HWDay10,建议每个题存放在一个包中

1、
编写图书类:
属性:编号,名称,价格、作者
定义方法:显示图书的信息。
测试类:
1)创建图书对象同时执行无参构造方法,调用方法显示信息
2)创建图书对象同时执行带2个参数构造方法完成对名称和作者赋值,调用方法显示信息
3)创建图书对象同时执行带3个参数构造方法完成对编号、名称、价格赋值,调用方法显示信息
4)创建图书对象同时执行带4个参数构造方法完成对所有属性赋值,调用方法显示信息

2、
编写狗类:
属性:昵称、年龄、性别、体重、品种
方法:显示狗的信息
测试类:
1)创建狗对象同时执行无参构造方法 ,调用方法显示信息
2)创建狗对象同时执行带3个参数构造方法完成对属性赋值,调用方法显示信息
3)创建狗对象同时执行带5个参数构造方法完成对所有属性赋值,调用方法显示信息

3、
编写电脑类:
属性:品牌、价格、颜色、尺寸
方法:显示电脑的信息
测试类:
1)创建电脑对象同时执行无参构造方法 ,调用方法显示信息
2)创建电脑对象同时执行带2个参数构造方法完成对属性赋值,调用方法显示信息
3)创建电脑对象同时执行带4个参数构造方法完成对所有属性赋值,调用方法显示信息

4、
编写出版社类:
属性:出版社编号,出版社名称,出版社地址
定义:无参构造方法、有参构造方法
方法:显示出版社的信息
编写图书类:
属性:编号,名称,单价,数量, 作者,出版社
定义方法:显示图书的信息(编号,名称,单价,数量, 作者,出版社名称,出版社地址)
测试类:
创建图书对象通过调用带参构造方法完成对属性赋值,并调用显示信息方法
创建图书对象调用无参构造方法,并调用显示信息方法

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值