笔记来自2019求知讲堂零基础Java入门编程视频教程 https://www.bilibili.com/video/av76235341
访问权限修饰符
访问权限修饰符—— public、private、protected置于类的成员(属性、方法)定义之前,用来限定对象对该类成员的访问权限。
修饰符 | 类内部 | 同一个包 | 子类 | 任何地方 |
---|---|---|---|---|
private | Yes | |||
缺省 | Yes | Yes | ||
protected | Yes | Yes | Yes | |
public | Yes | Yes | Yes | Yes |
注:
①对class的权限修饰只可以用public和default(缺省)
②default类只可以被同一个包内部的类访问
③一个Java文件中可以有多个class,但只能有一个public的,其他应为缺省。
④关于protected,若父类子类在同一个包中,子类可以访问父类的protected成员,也能访问父类对象的protected成员;若父类子类不在同一个包中,子类可以访问父类的protected成员,但不能访问父类对象的protected成员。
封装(encapsulation)
信息的封装和隐藏
Java中通过将属性声明为私有的(private),再提供公共的(public)get/set方法实现对该属性的操作,以实现:
①隐藏一个类中不需要对外提供的实现细节;
②使用者只能通过事先制定好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作;
③便于修改,增强代码的可维护性。
下面举例子详细说明
如果一个类中属性的修饰符是public,那么意味着所有使用者都可以直接调用这个属性并进行修改,这样并不是一个好习惯,会造成数据的错误、混乱或出现安全性问题。
举一个简单的例子,建立一个Person类,类中有一个age属性。
//Person类
public class Person {
public int age;
public void printAge() {
System.out.println("年龄是:" + age);
}
}
当使用者用p.age = -100 的时候,程序是不会报错的,但这样明显是不符合逻辑的。
//Test类
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.age = -100;
p.printAge();
}
}
//运行结果:年龄是:-100
所以需要对类中不允许随意更改或者有特殊需求的属性进行封装和隐藏,对属性使用private修饰符,这样属性就不可以被其他类直接使用了。
如果属性的确需要被其他类使用,可以通过定义public的存取方法(get/set方法)来实现,这些方法中可以对属性的修改做出限制。
//Person类
public class Person {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if(age <= 150 && age >0) {
this.age = age;
}else {
System.out.println("输入的年龄有误");
}
}
public void printAge() {
System.out.println("年龄是:" + age);
}
}
//Test类
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.setAge(-100);
p.printAge();
}
}
//运行结果:
//输入的年龄有误
//年龄是:0
JavaBean
JavaBean是一种Java语言写成的可重用组件。
通俗来理解,就是java中实体类的一种约定俗成的写法。
- 类是公共的
- 有一个无参的公共的构造器
- 有属性(属性一般的是私有的),且有对应的get、set方法
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。