封装
什么是封装?
封装是将某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
使用关键字 “ private ” 修饰属性和方法
使用 “ getter 和 setter ” 方法来操作类的内部信息。
封装的优点:
- 方便正常使用系统,防止错误修改属性。
- 有助于系统之间的松耦合,提供系统的独立性。
- 提高软件按的可重用性。
- 降低了构建大型系统的风险。
Student类代码如下:
public class Student {
//使用private关键字修饰成员变量
private String name;
private int age;
private char sex;
//系统默认构造方法
public Student() {
}
//构造方法
public Student(String name, int age, char sex) {
this.setAge(age);
this.setName(name);
this.setSex(sex);
}
//设置 “ getter 和 setter ” 方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getName(){
return name;
}
public void setName(String name) {
this.name = name;
}
}
StudentTest类代码如下:
public class StudentTest {
public static void main(String[] args) {
//使用构造方法操作类的内部信息
Student stu1 = new Student("李四", 20, '男');
System.out.println("姓名:"+stu1.getName()+",年龄:"+stu1.getAge()+",性别:"+stu1.getSex());
//使用 “ getter 和 setter ” 方法来操作类的内部信息。
Student stu = new Student();
stu.setName("张三");
stu.setAge(18);
stu.setSex('男');
System.out.println("姓名:"+stu.getName()+",年龄:"+stu.getAge()+",性别:"+stu.getSex());
}
}
访问修饰符
类的访问修饰符
类的访问修饰符有两种:
public修饰符: 公有访问级别
默认修饰符:包级私有访问级别
- 一个Java文件中只能有一个public修饰的类,并且这个类的名称要和这个Java文件的名称保持一致。
- 一个Java文件中除了public修饰的类之外,还可以定义0个或者多个默认修饰符(什么都不写)的类。
- 注意:一般来说,一个Java文件中只定义一个类
public修饰符和默认修饰符的特点:
- 在 “ 同一个包中 ” 创建 “ public修饰的类 ” 里可以 “ 创建public修饰的类 ” 。
- 在 “ 同一个包中 ” 创建 “ public修饰的类 ” 里可以 “ 创建默认修饰的类 ” 。
- 在 “ 同一个包中 ” 创建 “默认修饰的类 ” 里可以 “ 创建public修饰的类 ” 。
- 在 “ 同一个包中 ” 创建 “默认修饰的类 ” 里可以 “ 创建默认修饰的类 ” 。
- 在 “ 同其它包中 ” 创建 “public修饰的类 ” 里可以 “ 创建public修饰的类 ” 。
- 在 “ 同其它包中 ” 创建 “public修饰的类 ” 里可以 “ 不可以创建默认修饰的类 ” 。
- 在 “ 同其它包中 ” 创建 “默认修饰的类 ” 里可以 “ 创建public修饰的类 ” 。
- 在 “ 同其它包中 ” 创建 “默认修饰的类 ” 里可以 “ 不可以创建默认修饰的类 ” 。
成员变量的访问修饰符
成员变量修饰符分类:
- public
- private
- protected
- 默认修饰符
成员变量修饰符的特点:
1.public、private、protected、默认修饰符定义的属性,在同一个类中都可以被访问。
2.public、private、protected、默认修饰符定义的属性,在同一个包的不同类中public、protected、默认修饰符可以被访问;private不能被访问。
3.public、private、protected、默认修饰符定义的属性,在不同包的其类中public可以被访问;public、protected、默认修饰符、private不能被访问。
修饰符 | 同一个类中 | 同一个包中 | 不同包中 |
private | 可以 | 不可以 | 不可以 |
public | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 不可以 |
默认修饰符 | 可以 | 可以 | 不可以 |
static修饰符
static修饰变量(静态变量)
static修饰的变量可以直接通过类名来访问。
静态变量VS实例变量的区别
- 静态变量是用static修饰的变量。
- 在内部只有一个拷贝。
- 在类内部,可以在任何方式内直接访问静态变量。
- 在其它类中,可以直接通过类名访问。
- 实例变量没有被static修饰的变量。
- 每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。
static修饰方法(静态方法)
静态方法可以直接通过类型访问。
静态方法VS实例方法区别
- 静态方法可直接通过类名访问。
- 静态方法中不能使用this和super。
- 不能直接访问所属类的实例变量和实例方法。
- 可直接访问静态变量和静态方法。
- 实例方法可以通过实例访问。
- 实例方法可直接访问所属类的静态变量、静态方法、实例变量和实例方法。
static修饰代码块
静态代码块,当Java虚拟机加载类时,就会执行该代码块。如果有多个静态代码块,按顺序加载,每个静态代码快只被执行一次。