From 4b73b4cb5951914f6b3ebdbac301f5b22f2db16c Mon Sep 17 00:00:00 2001 From: dingjiawen <745518019@qq.com> Date: Tue, 20 Sep 2022 18:19:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E6=80=81=E3=80=81=E7=B1=BB=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E3=80=81=E5=AE=9E=E4=BE=8B=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E5=AD=A6=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java_learning/mutiType/InitTest.java | 120 ++++++++++++++++++ .../java_learning/mutiType/StaticTest.java | 46 +++++++ .../mutiType/clinitAndInitTest.java | 75 +++++++++++ 3 files changed, 241 insertions(+) create mode 100644 Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/InitTest.java create mode 100644 Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/StaticTest.java create mode 100644 Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/clinitAndInitTest.java diff --git a/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/InitTest.java b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/InitTest.java new file mode 100644 index 0000000..519a9c8 --- /dev/null +++ b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/InitTest.java @@ -0,0 +1,120 @@ +package com.markilue.java_learning.mutiType; + +import org.junit.Test; + +/** + * @BelongsProject: java_learning + * @BelongsPackage: com.markilue.java_learning.mutiType + * @Author: dingjiawen + * @CreateTime: 2022-09-20 17:35 + * @Description: + * TODO 测试实例初始化 + * 1)初始化顺序: + * (1)super()或super(实参列表) 这里选择哪个,看原来构造器首行是哪句,没写,默认就是super() + * (2)非静态实例变量的显示赋值语句 + * (3)非静态代码块 + * (4)对应构造器中的代码 + * 特别说明:其中(2)和(3)是按顺序合并的,(1)一定在最前面(4)一定在最后面 + * 2)执行特点: + * 1.创建对象时,才会执行, + * 2.调用哪个构造器,就是指定它对应的实例初始化方法 + * 3.创建子类对象时,父类对应的实例初始化会被先执行,执行父类哪个实例初始化方法,看用super()还是super(实参列表) + * 3)非静态代码块和构造器: + * 1.从某种程度上来看,非静态代码块是对构造器的补充,非静态代码块总是在构造器执行之前执行。 + * 与构造器不同的是,非静态代码块是一段固定执行的代码,它不能接收任何参数。 + * 因此非静态代码块对同一个类的所有对象所进行的初始化处理完全相同。 + * 基于这个原因,不难发现非静态代码块的基本用法:如果有一段初始化处理代码对所有对象完全相同,且无须接收任何参数,就可以把这段初始化处理代码提取到非静态代码块中。 + * 2.即如果每个构造器中有相同的初始化代码,且这些初始化代码无须接收参数,就可以把它们放在非静态代码块中定义。 + * 通过把多个构造器中相同代码提取到非静态代码块中定义,能更好地提高初始代码的复用,提高整个应用的可维护性。 + * @Version: 1.0 + */ +public class InitTest { + + + //测试子父类继承,方法有重写时,初始化顺序 + @Test + public void test(){ + + Son s1 = new Son(); + System.out.println("-----------------------------"); + Son s2 = new Son("atguigu"); + + /* + 运行结果: + Son:getNumber() //子类重写getNumber()方法,那么创建子类的对象,就是调用子类的getNumber()方法,因为当前对象this是子类的对象。 + Father(1) + Son:getNumber() + Father(2) + Father()无参构造 + Son:getNumber() + Son(1) + Son:getNumber() + Son(2) + Son():无参构造 + ----------------------------- + Son:getNumber() + Father(1) + Son:getNumber() + Father(2) + Father(info)有参构造 + Son:getNumber() + Son(1) + Son:getNumber() + Son(2) + Son(info):有参构造 + */ + + + + } + + private class Father{ + private int a = getNumber(); + private String info; + { + System.out.println("Father(1)"); + } + Father(){ + System.out.println("Father()无参构造"); + } + Father(String info){ + this.info = info; + System.out.println("Father(info)有参构造"); + } + private int b = getNumber(); + { + System.out.println("Father(2)"); + } + + public int getNumber(){ + System.out.println("Father:getNumber()"); + return 1; + } + } + private class Son extends Father { + private int a = getNumber(); + { + System.out.println("Son(1)"); + } + private int b = getNumber(); + { + System.out.println("Son(2)"); + } + public Son(){ + System.out.println("Son():无参构造"); + } + public Son(String info){ + super(info); + System.out.println("Son(info):有参构造"); + } + public int getNumber(){ + System.out.println("Son:getNumber()"); + return 1; + } + } + + + + +} + diff --git a/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/StaticTest.java b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/StaticTest.java new file mode 100644 index 0000000..7e799b0 --- /dev/null +++ b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/StaticTest.java @@ -0,0 +1,46 @@ +package com.markilue.java_learning.mutiType; + +import org.junit.Test; + +/** + * @BelongsProject: java_learning + * @BelongsPackage: com.markilue.java_learning.mutiType + * @Author: dingjiawen + * @CreateTime: 2022-09-20 16:50 + * @Description: TODO 测试多态的特性: + * 1)属性没有多态 + * 2)静态方法没有多态性 + * 1.静态方法不能被重写 + * 2.调用静态方法最好使用“类名.” + * @Version: 1.0 + */ +public class StaticTest { + + //测试静态方法没有多态性 + @Test + public void test() { + Father f = new Son(); + f.test();//只看编译时类型 =>father + } + + //测试属性没有多态性 + @Test + public void test1() { + Father f = new Son(); + System.out.println(f.x);//只看编译时类型 =>1 + } +} + +class Father { + int x=1; + public static void test() { + System.out.println("father"); + } +} + +class Son extends Father { + int x=2; + public static void test() { + System.out.println("son"); + } +} diff --git a/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/clinitAndInitTest.java b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/clinitAndInitTest.java new file mode 100644 index 0000000..f66b8f3 --- /dev/null +++ b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/mutiType/clinitAndInitTest.java @@ -0,0 +1,75 @@ +package com.markilue.java_learning.mutiType; + +import org.junit.Test; + +/** + * @BelongsProject: java_learning + * @BelongsPackage: com.markilue.java_learning.mutiType + * @Author: dingjiawen + * @CreateTime: 2022-09-20 17:43 + * @Description: + * TODO 测试类初始化和实例初始化: + * 1)类初始化肯定优先于实例初始化。 + * 2)类初始化只做一次。 + * 3)实例初始化是每次创建对象都要进行。 + * + * @Version: 1.0 + */ +public class clinitAndInitTest { + + public static void main(String[] args) { + Son s1 = new Son(); + System.out.println("----------------------------"); + Son s2 = new Son(); + + /* + 运行结果: + Father:static + Son:static + Father:not_static + Father()无参构造 + Son:not_static + Son()无参构造 + ---------------------------- + Father:not_static + Father()无参构造 + Son:not_static + Son()无参构造 + */ + + + } + + @Test + public void test(){ + + + + } + +// private class Father{ +// static{ +// System.out.println("Father:static"); +// } +// { +// System.out.println("Father:not_static"); +// } +// Father(){ +// System.out.println("Father()无参构造"); +// } +// } +// private class Son extends Father{ +// static{ +// System.out.println("Son:static"); +// } +// { +// System.out.println("Son:not_static"); +// } +// Son(){ +// System.out.println("Son()无参构造"); +// } +// } + + + +}