Java 封装

封装概念

        程序中经常出现通过某个对象的直接访问其 Field 的情况,这会存在一系列的问题,比如定义一个 Person 的对 象,其中有 age 这样一个属性,如果将属性值赋值为 1000,虽然程序不会出错,但是逻辑是错误的,人不可能活 1000 岁。那么就需要将这个变量给藏起来,在 Java 中使用 private 关键字可以起到隐藏效果。因此通常将成员变量定义使 用 private 关键字进行修饰,然后通过方法的方式向外提供服务。

        面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方 式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

原则

将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

封装的步骤

1、使用 private 关键字来修饰成员变量。

2、对需要访问的成员变量,提供对应的一对 getXxx 方法 、setXxx 方法。

封装的操作—private 关键字

private 的含义:

1、private 是一个权限修饰符,代表最小权限。

2、可以修饰成员变量和成员方法。

3、被 private 修饰后的成员变量和成员方法,只在本类中才能访问。

private 的使用格式:

private 数据类型 变量名 ;

代码如下:

public class Student {
// 成员变量
private String name;// 姓名
private int age;// 年龄
private String gender;// 性别
private String address;// 地址
public String getName() {
return name;
}
public void setName(String name) {
name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
gender = gender;
}
public String getAddress() {
return address;}
public void setAddress(String address) {
address = address;
}
}

分析:在 Student 这个类中,将属性隐藏起来后,外面的其他来再想通过 Student 类的对象直接访问属性已经 是不可能的了。只能通过对象提供的 set 方法对属性操作,如果对属性进行不合理的赋值时,在 set 方法中就可以通过逻辑加以控制。

封装的操作—this 关键字

经过测试我们发现参数赋值失败,因为在 Student(String name,int age)构造方法中的赋值语句使用的变量都是 形参中的变量 name,age。这里如何才能拿到成员变量 name,age 呢?这时可以借助 this 关键字来区分同名的局 部变量与成员变量。 Java 提供了一个 this 关键字,this 关键字总是指向调用该方法的对象。根据 this 出现位置的不同,this 作为对 象的默认引用有两种情况: 1、构造器中引用,this 指的是该构造器正在初始化的对象。 2、在方法中引用,this 指的是调用该方法的对象。 这两种情况可以概括成一句,即 this 代表当前对象。this 关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或 Field。

this 使用格式:this.成员变量名;

示例代码 1:

public class Student {
// 成员变量
private String name;// 姓名
private int age;// 年龄
private String gender;// 性别
private String address;// 地址
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void printMsg(String msg) {
System.out.println("消息内容:" + msg);
}
public void compare(int a, int b) {
if (a > b) {
this.printMsg("a 大于 B");
} else {
printMsg("b 大于 a");
}
}
public static void main(String[] args) {
Test obj = new Test();
obj.compare(2, 3);
}
}

分析:在方法 compare 比较中进行数值 a 与 b 的比较大小,当 a 大于 b 时,调用 printMsg 方法进行信息输出, 当 b 大于 a 时,同样调用 printMsg 方法进行信息输出。因为 compare 方法与 printMsg 方法都定义在一个类中, 所以当创建一个对象 obj 时,compare 方法与 printMsg 方法都属于这个对象。当通过 obj 调用 compare 方法时, compare 中的 this.printMsg 表示的还是 obj 这个当前对象上的 printMsg 方法。在默认情况下,因为调用关系都是 对象本身的方法或者 Field,所以 this 可以省略。

封标准代码—JavaBean

        JavaBean 是 Java 语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具 有无参数的构造方法,提供用来操作成员变量的 set 和 get 方法。

标准 JavaBean 格式如下:

public class ClassName {
// 成员变量
// 构造方法// 无参构造方法【必须】
// 有参构造方法【建议】
// 成员方法
// getXxx()
// setXxx()
}

编写符合 JavaBean 规范的类,以学生类为例,标准代码如下:

public class Student {
// 成员变量
private String name;
private int age;
private String gender;
private String address;
// 构造方法
public Student() {
}
// 成员方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}

你可能感兴趣的:(JAVA,java,开发语言)