代码块执行顺序

/*
   代码块:
     局部代码块:  放在方法中的代码块{}
     构造代码块:  类中方法外的代码块{}
 -----------在构造方法前执行构造代码块
     静态代码块:类中方法外的代码块static{}
 -----------静态代码块走一次,在类加载到内存后就执行
 */
public class Test1 {

    public static void main(String[] args) {
        //局部代码块,放在方法中的代码块
        {
            int a = 1 ;
        }


        //============================================
        Person p1 = new Person();
        Person p2 = new Person();
        Person p3 = new Person("aa");

        /*
        ----输出
        Person类的静态代码块
        Person类的构造代码块
        Person无参构造方法
        Person类的构造代码块
        Person无参构造方法
        Person类的构造代码块
        Person有参构造方法
        */

    }

}
class Person{

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

    //构造代码块,放在方法之外
    //构造代码块(见以下反编译代码)
    //构造代码块的本质,复杂到每个构造方法第一行,在super下面
    {
        System.out.println("Person类的构造代码块");
    }

    public Person(){
        System.out.println("Person无参构造方法");
    }

    public Person(String name){
        System.out.println("Person有参构造方法");
    }
}

反编译Person.class

package com.itheima.demo09975960014EE378015757548C678490204EE378015757;

import java.io.PrintStream;

class Person
{

    public Person()
    {
        System.out.println("我是 Person类的构造代码块");
        System.out.println("Person 无参构造");
    }

    public Person(String str)
    {
        System.out.println("我是 Person类的构造代码块");
        System.out.println("Person 有参构造");
    }

    static 
    {
        System.out.println("我是Person类的静态代码块");
    }
}

继承下代码块的执行顺序

public class Test1 {

    public static void main(String[] args) {    
        Student s1 = new Student();
        Student s2 = new Student();

        /*
         输出:
         Person类的静态代码块
         Student类的静态代码块
         Person类的构造代码块
         Person无参构造方法
         Student类的构造代码块
         Student无参构造方法
         Person类的构造代码块
         Person无参构造方法
         Student类的构造代码块
         Student无参构造方法
         */
    }

}

class Person {

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

    // 构造代码块,放在方法之外
    {
        System.out.println("Person类的构造代码块");
    }

    public Person() {
        System.out.println("Person无参构造方法");
    }

    public Person(String name) {
        System.out.println("Person有参构造方法");
    }
}

class Student extends Person {
    // 构造代码块,放在方法之外
    {
        System.out.println("Student类的构造代码块");
    }

    public Student() {
        System.out.println("Student无参构造方法");
    }

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

}

构造代码块默认放在构造方法下,super下一行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值