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特点
- 名字必须与类名相同
- 没有返回值(不同于void类型返回值,void是没有具体返回值类型;构造函数是连类型都没有)
- 构造函数是对象一建立就运行,给对象初始化,就包括属性、执行方法中的语句(而一般函数是对象调用才执行,用".方法名"的方式给对象添加功能
- 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
- 构造方法可以重载(名字相同,参数列表不同,因此构成方法重载)
- 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的(注意:一旦用户定义,编译器则不再生成)
- 构造方法中,可以通过调用其他构造方法来简化代码(注意: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();//这里会调用无参构造方法 } }
- 一般函数不能调用构造方法,只有构造函数才能调用构造方法
2、默认初始化
为什么局部变量在使用时必须要初始化,而成员变量不用呢? 要搞清楚这个过程,就要知道new关键字背后所发生的一些事情: 在JVM层面要做以下事情:
- 检测对象对应的类是否加载了,如果没有加载则加载
- 为对象分配内存空间
- 处理并发安全问题(比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突)
- 初始化所分配的空间,即:对象湖被申请好之后,对象中包含的成员已经设置好了初始值,比如:
- 设置对象头信息
- 调用构造方法,给对象中各个成员赋值
3、就地初始化
在声明成员变量时,就直接给出了初始值。 代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中。 tip:快速构建构造方法 空白处右键 -> Generate -> Constructor
下一篇:
java中的this关键字解析