一、目前程序存在的问题
无法保证数据的安全性,同时也无法保证数据的有效性
demo:
二、封装的要求
1.private :私有的,被private 修饰的内容只能在类的内部使用
2.为私有的属性提供公开的get/set方法
- 为属性赋值:set方法
public void set属性名(数据类型 变量名){
this.属性名 = 变量名;
}
注意:set属性名 --》属性名首字母大写
形参数据类型取决于 赋值 的属性数据类型- 获取属性值:get方法
public 数据类型 get属性名(){
return this.属性名 ; // this. 可以省略
}
注意:get属性名 —》属性名首字母大写
返回值的数据类型取决于 访问的属性数据类型
public class TestStudent2{
public static void main(String[] args){
Student s = new Student();
//s.name = "赵旭";
s.setName("赵旭");
//s.age = 380;
// 外界为私有化的属性赋值:set
s.setAge(38);
//s.score = 99.0;
s.setScore(99.0);
// 访问私有的属性时:get
System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getScore());
Student s2 = new Student("张飞",999,89.0);
System.out.println(s2.getName()+"\t"+s2.getAge()+"\t"+
s2.getScore());
}
}
class Student{
private String name;
private int age; // 0~200
private double score;// 0~100
public Student(){
}
public Student(String name,int age,double score){
this.name = name;
//this.age = age;
setAge(age);
//this.score = score;
setScore(score);
}
// set:为私有属性赋值(0~150)
public void setAge(int age){
// 进行数据有效性检测
if(age>=0 && age <=150){
this.age = age;
}else{
System.out.println("年龄数据无效~");
}
}
// get:获取私有属性的值
public int getAge(){
return this.age; //this. 可以省略
}
// name : set
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
// score
public double getScore(){
return this.score;
}
public void setScore(double score){
if(score>=0 && score<=100){
this.score=score;
}else{
System.out.println("分数输入有误...");
}
}
}
三、封装的意义
- 保护数据的安全性,可以对数据进行有效性检测
- 对外只提供对应的功能,但是屏蔽具体实现的细节
四、封装小结
- 属性私有化:private修饰符属性
- 为私有化的属性提供公开的 get/set方法