java封装的详解及封装的意义

封装

1.什么是封装?

我们程序设计要追求”高内聚,低耦合“。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合就是:仅暴露少量的方法给外部使用。封装(数据的隐藏):通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这成为信息隐藏。

2.怎么用封装?

在这会涉及到private的应用

封装大多数是对属性来说,对方法的使用比较少。咱们先来写一个students类,里面包含的属性和方法。

public class students {

//名字

private String name;

//学号

private int xuehao;

//成绩

private int chengji;

} //不难发现定义这些变量的时候,数据类型前面有了private,表示属性私有,无法在主程序中被直接调用。

主程序如下

public class demon1 {

public static void main(String[] args) {

students students = new students();

System.out.println(students.name); //当你这样编写主程序的时候,他的name会是爆红的,是不会成功运行的。

} //若你把上面程序中的private改成public他就可以正常运行,不会爆红。

}

也就是说,当一个类中的变量被private(私有),他就无法在主程序中直接被调用,那么咱们就需要其他的方法,进行赋值。

3.怎么对类中私有的变量进行操作?

此时就会有一个get/set,可以对这个属性来进行操作,也就是提供一些可以操作这个属性的方法。这个方法就是提供一些public的get/set 方法。

get: 获得这个数据set:给这个数据设置值。

咱么看一下这个类的代码

public class students {

//名字

private String name; //三个属性

//学号

private int xuehao;

//成绩

private int chengji;

public String getName(){ //getName函数,使得主程序可以调用这个方法,来获得这个类中的name的值

return this.name;

}

public void setName(String name){ //setName函数,使得主程序可以调用这个方法,来对类中的这个name进行赋值。

//在setName后面的括号中,String name 是形参,需要主程序中给他传一个实参。

this.name=name;

}

}

现在这个样子。就可以在主程序中对这个类中的变量进行修改了。咱们看一下主程序的代码

public class demon1 {

public static void main(String[] args) {

students students = new students(); //new一个对象,让students实例化

String name="Gao"; //在主程序中初始化一个name

String name2; //定义一个String 变量,用来接收类中的name.

students.setName(name); //调用类中的setName函数,给类中的name赋值

name2=students.getName(); //调用类中的getName函数,用来获取类中的name的值。

System.out.println(name2); //输出name2用来检验类中的name 是否发生改变。

}

}

=============================================

他的输出结果就是

Gao

4.怎么快捷生成get/set方法?

在类中,在定义好变量之后,按住alt+insert即可,就会出现很多选项,选择Getter and Setter即可。然后选择你想要创建的变量就行。

5.为什么要用封装?

大家看到这,可能会感觉为什么要用封装呢,封装岂不是多次一举,当不用封装的时候,普通调用的时候,输入任何值都是可以的,然后封装的话,可以在类中的get/set方法,添加很多细节,如输出和输出的东西进行一些要求,比如让你输入一个年龄的时候,在没有封装的情况下,输入任何数字都是可以的,在封装之后,可以在类中进行一些条件限制,比如要求输入年龄的范围,那咱们写一个代码看一下。

下面是类的代码

public class students {

//名字

private String name;

//学号

private int xuehao;

//成绩

private int chengji;

//年龄

private int age;

public int getAge() {

return age;

}

public void setAge(int age) { //可以对setName添加一些细节,对主程序中输入的年龄有限制。

if(age<110&&age>0){

this.age = age;

System.out.println("输入恰当");

}

else System.out.println("您输入的结果不符合实际要求");

}

}

下面是主程序的代码

public class demon1 {

public static void main(String[] args) {

students students = new students();

int age1=18;

int age2=128;

students.setAge(age1); //调用setName函数,并传一个实参。

students.setAge(age2);

}

}

============================================

他的最终输出结果是

输入恰当

您输入的结果不符合实际要求

6.封装的意义

提高代码的安全性,保护数据。隐藏代码的实现细节。统一接口。提高了系统的可维护性。

Copyright © 2022 世界杯进球_国足进世界杯了吗 - fulitb.com All Rights Reserved.