JAVA基础--final、static区别以及类加载顺序?一、JAVA中final 与 static 总结??????????????????????????? f
JAVA基础--final、static区别以及类加载顺序
?
一、JAVA中final 与 static 总结
?
?
????????????????????????? final????????????????????????????????????????????? ?static
修饰类?????????????? ? 该类不可被继承????????????????????????????? 只能修饰内部类,该类不需要new,是静态加载(嵌套顶层类)
修饰接口??????????? ×????????????????????????????????????????????????????????????????????? ×
修饰构造函数????? ×?????????????????????????????????????????????????????????????????? ×
修饰语句块???????? ×???????????????????????????????????????????????????????????? 虚拟机按声明顺序初始化static成员字段和static语句块
修饰字段属性?????? 表示属性初始化后不能修改(实例常量)?????????????????????是类变量,所有实例共享该变量值(类变量)
?????????????????????? ?在定义时或构造函数中赋值(每个实例拥有一份拷贝)
修饰方法???????????? 该方法不能被覆盖(只可继承)??????????????????????????? 是类方法,所有实例共享该方法(类方法)
修饰函数参数??????? ?参数值不能被函数修改???????????????????????????????????? ×
修饰函数局部变量? 局部变量初始化后不能修改(局部常量)??????????????????? ?×
用途????????????????? 1).为了防止方法被覆盖或改写;????????????????????????????????????????????? 1).定义全局变量或常量;
?????????????????????? 2).提高运行效率,JAVA对final方法调用采用内嵌机制;???????????????????????????????? ?2).定义类方法;
?
?
?
二、JAVA类加载顺序
JAVA类加载顺序: 1).按代码顺序递归加载静态成员/代码块,先父类再本类;
? 2).按代码顺序递归加载非静态成员/代码块,先父类再本类;
? 3).按代码顺序递归调用构造函数,先父类再本类;
???
JAVA类加时机: 1).调用静态成员时,加载静态成员所在的类及父类;
? 2).第一次new对象时加载(第二次new不再加载)
? 3).加载子类会先加载父类.有static和final修饰的成员不会被加载;当成常量使用;