1 public class CodeBlockTest { 2 public static void main(String[] args) { 3 Child child = new Child(); 4 } 5 } 6 class Father { 7 public static String fatherStr1 = "fatherStr1(静态字段初始化值)"; 8 9 public String fatherStr2 = "fatherStr2(字段初始化值)"; 10 static { 11 System.out.println("父类静态代码块:" + fatherStr1); 12 fatherStr1 = "fatherStr1(静态代码块赋值)"; 13 } 14 { 15 System.out.println("父类构造代码块:" + fatherStr2); 16 fatherStr2 = "fatherStr2(构造代码块赋值)"; 17 } 18 public Father() { 19 System.out.println("父类构造函数块:" + fatherStr2); 20 fatherStr2 = "fatherStr2(构造函数赋值)"; 21 } 22 } 23 24 25 class Child extends Father { 26 public static String childStr1 = "childStr1(静态字段初始化值)"; 27 public String childStr2 = "childStr2(字段初始化值)"; 28 static { 29 System.out.println("子类静态代码块:" + childStr1); 30 childStr1 = "childStr1(静态代码块赋值)"; 31 } 32 { 33 System.out.println("子类构造代码块:" + childStr2); 34 childStr2 = "childStr2(构造代码块赋值)"; 35 } 36 public Child() { 37 System.out.println("子类构造函数:" + childStr2); 38 childStr2 = "childStr2(构造函数赋值)"; 39 } 40 } 41 // 输出结果: 42 // 父类静态代码块:fatherStr1(静态字段初始化值) 43 // 子类静态代码块:childStr1(静态字段初始化值) 44 // 父类构造代码块:fatherStr2(字段初始化值) 45 // 父类构造函数块:fatherStr2(构造代码块赋值) 46 // 子类构造代码块:childStr2(字段初始化值) 47 // 子类构造函数:childStr2(构造代码块赋值)
初始化顺序(最终结果):
父类静态字段初始化
父类静态代码块
子类静态字段初始化
子类静态代码块
父类普通字段初始化
父类构造代码块
父类构造函数
子类普通字段初始化
子类构造代码块
子类构造函数
重写和重载:
overrride
1.方法名、参数、返回值类型相同
2.访问权限:子类>=父类;抛出异常:子类<=父类(子类可以不抛出异常)
3.存在于父类和子类间
overload
1.参数列表(个数,类型,顺序)不同
2.可以有不同的访问权限、抛出异常、返回值类型
3.存在于一个类中
接口和抽象类:
implements
1.只能有抽象方法(方法申明)和变量(公共的静态的常量 public static final)
2.设计的结果,主要用于抽象功能
extends
1.可以有具体的方法(方法申明、方法实现)和属性(普通变量)
2.重构的结果,主要用于抽象类别
1.不间断空格\u00A0,主要用在office中,让一个单词在结尾处不会换行显示,快捷键ctrl+shift+space ;
2.半角空格(英文符号)\u0020,代码中常用的;
3.全角空格(中文符号)\u3000,中文文章中使用;
參考文章:
https://www.cnblogs.com/skywang12345/p/3324958.html
https://www.cnblogs.com/zsql/p/11115244.html