Java类中相关元素(变量、代码块、构造方法)的执行顺序

本文详细解释了Java中对象初次创建和非初次创建时,父类和子类静态变量、静态代码块、实例变量和构造方法的执行顺序。通过实例代码演示了Student和Dog-Student类的设计以及如何在Test类中调用相关方法。
摘要由CSDN通过智能技术生成

一、理论

(一)初次创建对象时

父类静态变量(静态属性)--->父类静态代码块--->子类静态变量--->子类静态代码块--->父类实例变量(实例属性)--->父类动态代码块--->父类构造方法--->子类实例变量--->子类动态代码块--->子类构造方法

(二)非初次创建对象时

父类实例变量(实例属性)--->父类动态代码块--->父类构造方法--->子类实例变量--->子类动态代码块--->子类构造方法

二、演示代码设计

(一)概要设计

1.设计一个Student类,里边包含静态属性、静态方法、实例变量、实例方法和构造方法。

2.设计一个Dog-Student类继承Student类,里边同样包含静态属性、静态方法、实例变量、实例方法和构造方法。

3.设计一个Test类,用于创建Dog_Student类的对象,进行相关验证。

(二)详细设计

略(参考代码)

三、代码

(一)Student

public class Student{
    static String school = "Animals' Union University"; // static property(静态属性)
    static int school_history = 500000; //static property
    int age = 1; //property(实例属性)

    {
        System.out.println("Student类动态代码块"); //动态代码块
    }

    static{
        System.out.println("Student类静态代码块1"); //静态代码块
    }

    public Student() {
        System.out.println("Student born!!!"); //构造方法
    }

    public static void method1() {
        System.out.println("Student类静态方法method1"); //静态方法
    }

    public void method2(){
        System.out.println("Student类动态方法method2"); //实例方法
    }

    public void setAge(){ //实例方法
        age += 1;
        System.out.println("学生长大一岁");
    }

    public static void setSchool_history(){ //静态方法
        school_history += 1;
        System.out.println("庆祝动物联合大学又长一岁");
    }

    static{
        System.out.println("Student类静态代码块2"); //静态代码块
    }

}

(二)Dog-Student

public class Dog_Student extends Student{
    static int dog_stu_count = 0;
    int eat_fish_nums = 0;

    static {
        System.out.println("Dog Student 的静态代码块");
    }

    {
        System.out.println("Dog Student 的动态代码块");

    }

    public Dog_Student() {
        System.out.println("Welcome to Animals' Union University.You are a one-year-old dog student.");
        dog_stu_count += 1;
        System.out.println("Dog student's number is:" + dog_stu_count);
    }

    public static void ruler(){
        System.out.println("Dog student will learn from cat. Because with this method, it can avoid human exploitation.");
    }

    public void learn_shout(){
        System.out.println("miao miao miao");
    }

    public void eat_fish(){
        System.out.println("Dog student eat fish. Because it is learning from cat now.");
    }
}

(三)Test

public class Test {
    public static void main(String[] args) {
        Dog_Student dog_student = new Dog_Student(); // 创建第一个对象 Create first Dog Student
        dog_student.method1(); //调用父类的静态方法(虽然用对象可以调用静态方法,但用类更合乎规范)
        dog_student.method2(); //调用父类的实例方法
        dog_student.ruler();
        dog_student.learn_shout();
        dog_student.eat_fish();

        Dog_Student dog2 = new Dog_Student(); //创建第二个对象
        Dog_Student dog3 = new Dog_Student(); //创建第三个对象

    }
}

四、代码使用方法

在语句[Dog_Student dog_student = new Dog_Student(); ]前设置断点,debug方式执行代码。

通过force step into按钮进入方法中,可以观察代码执行流程。

(备注:各位码友关注Java语法即可,演示代码中的具体内容不用当真)

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值