今天上课重点讲了构造器和封装
还是比较复杂,需要仔细的理解。
封装
封装是面向对象编程的三大特性之一。
封装的目的:
1.隐藏类方法实现的细节;
2.让使用者只能通过预先定义的方法来访问数据,从而可以在方法中加入一些控制逻辑,限制对成员变量的不合理访问。
简单的理解就是,把成员变量隐藏起来,暴露方法来提供成员的修改和访问。
public class Student {
private String name;
private int age;
private boolean sex;
public Student(String name, int age, boolean sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name + (this.sex ? "先生" : "女士");
}
}
Getter 和 Setter
把属性定义为 private 类型,即私有,向外部暴露其 get 和 set 方法。
相关方法名的定义:
1.get + 首字母大写的属性名() :get 方法一般都是具有和属性数据类型一致的返回值,并且是没有形参的。
2.set + 首字母大写的属性名(参数):set 方法一般都是具有和属性数据类型一致的方法参数,返回值一般是 void。
在 Eclipse 中,可以通过快捷方式生成相关属性的 getter 和 setter
在 「source」-> 「generate getters and setters」
深入构造器(构造器最大的作用就是创造对象)
**如果在类定义中没有显式的定义一个构造器,则编译器在编译源文件时,会创建一个没有参数、没有方法体执行语句的空的构造器。
如果显式的定义了一个构造器,则上述的空的构造器则不会存在。
在调用构造器创建对象的时候,系统会为每个对象的实例变量设置默认值**
**基本数据:数值型的为0,布尔类型的为false,char类型的为’\u0000’;
引用数据类型:null;
如果在方法中定义的局部变量:系统是不会对其设置默认值的,必须要显式的通过赋值运算符=给变量赋值。**
通过构造器为成员变量定义初始化值,这也是构造器的最最重要的用途之一。
构造器重载
如果需要在构造器中调用另外一个构造器,可以使用 this(params);
在构造器中调用构造器,必须把this(params)放在有效的执行语句第一行,而且不允许出现两条this(params)语句。
public Client1(int age, String code, String name) {
this(age);
this.name = name;
}
public Client1(String code) {
this.code = code;
}
public Client1(int age) {
// 复用
if (age < 0 || age > 150) {
System.out.println("不合法的年龄数据");
} else {
this.age = age;
}
}