修饰符:

修饰类、属性、方法、构造方法, 通常放在语句的最前端

控制修饰成员的 访问权限 特征

修饰符分类:

  • 权限修饰符 (访问修饰符, 访问控制修饰符)
  • 特征修饰符 (非访问修饰符)

权限修饰符

控制访问权限

修饰什么? 类本身和类成员(除程序块)(类 属性 方法 构造方法)

修饰范围?

  • 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修饰的属性, 存在静态元素区

特点:

  1. 静态元素在类加载时就初始化了, 创建的非常早, 此时没有创建对象
  2. 静态元素存储在静态元素区中, 每个类都有一个自己的区域, 彼此不冲突
  3. 静态元素只加载一次(只有一份), 全部类对象及类本身共享
  4. 由于静态元素区加载的时候, 有可能没有创建对象, 可以通过类名字直接访问
  5. 可以理解为静态元素不属于任何一个对象, 而是属于类的
  6. 静态元素区Garbage Collection无法管理, 可以认为常驻内存
  7. 非静态成员(堆内存对象里)中可以访问静态成员(静态去)
  8. 静态成员中可以访问静态成员(都存在静态区)
  9. 静态成员中不可以访问非静态成员(个数)
  10. 静态元素中不可以出现this或super关键字(静态元素属于类)

abstract 抽象类

抽象类: 修饰类 修饰方法

interface接口—结构 class

多态

面向对象的特征: 继承 封装 多态 (抽象)

封装: 将数据或执行过程包装起来; 属性私有, 但提供操作的方法