当前位置:  首页>> 技术小册>> Java语言基础5-面向对象初级

14.1 概述

  • 语法:
  1. 访问修饰符 类名 (参数列表){
  2. // 初始化语句;
  3. }

构造器的组成:

示例:

  1. package com.constructor;
  2. /**
  3. * @author maxiaoke.com
  4. * @version 1.0
  5. */
  6. public class Animal {
  7. /**
  8. *
  9. */
  10. private int legs;
  11. public Animal() {
  12. this.legs = 4;
  13. }
  14. public Animal(int legs) {
  15. this.legs = legs;
  16. }
  17. public int getLegs() {
  18. return this.legs;
  19. }
  20. public void setLegs(int legs) {
  21. this.legs = legs;
  22. }
  23. }
  1. package com.constructor;
  2. /**
  3. * @author maxiaoke.com
  4. * @version 1.0
  5. */
  6. public class AnimalTest {
  7. public static void main(String[] args) {
  8. // 创建Animal的实例,调用无参构造器,将legs初始化为4
  9. Animal animal = new Animal();
  10. System.out.println("animal.getLegs() = " + animal.getLegs());
  11. }
  12. }

14.2 构造器的作用

  • ① 创建对象。
  • ② 给对象进行初始化。

  • 示例:

  1. Order o = new Order();

示例:

  1. Person p = new Person("张三",15);

14.4 构造器的分类

  • 根据参数的不同,构造器可以分为如下两类:
  • ① 隐式无参构造器(系统 默认 提供)。
  • ②显式 定义一个或多个构造器(无参、有参)。

14.5 使用构造器的注意事项

  • ① Java 语言中,每个类都至少有一个构造器。
  • ② 默认构造器的修饰符和所属类的修饰符一致。
  • ③ 一旦显式的定义了构造器,则系统 不再 提供默认构造器。
  • ④ 一个类可以创建多个 重载 的构造器。
  • ⑤ 父类的构造器不可以被子类继承。

14.6 构造器的重载

  • 构造器一般用来创建对象的同时初始化对象,如:
  1. class Person{
  2. String name;
  3. int age;
  4. public Person(String name,int age){
  5. this.name = name;
  6. this.age = age;
  7. }
  8. }

构造器重载使得创建对象更加灵活,可以很方便的创建不同的对象,如:

  1. class Person{
  2. String name;
  3. int age;
  4. private Date birthday;
  5. public Person(String name,int age){
  6. this.name = name;
  7. this.age = age;
  8. }
  9. public Person(String name,int age,Date birthday){
  10. this(name,age);
  11. this.birthday = birthday;
  12. }
  13. ...
  14. }
  • 构造器重载,参数列表必须不同。

14.7 练习

  • ① 定义 Student 类,有 4 个属性:
    • String name ;
    • int age ;
    • String school ;
    • String major ;
  • ② 定义 Student 类的 3 个构造器:
  1. public Student(String name,int age){}
  1. public Student(String name,int age,String school){}
  1. public Student(String name,int age,String school,String major){}
  • ③ 在 main 方法中分别调用不同的构造器创建不同的对象,并输出其属性值。

  • 示例:

  1. package com.constructor.demo2;
  2. /**
  3. * @author maxiaoke.com
  4. * @version 1.0
  5. */
  6. public class Student {
  7. /**
  8. * 名称
  9. */
  10. private String name;
  11. /**
  12. * 年龄
  13. */
  14. private int age;
  15. /**
  16. * 学校
  17. */
  18. private String school;
  19. /**
  20. * 专业
  21. */
  22. private String major;
  23. public Student(String name, int age) {
  24. this.name = name;
  25. this.age = age;
  26. }
  27. public Student(String name, int age, String school) {
  28. this(name, age);
  29. this.school = school;
  30. }
  31. public Student(String name, int age, String school, String major) {
  32. this(name, age, school);
  33. this.major = major;
  34. }
  35. @Override
  36. public String toString() {
  37. return "Student{" + "name='" + this.name + '\'' + ", age=" + this.age + ", school='" + this.school + '\''
  38. + ", major='" + this.major + '\'' + '}';
  39. }
  40. }
  1. package com.constructor.demo2;
  2. /**
  3. * @author maxiaoke.com
  4. * @version 1.0
  5. */
  6. public class StudentTest {
  7. public static void main(String[] args) {
  8. Student s1 = new Student("张三", 25);
  9. System.out.println("s1 = " + s1);
  10. Student s2 = new Student("李四", 18, "中国社会大学");
  11. System.out.println("s2 = " + s2);
  12. Student s3 = new Student("王五", 17, "中国社会大学", "萌萌哒专业");
  13. System.out.println("s3 = " + s3);
  14. }
  15. }

14.8 属性赋值总结

  • 到目前为止,有很多位置都可以对类的属性进行赋值,现总结这几个位置,并指明赋值的先后顺序。
  • 赋值的位置:
    • ① 默认初始化。
    • ② 显示初始化。
    • ③ 构造器中初始化。
    • ④ 通过 “对象.属性” 或 “对象.方法” 的方式赋值。
  • 赋值的先后顺序:① → ② → ③ → ④