类 - 中篇
掌握构造方法的定义与作用
理解 this 关键字的用法
掌握封装的思想与实现
核心讲解
(1)构造方法
创建对象时自动调用的方法,用来初始化对象的属性。
方法名和类名完全一样
没有返回值类型,连 void 都不写
可以有参数,用来给属性赋值
没写的话默认有无参构造,写了有参构造,默认的无参就没了
(2)this 关键字
代表当前对象,三个作用:
访问本类的属性:
this.name = name,区分成员变量和局部变量调用本类的其他方法:
this.method()调用本类的其他构造方法:
this(参数),必须在构造方法第一行
(3)封装
面向对象三大特性之一,把属性隐藏起来,对外提供方法来访问。
属性用 private 修饰,外部不能直接访问
提供 public 的 get/set 方法来读写属性
好处:控制访问权限、可以加校验、修改内部实现不影响外部
代码示例
public class Student {
// 私有属性,封装
private String name;
private int age;
// 无参构造
public Student() {
System.out.println("无参构造执行了");
}
// 有参构造
public Student(String name, int age) {
this.name = name; // this区分成员变量和参数
this.age = age;
}
// get/set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
// 加校验
if (age < 0 || age > 120) {
System.out.println("年龄不合法");
return;
}
this.age = age;
}
public void introduce() {
System.out.println("我是" + name + ",今年" + age + "岁");
}
public static void main(String[] args) {
// 调用无参构造
Student s1 = new Student();
s1.setName("张三");
s1.setAge(20);
s1.introduce();
// 调用有参构造
Student s2 = new Student("李四", 19);
s2.introduce();
// s2.name; // 报错,private不能直接访问
s2.setAge(-5); // 校验不通过
}
}
常见误区
构造方法写返回值:构造方法没有返回值类型,加 void 就变成普通方法了
构造方法名写错:必须和类名完全一致,大小写都要对
get/set 方法名乱起:规范是 getXxx/setXxx,首字母大写,很多框架依赖这个规范
this () 随便调用:this (参数) 调用构造必须在第一行,不能循环调用
课后练习
定义一个电脑类,私有属性:品牌、价格、CPU
编写无参和有参构造方法
为每个属性生成 get/set 方法,价格加校验(不能小于 0)
创建对象测试,验证封装和校验

