父子类静态代码块,非静态代码块,有参,无参构造方法等的执行顺序问题

package com.suning.test;

class Person {
 String name;
 int age;
 {
  System.out.println("父类的非静态代码块");
 }
 static {
  System.out.println("父类的静态代码块");
 }

 Person() {
  System.out.println("父类的无参构造函数");
 }

 Person(String name, int age) {
  this.name = name;
  this.age = age;
  System.out.println("父类的有参数构造函数");
 }

 void eat() {
  System.out.println("父类吃饭");
 }

 }

class Student extends Person {
 int grade;
 {
  System.out.println("子类的非静态代码块");
 }
 static {
  System.out.println("子类的静态代码块");
 }

 Student() {
  // super();//运行子类的要先运行父类无参构造函数,此处省略默认执行父类无参构造函数
  System.out.println("子类的无参构造函数");
 }

 Student(String name, int age, int grade) {
  // super(name,age);//运行子类的有参构造函数要先运行父类的有参构造函数,若父类无有参的,则运行父类无参的构造函数
  this.grade = grade;
  System.out.println("子类的有参数构造函数:" + name + ":" + age + ":" + grade);
 }

 void eat() {
  System.out.println("子类吃饭");
 }

}

public class Test {
 public static void main(String[] args) {
  System.out.println("子类主方法");
  Student s1 = new Student();
  Student s2 = new Student();
  s1.eat();
  s2.eat();
 }

}

运行结果:

子类主方法
父类的静态代码块
子类的静态代码块
父类的非静态代码块
父类的无参构造函数
子类的非静态代码块
子类的无参构造函数
父类的非静态代码块
父类的无参构造函数
子类的非静态代码块
子类的有参数构造函数:张三:19:10001
子类吃饭
子类吃饭

总体来说:一个类里,静态代码块》非静态代码块》无参构造函数(或有参构造函数)

父子类,子类静态代码块在父类静态代码块后执行;

有的童鞋会问为毛 Student s2 = new Student()不执行父类的静态代码块,o my god,初始化静态代码块就执行一次好吗?就是你启web工程时候实例化执行一次,之后再new就不执行了,你们可以打断点试下;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值