封装性
封装性是面向对象中很重要的一个特性。
封装性在Java中的体现:
1.方法就是一种封装
2.private也是一种封装
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
方法封装
代码如下:我们想要完成返回数组最大值的操作,可以将for循环写入一个方法中,在main函数中调用这个方法即可。
public class Demo01PrivateMethod {
public static void main(String[] args) {
int[] arr = {10,50,60,70,100,600};
System.out.println(getMax(arr));
}
//给一个数组,给你返回数组内的最大值
public static int getMax(int[] arr){
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if(max < arr[i]){
max = arr[i];
}
}return max;
}
private关键字封装
private是一个关键字,通过它修饰的成员变量,外部类就无法直接使用:
对象名.成员变量;
进行调用,必须在原类中进行定义一对Getter和Setter方法,在其他类中就可以访问了,通过setXxx设置变量,getXxx,获取变量。
格式:
Getter:不能有参数,返回值类型和成员变量对应。
Setter:不能有返回值,参数类型与成员变量对应。
此时要注意,对于布尔类型的成员变量进行private封装时,原类中setXxx方法名不变,getXxx方法名要改为isXxx。
package demo.demo03;
/*问题:定义Person的年龄时,无法阻止不合理的数值被设置进来
* 解决方案:用private关键字将需要保护的成员变量进行修饰
* 一旦使用private进行修饰,本类中可以随意访问,超出本类范围就不能够直接访问了。
* 间接访问:
* 定义一对Getter和Setter方法,在其他类中就可以访问了
*Getter:不能有参数,返回值类型和成员变量对应。
* Setter:不能有返回值,参数类型与成员变量对应。
* */
public class Person {
String name;
private int age;
public void show(){
System.out.println("我叫:" + name + "年龄:" + age);
}
public void setAge(int num){
if (num > 0 && num < 100){
age = num;
}else {
System.out.println("输入数据不合理!");
}
}
public int getAge(){
return age;
}
}
新建一个类,进行对象的创建,以及成员变量赋值与方法的调用
public class Demo02Person {
public static void main(String[] args) {
Person per = new Person();
per.name = "JinxLin";
per.setAge(18);
per.show();
}
}
this关键字
package demo.demo04;
/*当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量
* 如果需要使用本类中的成员变量,那么需要使用: this.成员变量名
* 通过谁调用的方法,谁就是this*/
public class Person {
String name;//自己的名字
//参数name是对方的名字
//成员变量是我的名字
public void hello(String name){
System.out.println(name + "!你好,我是" + this.name);
System.out.println(this);
}
}
JavaBean
package demo.demo05;
/*一个标准的类通常要拥有下面四个组成部分:
* 1.所有的成员变量都要使用private进行修饰
* 2.为每一个成员变量都写一对Getter,Setter方法
* 3.编写一个无参构造方法
* 4.编写一个全参构造方法
* 这样标准的类叫做JavaBean*/
public class Student {
private String name;
private int age;
public Student(){}
public Student(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}