*****************************************************************************************************
修饰符:
修饰符有4个: private ,默认 , protcter , public。
本类 同包子类 同包非子类 非同包子类 非同包非子类
private √
默认(同包) √ √ √
protected √ √ √ √
public √ √ √ √
以上是访问修饰符修饰的属性或者放在的访问范围。
*****************************************************************************************************
静态修饰符static :
效果:
static -属性:1.全类共享一个值
2.与对象无关 ------------------可以用类名加点访问,被称为类属性
3.单独存放在数据段的静态区。
4.在类加载期就产生了,划分空间。
static-方法:1.只能调用static的属性或者方法
2.非static方法可以调static方法或者属性
3.与对象无关,和类有关 ---------------类方法
4.在类加载的时候,JVM优先加载static修饰的属性或者方法
static修饰的特点:1.与对象无关,只与类有关 (面向对象分析上)
2.在加载期有特殊动作。
<一般工具类的工具方法可以用static修饰>
实力初始化块:会在产生对象的时候调用,在产生对象之后,但是在构造方法我们
写的代码之前被自动调用,它的执行时机导致他并不常用,完全可以把代码写在构
造方法里面。
静态初始化块: 1.不能操作非static属性和方法。
2.在加载期被自动执行,且只执行一次。
3.预加载资源的动作,就实现在静态初始化块中,项目中比较常见
*****************************************************************************************************
内部类:
特点:1.独立的class文件
2.同样需要编译
3.同样可以产生对象
分类:1.成员内部类----------其中有种特殊的:静态内部类
2.局部内部类----------其中有种特殊的:匿名内部类
成员内部类:
1.拥有独立的class文件,其中class文件的名字为
外部类的类名+$+内部类的类名
2.可以拥有各种访问修饰符,效果和属性、构造、方法一样
3.可以在里面写属性、构造、方法等。也可以在里面继续写内部类。
4.成员内部中的属性或方法不能是static的。
成员内部类在外部产生的语法:
需要先new出外部对象,然后用外部类 . 内部类 变量名 = 外部对象 . new 内部类
在内部类操作外部类的属性/方法:
外部类 . this . 属性/方法
静态内部类:
1.属性和方法可以是static的 ---------与普通内部类不同。
在外部产生的语法:
2.无需产生外部类的对象,直接使用。
3.使用方式为:外部类类名 . 内部类类名作为它的类型 new出来即可。
4.静态内部类方法不能操作外部类的非静态属性/方法,只能操作静态的属性和方法。
局部内部类:
1.拥有独立的class文件,文件名的规则:
外部类类名+$+序号+内部类类名 --------序号从1开始。
2.无访问修饰符,与局部变量一样,仅在本方法内部使用。
3.也有属性,构造方法,方法,但是不能是static的
4.用法:
在本方法中使用,直接new一个就ok了
5.操作外部类:也是用 外部类.this.属性/方法
注意:局部内部类不能访问外部类方法的局部变量(但是常量可以)
匿名内部类:
1.由于没有类名,只能使用一次。在产生他的对象的时候同时去定义它。
2.也有独立的class文件:
文件名的规则:外部类名 +$+ 序号 (序号从1开始)
3.无类名,也无class关键字,也就没有任何的访问修饰符。
4.产生对象的语法和定义的语法是写在一起的,只能用一次,内部不可以
定义构造(无类名,无法定义构造)
5.属性和方法也不能是static的。操作的时候,只能new出来后,马上用点
操作符操作,可以操作到私有的。
6.在它内部操作外部的属性和方法和局部内部类一样。