(4)静态代码块
执行顺序:父类的静态(属性、代码块、方法(加载))–子类的静态–父类的对象(构造方法、构造代码块、属性(在构造代码块前面就先执行))----子类对象
结果:
面试题:
分析:
四、final(最终)
final—关键字------修饰符: 数据、方法、类
(1) 、数据(修饰)
- final修饰的是基本数据类型的数据,就是最终值不能发生改变 (final修饰的数据的变量可以先声明在去赋值(只能做一次赋值));
- final修饰引用数据类型的时候,修饰的是地址值,地址值是最终值;数组长度也是最终值
- final修饰属性,属性值在创建对象之前就要进行初始化(构造方法和构造代码块任选其一,只赋值一次)
- static和final共同修饰属性(最终静态),要在类加载完成之前就要初始化(静态代码块只赋值一次)
基本数据类型:
引用类型:
修饰属性:
(2)、方法(final修饰方法)
重载和重写?----可以重载, 可以继承—但是不能重写
(3)、类(final修饰类)
final修饰的类不能被继承-------但是可以继承别的类
五、abstract(抽象)
如果一个父类中的方法被所有的子类进行了不同程度的重写,此时父类中的这个方法的方法体就没有具体意义,就可以把方法体去掉加上abstract关键字变成了抽象方法,如果一个类中有了抽象方法,此时这个类就要变成抽象类(abstract可以修饰方法、类)–====如果父类是抽象类,子类要重写所有的抽象方法,除非子类变成抽象类就可以不用重写父类的抽象方法。
如果一个类是抽象类,那么一定有抽象方法? 不一定
抽象类能创建对象吗? 不能创建对象------底层会对抽象类进行通过构造方法创建对象,其他语言来构建的对象,java本身是拿不到这个对象的,所以对外就是创建不了对象。
抽象类里能定义属性和实体方法? 可以
抽象方法可以被private/static/final修饰吗? 不可以,因为抽象方法一定要被重写
默认访问权限修饰符修饰抽象方法?只能在同包子类中去实现重写
抽象类能被final修饰吗?不可以,抽象类需要继承
六、interface(接口)
如果一个抽象类中所有的方法都是抽象方法—接口 通过关键字implements来表示类与接口之间的关系-----实现 类支持多实现、接口支持多继承
接口中一定有抽象方法?(jdk1.7及其以前是一定的,jdk1.8及其以后就是不一定)
单继承(实现)还是多继承(实现)哪个好?看场景
接口中可以定义属性和方法?
属性默认被public、 static、 final共同修饰
抽象方法被:public、abstract共同修饰
接口的作用----模板
Jdk1.8的新特性:
允许接口中定义实体方法,前提是加上default或者static
Lambda表达式—去重写接口中抽象方法-----如果重写的方法体只有一句就可以省略return和{}----如果抽象方法已经有了明确的参数的数据类型就可以省略,如果只有一个参数参与运算而且方法体也只针对这个参数操作就可以写成::传递方法。
如果一个接口中只有一个抽象方法就会变成函数式接口
格式:Lambda表达式----(参数列表)-{重写抽象方法的方法体}
接口不能创建对象没有构造方法
例子1:
例子2:
七、内部类
包括:方法内部类、成员内部类、静态内部类、匿名内部类
(1) 方法内部类:
在方法里定义类-----只可以定义非静态属性和方法、可以调用外部类所有的方法和属性、可以拿到方法的常量、可以静态常量、可以继承、创建对象只能在方法中(不能用访问权限修饰符修饰)