Java基础9(Javaoo4)—— 类的高级概念
1.访问修饰符:3个关键字,5种情况
本类 同包 非同包
子类 非子类 子类 非
子类
public: √ √ √ √
√
protected: √ √ √ √
默认(同包): √ √ √
private(本身): √
2.封装:
封装的好处(get/set方法操作属性):
①可以将某个属性变为只读或只写
②可以对外部赋给属性的值进行有效性控制
③可以隐藏内部属性的存放结构
3.static——静态(本章重点):
static修饰的效果
1.static修饰属性:
全类共享1个值
跟对象无关只跟类有关——类属性(采用类名.的方式访问)
单独存放在数据段的静态区,且只存了一个
类加载期就被产生
2.static修饰方法:
只能调用static属性和方法,非static方法可以调用static属性和方法
跟对象无关只跟类有关——类方法
类加载期,static的被优先加载,非static的还未被加载,这时static调用非
static,虚拟机 还不认识非static,无法调用,非static调用static,虚拟机
已经识别过static,所以能调用
static修饰属性和方法总结:1.与对象无关只跟类有关系 2.static修饰的方
法()和属性在类 加载期一定会有特殊动作!
static在内存的存放位置:数据段中的静态区 内存有:栈区,堆区,数
据段,代码区
3.static使用场景:
常量:public static final 常量名
变量:全类共享一个值且与对象无关
工具类的工具方法:全类共享一个方法且与对象无关(工具的使用不对对象产
生影响)
static不会操作与对象有关的属性和方法,因此static不能修饰构造方法
4.实例初始化块(不常用)
实例初始化块:
{代码块};
1.实例初始化块在产生对象的时候被自动调用
2.实例初始化块会在产生对象之后,但是在执行构造方法我们写的代码之前会
被自动调用(因 此不常用)
3.它的执行时机导致它并不常用,因此完全可以把代码写在构造放方法里面
5.静态初始化块(本章重点)
静态初始化块:
static{代码块};
1.不能操作非static的属性和方法
2.在类加载期被自动执行且只执行一次
3.使用场景:预加载资源的动作就实现在静态初始化块中(这在项目中很常见
)
6.内部类:在类的内部定义的类(前瞻性知识点)
1.分类:
成员内部类:和属性并列 有一个特例→静态内部类
局部内部类:在方法中 有一个特例→匿名内部类
2.成员内部类:
定义在外部类当中和外部类的属性、方法、构造,处于平行地位
3.静态内部类:
成员内部类的特例,用static修饰的成员内部类
4.局部内部类:
定义在外部类的某个方法中
5.匿名内部类:
局部内部类的特例,由于没有类名,所以只能用一次,在产生它对象的时候同
时定义它——语法很特殊
1.访问修饰符:3个关键字,5种情况
本类 同包 非同包
子类 非子类 子类 非
子类
public: √ √ √ √
√
protected: √ √ √ √
默认(同包): √ √ √
private(本身): √
2.封装:
封装的好处(get/set方法操作属性):
①可以将某个属性变为只读或只写
②可以对外部赋给属性的值进行有效性控制
③可以隐藏内部属性的存放结构
3.static——静态(本章重点):
static修饰的效果
1.static修饰属性:
全类共享1个值
跟对象无关只跟类有关——类属性(采用类名.的方式访问)
单独存放在数据段的静态区,且只存了一个
类加载期就被产生
2.static修饰方法:
只能调用static属性和方法,非static方法可以调用static属性和方法
跟对象无关只跟类有关——类方法
类加载期,static的被优先加载,非static的还未被加载,这时static调用非
static,虚拟机 还不认识非static,无法调用,非static调用static,虚拟机
已经识别过static,所以能调用
static修饰属性和方法总结:1.与对象无关只跟类有关系 2.static修饰的方
法()和属性在类 加载期一定会有特殊动作!
static在内存的存放位置:数据段中的静态区 内存有:栈区,堆区,数
据段,代码区
3.static使用场景:
常量:public static final 常量名
变量:全类共享一个值且与对象无关
工具类的工具方法:全类共享一个方法且与对象无关(工具的使用不对对象产
生影响)
static不会操作与对象有关的属性和方法,因此static不能修饰构造方法
4.实例初始化块(不常用)
实例初始化块:
{代码块};
1.实例初始化块在产生对象的时候被自动调用
2.实例初始化块会在产生对象之后,但是在执行构造方法我们写的代码之前会
被自动调用(因 此不常用)
3.它的执行时机导致它并不常用,因此完全可以把代码写在构造放方法里面
5.静态初始化块(本章重点)
静态初始化块:
static{代码块};
1.不能操作非static的属性和方法
2.在类加载期被自动执行且只执行一次
3.使用场景:预加载资源的动作就实现在静态初始化块中(这在项目中很常见
)
6.内部类:在类的内部定义的类(前瞻性知识点)
1.分类:
成员内部类:和属性并列 有一个特例→静态内部类
局部内部类:在方法中 有一个特例→匿名内部类
2.成员内部类:
定义在外部类当中和外部类的属性、方法、构造,处于平行地位
3.静态内部类:
成员内部类的特例,用static修饰的成员内部类
4.局部内部类:
定义在外部类的某个方法中
5.匿名内部类:
局部内部类的特例,由于没有类名,所以只能用一次,在产生它对象的时候同
时定义它——语法很特殊