一、封装的介绍及应用
封装是面向对象编程的一个核心概念。
封装就是将对象的属性和方法保护起来,不让外界直接访问,只提供公共的方法来操作这些属性。
通过封装,我们可以隐藏对象的内部实现细节,外部只需要关注它提供的接口。
封装示例
public class BankAccount {
private double balance; // 私有属性,外部无法直接访问
// 存款方法
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
} else {
System.out.println("存款金额必须大于零");
}
}
// 取款方法
public void withdraw(double amount) {
if (amount > 0 && balance >= amount) {
balance -= amount;
} else {
System.out.println("取款失败,余额不足或金额无效");
}
}
// 返回余额信息
@Override
public String toString() {
return "当前余额:" + balance;
}
}
public class TestBankAccount {
public static void main(String[] args) {
BankAccount account = new BankAccount();
account.deposit(1000); // 存款1000
account.withdraw(500); // 取款500
System.out.println(account); // 打印余额
}
}
二、this的介绍与使用
this关键字代表当前对象,它在以下场景中尤其有用:
区分成员变量与局部变量:如果局部变量和成员变量同名,this可以用来明确引用成员变量。调用其他构造方法:使用this()在构造方法中调用另一个构造方法。
this的用法示例
public class Employee {
private String name;
private int age;
// 无参构造
public Employee() {
this("未知", 0); // 调用有参构造方法
}
// 有参构造
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
public void display() {
System.out.println("员工姓名:" + name + ", 年龄:" + age);
}
}
public class TestEmployee {
public static void main(String[] args) {
Employee employee = new Employee(); // 调用无参构造
employee.display();
Employee employee2 = new Employee("张三", 30); // 调用有参构造
employee2.display();
}
}
this可以用于区分局部变量和成员变量。
this()可以用来调用同一个类中的其他构造方法。
三、构造方法的使用
构造方法用于创建对象时初始化属性。它有两种常见类型:
无参构造:不带参数,通常用于创建默认对象。有参构造:带参数,用于初始化对象时给属性赋值。
1. 空参构造
(1) 格式:
public 类名() {
// 初始化属性
}
(2) 作用:
用于创建对象,并为属性提供默认值。
(3) 特点:
如果不定义空参构造,JVM 会自动提供一个默认的空参构造。如果定义了其他构造方法(如有参构造),并且没有显式定义空参构造,JVM 将不会自动提供空参构造。
(4) 使用:
在创建对象时,不传递任何参数,JVM 会调用空参构造进行初始化。
public class Car {
private String brand;
private int year;
// 空参构造
public Car() {
this.brand = "默认品牌";
this.year = 2020;
}
public void display() {
System.out.println("品牌: " + brand + ", 年份: " + year);
}
}
2. 有参构造
(1) 格式:
public 类名(参数类型 参数名) {
// 为属性赋值
}
(2) 作用:
用于创建对象并为属性赋予指定的值。
(3) 特点:
需要在创建对象时传递参数。不会自动提供,必须显式定义。
(4) 使用:
在创建对象时,传递具体的参数值,用来初始化对象的属性。
public class Car {
private String brand;
private int year;
// 有参构造
public Car(String brand, int year) {
this.brand = brand;
this.year = year;
}
public void display() {
System.out.println("品牌: " + brand + ", 年份: " + year);
}
}
四、get和set方法的使用
1. set方法
set方法用于为对象的私有属性赋值。一般来说,set方法的命名规则是:set + 属性名称首字母大写。
public void setName(String name) {
this.name = name;
}
作用:为私有属性赋值。命名规则:set + 属性名称首字母大写。参数:set方法通常接受一个参数,类型与私有属性类型一致。
2. get方法
get方法用于获取对象的私有属性值。get方法的命名规则是:get + 属性名称首字母大写。
public String getName() {
return name;
}
作用:返回私有属性的值。命名规则:get + 属性名称首字母大写。返回值:get方法返回的是私有属性的值,类型与属性类型一致。
示例
public class Person {
private String name;
private int age;
// set方法
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
if (age > 0 && age < 150) {
this.age = age;
} else {
System.out.println("Invalid age!");
}
}
// get方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.setName("John");
person.setAge(25);
System.out.println(person.getName()); // 输出: John
System.out.println(person.getAge()); // 输出: 25
}
}
通过get和set方法,可以灵活地控制数据的访问和修改,实现数据的封装和保护。
五、JavaBean的规范
JavaBean是符合特定规范的Java类,常用于表示数据模型。JavaBean有以下要求:
类必须是公有的。必须有一个无参构造方法。成员变量应私有化,并提供get和set方法来操作这些变量。实现Serializable接口(可选,但常用于数据存储和传输)。
JavaBean示例
import java.io.Serializable;
public class Book implements Serializable {
private String title;
private String author;
public Book() {} // 无参构造
public Book(String title, String author) {
this.title = title;
this.author = author;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
public class TestBook {
public static void main(String[] args) {
Book book = new Book("Java编程思想", "Bruce Eckel");
System.out.println("书名:" + book.getTitle() + ", 作者:" + book.getAuthor());
}
}
Serializable接口:用于对象的序列化,支持对象的持久化存储或远程通信。
六、小结
1. 封装的核心概念
将细节隐藏起来,防止外界直接访问,并通过公共接口(方法)对外提供间接访问的方式。
2. private关键字
私有的修饰符。被修饰的属性或方法只能在本类中使用,无法被其他类直接访问。
3. get和set方法
set方法:用于为私有属性赋值。get方法:用于获取私有属性的值。
4. this关键字
概述:this代表当前对象。作用:用于区分重名的成员变量和局部变量。具体含义:哪个对象调用this所在的方法,this就指代哪个对象。
5. 构造方法
无参构造:用于创建对象。如果未手动声明,JVM会自动提供一个。有参构造:用于创建对象并同时为属性赋值。需要手动声明,有参构造存在时建议补充无参构造,以确保灵活性。
6. 标准JavaBean
必须是public的具体类。属性私有化。提供无参和有参构造方法。提供get和set方法用于操作私有属性。