Java刷题笔记3

T1 子类与父类实例化时的执行顺序

执行顺序:

父类静态代码块 ->子类静态代码块 ->父类非静态代码块 -> 父类构造函数 -> 子类非静态代码块 -> 子类构造函数。

案例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Father {
static{
System.out.println("父类静态代码块");
}
{
System.out.println("父类非静态代码块");
}
public Father(){
System.out.println("父类构造函数");
}
}
public class Son extends Father{
static{
System.out.println("子类静态代码块");
}
{
System.out.println("子类非静态代码块");
}
public Son(){
System.out.println("子类构造函数");
}
public static void main(String[] args) {
Son son = new Son();
}
}

结果为: 父类静态代码块
子类静态代码块
父类非静态代码块
父类构造函数
子类非静态代码块
子类构造函数

T2 内部类

image-20231008194910228

知识总结:
1.静态内部类才可以声明静态方法

2.静态方法不可以使用非静态变量

3.抽象方法不可以有函数体

T3 静态方法的调用

image-20231008195709851

在java中静态方法中不能使用非静态方法和非静态变量。但非静态方法中可以使用静态变量

在本题中,main方法显然是静态方法

T4 开发中使用泛型的作用

image-20231008203227076

泛型仅仅是java的语法糖,它不会影响java虚拟机生成的汇编代码,在编译阶段,虚拟机就会把泛型的类型擦除,还原成没有泛型的代码,顶多编译速度稍微慢一些,执行速度是完全没有什么区别的

T5 Java多态调用

image-20231008203334063

java多态有两种情况:重载覆写 在覆写中,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法; 在重载中,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法

T6 接口中成员变量的默认等价类型

image-20231008203801866

接口中的变量默认是public static final 的,方法默认是public abstract 的