Java-对象的构造及初始化

1、构造方法

1.1概念

构造方法(也称构造器)是一个特殊的成员方法,名字必须与类名相同。 作用:一般用来初始化成员属性和成员方法,即new对象产生后,就调用了对象的属性和方法。 例:

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

    public Student() {
          
   
        System.out.println("无参构造方法被调用啦!");
    }
    public Student(String name,int age) {
          
   
        System.out.println("有两个参数的构造方法被调用啦!");
    }

    public static void main(String[] args) {
          
   
        Student stu1 = new Student();//这里会调用无参构造方法
        Student stu2 = new Student("张三",18);//这里会调用两个参数的构造方法
    }
}

1.2特点

  1. 名字必须与类名相同
  2. 没有返回值(不同于void类型返回值,void是没有具体返回值类型;构造函数是连类型都没有)
  3. 构造函数是对象一建立就运行,给对象初始化,就包括属性、执行方法中的语句(而一般函数是对象调用才执行,用".方法名"的方式给对象添加功能
  4. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
  5. 构造方法可以重载(名字相同,参数列表不同,因此构成方法重载)
  6. 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的(注意:一旦用户定义,编译器则不再生成)
  7. 构造方法中,可以通过调用其他构造方法来简化代码(注意:this(…)必须是构造方法中第一条语句;并且调用不能成环)
public class Student {
          
   
    public String name;
    public int age;

    public Student() {
          
   
        this("张三",18);//这里会调用两个参数的构造方法
        System.out.println("无参构造方法被调用啦!");
    }
    public Student(String name,int age) {
          
   
        System.out.println("有两个参数的构造方法被调用啦!");
    }

    public static void main(String[] args) {
          
   
        Student stu1 = new Student();//这里会调用无参构造方法
    }
}
  1. 一般函数不能调用构造方法,只有构造函数才能调用构造方法

2、默认初始化

为什么局部变量在使用时必须要初始化,而成员变量不用呢? 要搞清楚这个过程,就要知道new关键字背后所发生的一些事情: 在JVM层面要做以下事情:

  1. 检测对象对应的类是否加载了,如果没有加载则加载
  2. 为对象分配内存空间
  3. 处理并发安全问题(比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突)
  4. 初始化所分配的空间,即:对象湖被申请好之后,对象中包含的成员已经设置好了初始值,比如:
  1. 设置对象头信息
  2. 调用构造方法,给对象中各个成员赋值

3、就地初始化

在声明成员变量时,就直接给出了初始值。 代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中。 tip:快速构建构造方法 空白处右键 -> Generate -> Constructor

经验分享 程序员 微信小程序 职场和发展