Java:浅谈类的构造器 深藏阁楼爱情的钟 2021-09-24 23:40 344阅读 0赞 ### 文章目录 ### * 0. 预备 * 1. 类定义 * 2. 构造器 * 3. 例子 * * 3.1. 空参构造器 * 3.2. 有参构造器 * 3.2. 重载构造器 * 4. 额外补充 # 0. 预备 # 阅读本篇需要你预先了解 Java 中类的基本知识。 1. 世间一切皆对象; 2. 类是对象的模板; 3. 类包含属性、方法、静态成员和静态方法。 4. 类可以继承。 # 1. 类定义 # [访问修饰符] class 类名称 [extends 父类名称] { [访问修饰符] 类型 成员名; [访问修饰符] 类型 方法名; } # 2. 构造器 # 1. 构造器是和类名同名,且不返回任何东西的方法。 2. 构造器用于构造对象,还可以初始化对象的信息。 3. 一个类中定义的多个构造器,彼此构成重载; 4. 如果没有显式定义构造器,则编译器提供一个默认的空参构造器; 5. 如果显式定义了构造器,则编译器不在提供默认的空参构造器。 # 3. 例子 # 有一个 “Person” 类,有五个属性:姓名、性别、年龄、身高和体重。 // 为了篇幅,不考虑封装性 String name; boolean gender; int age; double height; double weight; ## 3.1. 空参构造器 ## public class Person { String name; boolean gender; int age; double height; double weight; } 在上面的代码中,我没有写任何方法,当然包括构造器。 编写一段代码进行测试: public class Solution { public static void main(String[] args) { Person person = new Person(); System.out.println(person.name); System.out.println(person.gender); System.out.println(person.age); System.out.println(person.height); System.out.println(person.weight); } } 运行结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1B1cnN1ZUx1bw_size_16_color_FFFFFF_t_70_pic_center] 在下面的代码中,编写一个空参构造器 public class Person { String name; boolean gender; int age; double height; double weight; public Person() { } } 运行结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1B1cnN1ZUx1bw_size_16_color_FFFFFF_t_70_pic_center 1] 默认构造器可以构造一个对象,但是对象的属性值都是默认值,包含的信息很少。 **问1:为什么我没写构造器,还是能构造对象?** **答1:因为编译器提供一个默认的空参构造器。** ## 3.2. 有参构造器 ## 有些时候,你只知道对象的部分信息。 public class Person { String name; boolean gender; int age; double height; double weight; public Person() { } public Person(String name, boolean gender) { this.name = name; this.gender = gender; } } 测试 public class Solution { public static void main(String[] args) { Person person = new Person("Ana", false); System.out.println(person.name); System.out.println(person.gender); System.out.println(person.age); System.out.println(person.height); System.out.println(person.weight); } } 运行结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1B1cnN1ZUx1bw_size_16_color_FFFFFF_t_70_pic_center 2] ## 3.2. 重载构造器 ## 有些时候,你知道对象的所有信息。 public class Person { String name; boolean gender; int age; double height; double weight; public Person() { } public Person(String name, boolean gender) { this.name = name; this.gender = gender; } public Person(String name, boolean gender, int age, double height, double weight) { this.name = name; this.gender = gender; this.age = age; this.height = height; this.weight = weight; } } 测试 public class Solution { public static void main(String[] args) { Person person = new Person("Ana", false, 18, 170, 45); System.out.println(person.name); System.out.println(person.gender); System.out.println(person.age); System.out.println(person.height); System.out.println(person.weight); } } 测试结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1B1cnN1ZUx1bw_size_16_color_FFFFFF_t_70_pic_center 3] 上面三个构造器彼此构成重载 > public Person() > public Person(String name, boolean gender) > public Person(String name, boolean gender, int age, double height, double weight) # 4. 额外补充 # 关键字 **this** 的作用。 1. 关键字 this 指代当前调用方法的对象; 2. 调用方法; 3. 调用重载构造器。 这里,讲讲 **this** 调用重载构造器。 构造器 “Person(String name, boolean gender)” 和构造器 “public Person(String name, boolean gender, int age, double height, double weight)” 有一部分代码是重复的。 public Person(String name, boolean gender) { this.name = name; this.gender = gender; } public Person(String name, boolean gender, int age, double height, double weight) { this.name = name; this.gender = gender; this.age = age; this.height = height; this.weight = weight; } 改进后: public Person(String name, boolean gender) { this.name = name; this.gender = gender; } public Person(String name, boolean gender, int age, double height, double weight) { this(name, gender); // 关键点,调用重载构造器 this.age = age; this.height = height; this.weight = weight; } 测试: public class Solution { public static void main(String[] args) { Person person = new Person("Ana", false, 18, 170, 45); System.out.println(person.name); System.out.println(person.gender); System.out.println(person.age); System.out.println(person.height); System.out.println(person.weight); } } 结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1B1cnN1ZUx1bw_size_16_color_FFFFFF_t_70_pic_center 4] **注意事项**: 1. 调用格式: this(零个或多个参数); 2. 必须处在重载构造器的第一句; 3. 一个构造器中,最多只能调用一个重载构造器。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1B1cnN1ZUx1bw_size_16_color_FFFFFF_t_70_pic_center]: /images/20210923/6acb016b07eb4cb9beb10aa9ebe7e069.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1B1cnN1ZUx1bw_size_16_color_FFFFFF_t_70_pic_center 1]: /images/20210923/662dc94fbc2b4dd4b2b9dd4f8db3d102.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1B1cnN1ZUx1bw_size_16_color_FFFFFF_t_70_pic_center 2]: /images/20210923/c33e89cc5b474b19abd5042e4d57573d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1B1cnN1ZUx1bw_size_16_color_FFFFFF_t_70_pic_center 3]: /images/20210923/2e5da16d3d244c90803bdb1c3b6f71ab.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1B1cnN1ZUx1bw_size_16_color_FFFFFF_t_70_pic_center 4]: /images/20210923/e78559028e9e41bc9016e9a95692a977.png
相关 浅谈Java中的构造函数及其应用 在Java编程中,构造函数是一种特殊的方法,它在创建一个新的对象时被自动调用。构造函数的主要作用包括: 1. **初始化对象属性**:当创建一个新对象时,可以通过构造函数来设 阳光穿透心脏的1/2处/ 2024年09月14日 17:18/ 0 赞/ 13 阅读
相关 浅谈Java类加载器 DK 默认提供了3种ClassLoader: * Bootstrp Classloader(启动类加载器) * %JAVA\_HOME%/jr... 刺骨的言语ヽ痛彻心扉/ 2024年04月18日 20:29/ 0 赞/ 24 阅读
相关 Java中的子类构造器会调用父类构造器 说在前面: 每个类都会有一个默认的构造器(隐式的),但如果我们重新写了一个构造器,默认的隐式构造器就会被覆盖(就没用了),除非我们再显示的定义以下,如下代码所示: 桃扇骨/ 2024年03月30日 12:01/ 0 赞/ 32 阅读
相关 浅谈c++中的构造函数 下面所有的构造函数都将用Student这个类作为例子 class Student { private: static 你的名字/ 2022年08月22日 01:14/ 0 赞/ 150 阅读
相关 浅谈JavaScript设计模式——构造器模式(生成器模式) 工厂模式虽然解决了重复实例化的问题,但无法识别对象类型。 可以采用构造函数(构造方法)可用来创建特定的对象,可以解决工厂模式无法识别对象实例的问题。也就是说,使用构造函数的方 短命女/ 2022年06月18日 08:49/ 0 赞/ 166 阅读
相关 浅谈 Integer 类 目录 [1、Integer 类简介][1_Integer] [2、Integer 类和 int 的区别][2_Integer _ int] [3、Integ 朱雀/ 2022年03月16日 10:56/ 0 赞/ 150 阅读
相关 浅谈spring为什么推荐使用构造器注入 > 目录 > > [一、前言][Link 1] > [二、常见的三种注入方式][Link 2] > 2.1 field注入 > 2.2 构造器注入 > 2.3 你的名字/ 2021年12月16日 09:57/ 0 赞/ 241 阅读
相关 Java:浅谈类的构造器 文章目录 0. 预备 1. 类定义 2. 构造器 3. 例子 3.1. 空参构造器 3.2. 有参构造器 深藏阁楼爱情的钟/ 2021年09月24日 23:40/ 0 赞/ 345 阅读
相关 【JAVA】浅谈java枚举类 一、什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二、为什么不用静态常量来替代枚举类呢? public s 我会带着你远行/ 2021年09月19日 11:32/ 0 赞/ 354 阅读
还没有评论,来说两句吧...