Java构造器(构造方法)详解

168 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

什么是构造器

构造器通常也叫构造方法、构造函数,构造器在每个项目中几乎无处不在。当你new一个对象时,就会调用构造器。构造器格式如下:

修饰符,比如public 类名 (参数列表,可以没有参数){ //这里不能有return}

Java构造器

创建好一个类后,系统默认内置一个隐式的构造器。构造器和方法是两码事,各是各的
构造器的注意事项:

1,构造器的名称必须和类名一致
2,一个类中可以定义多个构造器,但是构造器的参数列表必须不同(重载)
3,如果我们没有手动定义构造器,则Java系统会提供一个默认的构造器给我们使用,一旦我们定义了构造器,则系统会把 默认的构造器收回
4,构造器的作用:实例化对象,给对象赋初始值
5,代码游离块优先执行

怎么定义构造器

构造方法的名字必须和所在类的名字一致,没有返回值,但不能声明void,访问权限可以为任意,但是一般情况下使用public方法权限,构造方法中的参数可以根据需要自行定义,参数的不同的构造方法构成重载

public 构造方法名(参数){ ... }
 class Fu {
     public Fu(){} //无参的公有构造方法
     public Fu(int i){} //参数类型为int的公有构造方法
   ......
   }


   public class Demo extends Fu {
     public Demo(){} //无参的公有构造方法
     public Demo(int i){} //参数类型为int的公有构造方法
     public Demo(int i,double d){} //参数类型为int和double的公有构造方法
     ...
   }

1.png

2.png

构造器的作用

  1. 创建对象。

  2. 在创建对象的过程中,对这个类进行初始化操作,这些操作写在构造器的大括号中

        2.1 初始化操作放到构造器中,由构造器自动完成,程序员就不必在创建对象后还想着对这对象做初始化操作。

构造器的组成

3.png

构造器相关语法规则

  1. Java语言中,每个类都至少有一个构造器
  2. 默认构造器的修饰符与所属类的修饰符一致
  3. 一旦显式定义了构造器,则系统不再提供默认构造器
  4. 一个类可以创建多个重载的构造器
  5. 父类的构造器不可被子类继承

有一个参数的构造器

  public class Soldier {
    private String soldierName;
    public Soldier(String soldierName) {
     this.soldierName = soldierName;
     }
  }

注意:当类中声明有参构造器后,系统将不再给这个类分配无参构造器。

构造器重载

一个类有多个构造器时:要么参数个数不同;要么参数类型不同

public class Soldier {
​
    private int age;
    private String soldierName;
    private String weapon;
    private String gender;
​
    public Soldier() {
        
    }
    
    public Soldier(int age) {
        this.age = age;
    }
​
    public Soldier(String soldierName) {
        this.soldierName = soldierName;
    }
    
    public Soldier(String soldierName, String weapon) {
        this.soldierName = soldierName;
        this.weapon = weapon;
    }
    
    public Soldier(String soldierName, String weapon, String gender) {
        this.soldierName = soldierName;
        this.weapon = weapon;
        this.gender = gender;
    }
    
    public Soldier(int age, String soldierName, String weapon, String gender) {
        this.gender = gender;
        this.weapon = weapon;
        this.soldierName = soldierName;
        this.age = age;
    }
}

类的属性赋值的顺序

  1. 系统根据这个属性的类型来设置默认值。
  private int age;
  1. 显示初始化
   private int age = 6;
  1. 构造器初始化
public Person(int age) {
    this.age = age;
}
  1. 调用方法或直接给属性赋值
person.setAge(5);
person.age = 18;

JavaBean类(扩展知识)

JavaBean是一种Java语言写成的可重用组件。

所谓JavaBean是指符合如下标准的Java类:

    类是公共的
    有一个无参的公共的构造器
    有属性,且有对应的  get  、set  方法

用户可以使用JavaBean将功能、处理、值、数据库访问和其它任何可以用Java代码创造的的对象进行打包,并且其他的开发者可以同通过内部的JSP页面、Servlet、其它JavaBean、applet程序或者应用来使用这些对象。用户可以为JavaBean提供一种随时随地的复制和粘贴功能而不用关心任何改变。

JavaBean
用来描述现 实世界中的具体数据:Book、Employee、Department、Product、…… 也有其他名称:domain(领域模型)、POJO(Plain old Java Object普通的传统的Java对象)、entity(实体类) 功能性组件:用来执行具体代码逻辑对应的操作
BookServlet
BookService
BookDao
工具类:通常用来把某个特定操作封装到工具方法中。工具类通常是用类名来直接调用方法。 Aarrys.sort()
JavaBean的要求
必须有的组成部分:

私有的属性
针对私有属性设置的公共的getter()、setter()方法
无参构造器
getter()和setter()方法的规则

private int age;
 public int getAge() {
  return age;
  }
  ​
  public void setAge(int age) {
  this.age = age;
  }

规则描述如下:

  • getXxx()或setXxx()方法取方法名字符串
  • 去掉get或set(剩下Xxx)
  • Xxx首字母小写

this关键字

  1. 类的方法中:代表调用当前方法的对象

5.png

  1. 类的构造器中:代表当前构造器正在创建对象

6.png

this能干什么

1.调用属性

2.调用方法

3.this调用本类的构造器

4.this调用构造器的规则

  • 在构造器中调用其他构造器,this()语句必须在第一行
  • 各个构造器之间调用不能形成闭环
  • 一个构造器中调用其他构造器的操作只能有一个