1. 访问修饰符4个:private、 protected、public、默认(不写访问修饰符)
private只有本类可以访问
protected本类,同包类,子类可以访问
默认,本类和同包类可以访问
public,都可以访问
2. 封装的好处
A. 可以讲某个属性变为只读和只写
B. 可以对外部设置的值进行有效性的控制
C. 可以对外隐藏内部存储数据结构
3. Static静态
A. Static属性:
(1) 全类共享一个值
(2) 跟对象无关(只跟类有关)——类属性
(3) 单独存放在数据段的静态区
(4) 类加载期就被产生了
(5) 一般和常量属性绑在一起
B. static方法
(1) static修饰的方法,只能代用static修饰的属性和方法
(2) 非static方法,可以调用static的属性和方法
(3) 跟对象无关(只跟类有关)——类方法
(4) 在类加载时static被优先加载,非static属性后加载,先加载的static方法无法找到对象
(5) 工具类的工具方法才会有这个特性
C. static不能修饰构造方法
4. 初始化块:别名(实例初始化块)在产生对象时自动调用
实例初始化块会在产生对象之后,但是在执行构造方法,我们写的代码之前被自动给调用,它的执行时机,导致它并不常用,因为完全可以把代码直接写在构造方法里面
静态初始化块:
A. 不能操作非static的属性和方法
B. 在加载器被自动执行,且执行一次
C. 当需要预先加载一些资源动作的时候,这种代码就写在静态初始化块中
5. 内部类:可以在类的内部定义类,这种在类的内部定义的类,被称为内部类,内部类所在的类,被称为外部类
根据位置的不同可以分为成员内部类和局部内部类
成员内部类
A. 成员内部类:定义在外部类中,和外部类的属性/方法/构造,处于平行地位
B. 成员内部类可以拥有访问修饰符,使用后的效果和属性/方法/构造是一样的
C. 成员内部类可以定义各种属性/构造/方法/初始化块,甚至可以再定义内部类
D. 成员内部类拥有独立的class文件,其命名规则——外部类的类名$内部类的类名
E. 成员内部类中的属性和方法不能是static
F. 成员内部类的用法仍然是产生对象
G. 成员内部类在外部产生的语法:
先要new出外部类对象,然后用外部类对象.的形式new出对象
H. 当内部类调用外部类方法时,语法为:外部类名.this.外部类名
静态内部类——成员内部类的特例——用static修饰的成员内部类特例
A.区别:静态内部类,属性和方法可以使static,与普通成员内部类不同
B.静态内部类在外部产生的语法:无需产生外部类的对象,直接使用外部类的类名.内部类类名的方法作为它的类型,new出来即可
C.静态内部类的方法不能操作外部类非静态属性,方法,只能操作外部类中的静态属性和方法
局部内部类——定义在外部类的某个方法中
区别:A. 局部内部类拥有独立的class文件,其class文件的名字规则——外部类的类名+$+序号+内部类名,序号从1开始
B.局部内部类不能加访问修饰符,使用后的效果和局部变量是一样的,仅仅在本方法内部可以使用——直接new出来用内部类对象.的方式进行操作
C.局部内部类中的属性和方法不能是static的
D.在局部内部类方法中操作外部类的属性和方法
E.局部内部类不能访问它所在的外部类方法中局部变量,只能访问方法中的常量
匿名内部类——局部内部类的特例——由于没有类名,所以只能使用1次,在产生它的对象的同时去定义它——语法极其特殊
A. 匿名内部类拥有独立class文件,其class文件的名字规则——外部类的类名+$+序号
B. 匿名内部类连类名都没有,没有class关键字,当然就不能使用任何访问修饰符
C. 匿名内部类产生对象的语法和类的定义语法是写在一起的,只能用这一次
D. 匿名内部类不可以定义构造(没有类名)
E. 匿名内部类的属性和方法不能是static
F. 如果想操作它所在的方法内的属性和方法,只能在new出来以后马上操作属性/方法,可以操作到私有的属性和方法