一、封装的介绍及应用

封装是面向对象编程的一个核心概念。

封装就是将对象的属性和方法保护起来,不让外界直接访问,只提供公共的方法来操作这些属性。

通过封装,我们可以隐藏对象的内部实现细节,外部只需要关注它提供的接口。

封装示例

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方法用于操作私有属性。