类的执行先后顺序

Posted cjq.java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的执行先后顺序相关的知识,希望对你有一定的参考价值。

 class A {

    static {
        System.out.print("1");
    }

    public A() {
        System.out.print("2");
    }
}

class B extends A{

    static {
        System.out.print("a");
    }

    public B() {
        System.out.print("b");
    }
}

public class Hello {

    public static void main(String[] args) {
        A ab = new B();
        ab = new B();
    }

 
答:执行结果:1a2b2b。创建对象时构造器的调用顺序是:先初始化静态成员,然后调用父类构造器,再初始化非静态成员,最后调用自身构造器。  
第一次调用函数,static变量,初始化。
第二次,及以后,调用函数,static变量,不会初始化。
 
一般情况下,需要用到某个类的时候,都必须先实例化这个类,才能对其进行调用。
static修饰的类成为静态类,静态类中只能包含静态成员(被static修饰的字段、属性、方法),不能被实例化,不能被继承;非静态中可以包含静态成员。  
 
说明:ClassA类为非静态类,但其中的方法Fun()为静态方法,所以在ClassB中调用时不实例化ClassA类(而且不能实例化),直接调用其成员,语法为“类名.成员”。
 
说明:ClassA类为非静态类,但其中的方法Fun()为静态方法,所以在ClassB中调用时不实例化ClassA类(而且不能实例化),直接调用其成员,语法为“类名.成员”。
 

 3、static修饰符(拓展):

       (1) 用来修饰类或类的成员,这时不需要创建实例就能访问(而且不能实例化),在被调用的时候自动实例化,且在内存中产生一个实例。当含有静态成员的非静态类实例化出对象后,这些对象公用这些静态成员,通过类名或对象名都能访问它们。

以上是关于类的执行先后顺序的主要内容,如果未能解决你的问题,请参考以下文章

Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺

MFC类的执行顺序

java中创建对象了,显示初始化值和构造函数初始化对象的区别?先后执行顺序是啥?

java运行顺序-JVM之九

@Value 和 @Bean 的执行顺序问题

派生类的构造函数与析构函数的调用顺序