修饰符:
修饰类、属性、方法、构造方法, 通常放在语句的最前端
控制修饰成员的
访问权限
特征
修饰符分类:
- 权限修饰符 (访问修饰符, 访问控制修饰符)
- 特征修饰符 (非访问修饰符)
权限修饰符
控制访问权限
修饰什么? 类本身和类成员(除程序块)(类 属性 方法 构造方法)
修饰范围?
- public 公共的
- protected 受保护的
- default (即默认, 什么也不写) 默认的
- private 私有的
| 权限修饰符 | | 修饰什么 | 本类 | 同包 | 子类(同一包) | 子类(不同包) | 其它包 |
| —- | —- | —- | :—-: | :—-: | —- | —- | —- |
| public | 公共的 | 类、接口、变量、方法 | Y | Y | Y | Y | Y |
| protected | 受保护的 | 变量、方法
注意:不能修饰类(外部类) | Y | Y | Y | Y/N()
(通过子类对象在子类范围内部访问)
Y:this.xxx|实例(子类范围内部).x x x
N:子类范围外部,实例.xxx | N | | 默认不写 | 默认, 什么也不写 | 类、接口、变量、方法 | Y | Y | Y | N | N | | private | 私有的
在同一类内可嘉 | 变量、方法
注意:不能修饰类(外部类) | Y | N | N | N | N |
本类中、范围: 当前文件里边的 类中的方法
同包: 同一个文件夹下的所有类属于一个包内 (该包下还有包的话, 它们包内的类的关系不是同一个包内的关系)
特征修饰符
- static 静态的
- final 最终的 不可改变的
- abstract 抽象的
- synchronized 同步的
- transient 瞬时的 短暂的
- volatile 不稳定的
- native 本地的
| 特征修饰符 | 最终的 | 修饰变量 | 修饰属性 | 修饰方法 | 修饰类 |
| —- | —- | —- | —- | —- | —- |
| final | 最终的、不可更改的 | 只有一次赋值的机会 不能再次发生改变
基本类型: 值不可变;
引用类型: 引用地址不可变 | 特点与修饰变量类似
必须赋初始值(否则编译报错) | 方法是最终的不可更改, 方法不能被子类重写(覆盖)(???) | 该类无法被继承
常见的工具类都是final的, 比如 String Math Scanner Integer | | static | 静态的 | | | 同过类名字调用 | | | abstract | 抽象的 | | | | | | | | | | | | | | | | | | |
static 静态的
修饰: 属性、方法、块、内部类
属性: static修饰的属性, 存在静态元素区
特点:
静态元素在类加载时就初始化了
, 创建的非常早, 此时没有创建对象- 静态元素存储在静态元素区中, 每个类都有一个自己的区域, 彼此不冲突
- 静态元素只加载一次(只有一份), 全部类对象及类本身共享
- 由于静态元素区加载的时候, 有可能没有创建对象, 可以
通过类名字直接访问
- 可以理解为静态元素不属于任何一个对象, 而是属于类的
- 静态元素区Garbage Collection无法管理, 可以认为常驻内存
- 非静态成员(堆内存对象里)中可以访问静态成员(静态去)
- 静态成员中可以访问静态成员(都存在静态区)
- 静态成员中不可以访问非静态成员(个数)
- 静态元素中不可以出现this或super关键字(静态元素属于类)
abstract 抽象类
抽象类: 修饰类 修饰方法
interface接口—结构 class
多态
面向对象的特征: 继承 封装 多态 (抽象)
封装: 将数据或执行过程包装起来; 属性私有, 但提供操作的方法