封装性在java中的体现
方法就是一种封装
“找人做事”
“不亲历亲为每一个行为”
关键字private也是一种封装
将一些细节信息隐藏起来,堆外界不可见
e.g.创建一个方法,要用的时候main调用就是了,不在乎方法内咋写~
private关键字的作用及使用
什么时候用:
- 将需要保护的成员变量进行修饰
- 🚫阻止不合理的数据被设置进来🚫,提高安全性(通过方法内条件判断质量把关)
public class Person{
private int age;//在数据类型前面加上private就好
......
加上之后有什么需要注意的
- 该变量只能在【本类】中使用了
//若:age在类a中为private,在类b中就不能再对象.age调用了
person.age=20;//会报错
- 【超出范围】不能【直接】访问
如何访问呢?
在本类中定义一个public方法,对private变量操作
通过间接:找方法“倒手”访问private成员
必须叫setXXX/getXXX
public void setAge(int num){//方法内部可以自己加操作,进行“质量把关”
if(num<100&&num>=0){
age=num;
}else{
System.out.prinln("数据不合理!");//当传入一个不合理数据时,age存储的仍未0,传入的放不进来
}
}
对于set,不能有返回值,参数类型和成员变量对应
public int getAge(){
return age;
}
对于get,不能有参数,返回值类型和成员变量对应
P110 使用private关键字定义学生类
如果类中有private boolean类型==》get方法应写成isXXX而不是getXXX
public class Student{
private boolean male;
......
//getter
public boolean isMale(){//注意要写is,不是get
return male;//male是类中的私有成员boolean变量,返回值为Boolean类型
//setter
public boolean setMale(boolean b){
male=b;
}
调用代码:
public static void main(String []args){
Student stu=new Student();
stu.setName("鹿晗");
stu.setMale(true);//看这里,boolean类型参数传入是true/false
System.out.println("是不是爷们:"+stu.isMale());
P111 使用this关键字
什么情况使用
- 【局部】变量和【成员】变量重名时,根据【就近原则】,使用局部变量
- 如:局部和成员都有name变量
public class Person{
String name;//成员变量name
public void sayHello(String name){//局部变量name
System.out.println(name+",你好,我是"+this.name);//先局部,后成员,成员处用this引出成员变量
}
}
成员处用this引出成员变量
通过谁调用的方法,谁就是this
使用情况一览
//成员中有name成员变量时
public void setName(String name){//参数和成员重名了
this.name=name;//用this指出是当前对象的成员变量
}
P112 构造方法
专门用来创建对象的方法
new时就是在调用构造方法
注意事项
1、构造方法的名称须和所在的类名称完全一样,包括大小写
- 方法一般都是小写+大写,此为例外
2、无返回值类型,void都不写
Student stu=new Student();//此处的new调用构造方法,Student()即构造方法
3、发生在new时,new后的即是构造方法
4、不能return一个具体的返回值
public class Student {
public Student(){
System.out.println("构造方法执行啦!");
return 100;//错误
}
}
public class Student {
public Student(){
System.out.println("构造方法执行啦!");
return;//可以
}
}
5、没有编写则默认自动调用(和C++一样)(编译器赠送)
6、一旦编写,不再“赠送”
辨认构造方法?
public Student(String name,int age){
this.name=name;
this.age=age;
}
- 无返回值
- 方法名=类名
构造方法的重载
**此Student类构成:成员变量/无参构造方法/全参构造方法/setter/getter **
public class Student {
//成员变量
private String name;
private int age;
//无参数的构造方法
public Student() {
System.out.println("构造方法执行啦!");
}
//全参数的构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//有了全参数的构造函数,还是需要setter和getter可以在后来改变数据
public void setName(String name) {
this.name = name;
}
public void setAge(int age){
this.age=age;
}
}
public class Demo02Student() {
Student stu=new Student();
System.out.println("======");
Student stu2=new Student("可歆",20);
stu2.setName("淇雅");//后期修改数据时需要用到set类方法
stu2.setAge(20);
}
全参数的构造方法:便于将现有数据放进对象
set方法:便于修改数据