Java基础视频笔记--11封装
封装
-
什么是封装?
- 现实生活中有很多现实的例子都是封装的,例如:手机,电视机,笔记本电脑,照相机,这些都是外部有一个坚硬的壳儿。封装起来,保护内部的部件。保证内部的部件是安全的。另外封装了之后,对于我们使用者来说,我们是看不见内部的复杂结构的,我们也不需要关心内部有多么复杂,我们只需要操作外部壳儿上的几个按钮就可以完成操作。
-
为什么要进行代码的封装?
-
首先看一段程序:
public class PersonTest{ public static void main(String[] args){ // 创建Person对象 Person p1 = new Person(); // 访问人的年龄 // 访问一个对象的属性,通常包括两种操作,一种是读数据,一种是改数据。 // 读数据 System.out.println(p1.age); //读(get表示获取) // 修改数据(set表示修改/设置) p1.age = 50; //再次读取 System.out.println(p1.age); // 在PersonTest这个外部程序中目前是可以随意对age属性进行操作的。 // 一个人的年龄值不应该为负数。 // 程序中给年龄赋值了一个负数,按说是不符合业务要求的,但是程序目前还是让它通过了。 // 其实这就是一个程序的bug。 p1.age = -100; //改(随意在这里对Person内部的数据进行访问,导致了不安全。) System.out.println("您的年龄值是:" + p1.age); //读 } } //另一个源文件Person.class public class Person{ int age; /age属性是暴露的,在外部程序中可以随意访问。导致了不安全。 } -
在上面程序当中,我们可以随时的读取和设置实例变量的值,当我们把实例变量,p1.age = -100; 这显然是不合法的,但是程序还是通过的,随意的对Person内部的数据进行访问,导致数据的不安全。
-
Person类的age属性对外暴露,可以在外部程序中随意访问,导致了不安全。
-
封装的作用有两个:第一个作用:保证内部结构的安全。第二个作用:屏蔽复杂,暴露简单。
在代码级别上,封装有什么用?----一个类体当中的数据,假设封装之后,对于代码的调用人员来说,不需要关心代码的复杂实现,只需要通过一个简单的入口就可以访问了。另外,类体中安全级别较高的数据封装起来,外部人员不能随意访问,来保证数据的安全性。
-
-
代码封装的步骤
-
第一步:属性私有化(使用关键字private进行私有化)
//怎样私有化属性 public class Person{ private int age; //加上关键字private,age属性就变成了私有,只能在Person这个类当中被访问,除了这个类就无法被访问 } //在Person类外访问一下age public class PersonText{ public static void main(String[] args){ Person p1 = new person(); System.out.println(p1.age);//读age属性的值,这里会输出什么? p1.age = 35; //修改age属性的值 System.out.println(p1.age);//读age属性的值,这里会输出什么? //答案是:无法通过编译,编译器会报错,age无法被访问 // Person的age,彻底在外部不能访问了。但是这难免有点太安全了。 } } -
第二步:对外提供简单的操作入口。
-
1个属性对外提供两个set和get方法。外部程序只能通过set方法修改,只能通过get方法读取,可以在set方法中设立关卡来保证数据的安全性。
-
应该对外提供几个访问入口? 这些操作入口是否应该是方法呢?---一个方法专门完成读(get), 一个方法专门完成写(set)。
-
get读年龄,set改年龄,这个读和改都是操作的一个对象的年龄。这里涉及到一个新的概念:实例方法,这里记住不带staic的方法就是实例方法,实例:实例对象(对象变量), 实例方法(对象方法)。
//带有static的方法 //没有static的方法 //分别怎么调用? //带有static的方法怎么调用?通过“类名.”的方式访问。 //对象被称为实例。 //实例相关的有:实例变量、实例方法。 //实例变量是对象变量。实例方法是对象方法。 //实例相关的都需要先new对象,通过“引用.”的方式去访问。 public class MethodTest{ public static void main(String[] args){ MethodTest.doSome(); //类名. 可以省略(在同一个类中。) doSome(); // 尝试使用“类名.”的方式访问“实例方法” // 错误的 //MethodTest.doOther(); // 创建对象 MethodTest mt = new MethodTest(); // 通过"引用."的方式访问实例方法。 mt.doOther(); } // 带有static public static void doSome(){ System.out.println("do some!"); } //这个方法没有static,这样的方法被称为:实例方法。(对象方法,对象级别的方法) //这个没法解释,大家目前死记硬背。 public void doOther(){ System.out.println("do other...."); } } -
[修饰符列表] 返回值类型 方法名(形式参数列表){
}注意:java开发规范中有要求,set方法和get方法要满足以下格式。
get方法的要求:
public 返回值类型 get+属性名首字母大写(无参){
return xxx;
}
set方法的要求:
public 返回值类型 set+属性名首字母大写(有一个参数){
xxx = 参数;
}
-
-

浙公网安备 33010602011771号