关于静态域,静态方法,构造函数的执行顺序探讨

本文深入探讨了Java中类的加载过程,包括基类和子类的静态域初始化、构造函数执行顺序以及静态方法调用机制。通过具体示例,解析了getClass()和getSuperclass()方法的使用,以及子类Dog如何继承自基类Animal,展示了类加载、静态域初始化、构造函数调用等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基类

public class Animal {
	//getClass()得到当前调用对象的类对象,Dog,getSuperClass()返回Animal类对象
    private String Tag = getClass().getSuperclass().getSimpleName();

    public int a;

    private static String staticTag = "Animal_STATIC";
    static {
        System.out.println(staticTag + "的静态域初始化");
    }

    public Animal() {
        System.out.println(Tag + "的无参构造函数" + a);
    }

}

子类:

public class Dog extends Animal {
	//getClass()得到当前调用对象的类对象,Dog
    private String Tag = getClass().getSimpleName();

    private int a = 2;

    private static String staticTag = "DOG_STATIC";
    static {
        System.out.println(staticTag + "的静态域初始化");
    }

    public Dog() {
        System.out.println(Tag + "的无参构造函数" + a);
    }

    public static void swimming() {
        System.out.println(staticTag + "调用静态方法swimming");
    }

}

运行:

public static void main(String[] args) {
        Dog.swimming();
        System.out.println("---实例化对象---");
        new Dog();
    }

输出:

Animal_STATIC的静态域初始化
DOG_STATIC的静态域初始化
DOG_STATIC的静态方法swimming
---实例化对象---
Animal的无参构造函数0
Dog的无参构造函数2

注意:Dog和Cat继承自Animal,在Animal中打印TAG = getClass().getSimpleName(),和this。
this指的是调用方,当前对象的引用,是Dog和Cat的实例。

在这里插入图片描述

总结:

  1. 调用Dog类的静态方法会进行Dog类的类加载,如果Dog类有父类,先进行父类的类加载。
  2. 类加载时会初始化类静态域,类加载只进行一次。
  3. 静态方法不能加载非静态域。
  4. 实例化对象,如果类没有加载过,也会进行类加载。然后开辟内存空间,分配内存对象,
  5. 类的成员变量会默认初始化,局部变量需要手动初始化。
  6. 构造器的执行也是,先执行父类的构造器,类似于静态方法,但只有创建对象,才执行构造方法。
  7. getClass()实际是调用this.getClass(),this指的是子类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值