private关键字
private
是一个权限修饰符。
作用:
- 保护成员不被别的类使用,被private修饰的成员只能在本类中才能访问
可修饰:
-
成员变量
-
成员方法
如果修饰的内容要被其他类使用,需要:
- 提供
getXxx()
方法,用于获取成员变量的值,方法用public
修饰 - 提供
setXxx(xxx)
方法,用于设置成员变量的值,方法用public
修饰
this关键字
当局部变量和成员变量同名时使用this区分。
-
this修饰的变量是成员变量
-
方法的形参如果与成员变量同名,带this修饰的变量是成员变量
-
方法的形参如果与成员变量不同名,不带this修饰的变量是成员变量(等号左边)
方法被哪个对象调用,this就代表哪个对象
public class Demo {
public static void main(String[] args) {
Student xs = new Student();
xs.setAge(19); //第5行
xs.setAge(-19); //第7行
}
}
class Student {
private int age;
//利用set方法设置成员变量值,并加以判断
public void setAge(int age) {
if (age < 0 || age > 120) {
System.out.println("年龄有误");
} else {
this.age = age;
System.out.println("年龄为:" + age);
}
}
public int getAge() {
//虽然没有被this修饰,但没有同名变量,所以是成员变量
return age;
}
}
执行结果:
年龄为:19
年龄有误
第5行、第7行执行过程:
setAge
方法的调用者是对象xs
,所以此时的this
就是对象xs
。
this
通过xs
的地址指向了xs
的堆内存,setAge
方法里的age
也会指向xs
地址里的age
最后,右边的参数“19”赋值给this.age
,即修改xs
地址里的age
值为19
setAge
方法调用完成,从栈内存消失
封装
封装是面向对象编程语言对客观世界的模拟,客观世界成员变量都是隐藏在对象内部的,外界是无法直接操作的。
封装原则
对象代表什么,就封装对应的数据,并提供数据对应的行为
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
即所有的成员变量用
private
修饰,并提供对应的getXxx()
/setXxx()
方法
封装好处
- 提高代码的安全性:通过方法来控制成员变量的操作,在方法中可以对数据进行安全校验
- 提高代码的复用性:把代码用方法进行封装,下次用时直接调用方法
封装举例
标准JavaBean就是封装的一个应用
public class Student {
//1. 成员变量私有化
private String name;
private int age;
//2. 提供无参、带全参构造方法
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//3. 提供每一个成员变量对应的 setXxx() / getXxx() 方法
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;
}
//4. 其他方法
public void show() {
System.out.println( name + "," + age );
}
}