谈谈变量初始化顺序、构造器执行顺序

今天看了李刚的文章,很有感触,抱着学习的心态记录一下自己的学习心得!我是一个刚刚进入java世界的初学者,如果写错了,请大家指正!

static修饰的变量  在文章中被称为 类变量,非static变量,称为实例变量,个人觉得非常贴切。

实例变量的初始化顺序

1、定义实例变量的初始值和非静态化块中对实例变量指定初始值。这两个的执行顺序与他们在源码中的位置有关系。

2、构造器中对实例变量指定初始值在上面两者后面进行初始化

类变量的初始化顺序

1、定义类变量的初始值和静态初始化块中对类变量指定初始值。这两个的执行顺序与他们在源码中的位置有关系。

如果有实例变量还有类变量

实例变量总是可以引用类变量,首先会对类变量进行初始化。

 

下面谈谈构造器

我照着文章敲了代码

下面是父类

package com.wisco.variable;

public class Creature {

 {
  System.out.println("Creature的非静态初始化块");
 }
 static {
  System.out.println("Creature的静态初始化块");
 }
 public Creature(){
  System.out.println("Creature的无参构造器");
 }
 public Creature(String name){
  this();//显示调用本类中另一个重载的构造器,必须放置在第一行
  System.out.println("Creature有参数的构造器,name的参数:"+name);
 }
}

 

下面的类继承上面的类

package com.wisco.variable;

public class Animal extends Creature{
 {
  System.out.println("Animal的非静态初始化块");
 }
 static {
  System.out.println("Animal的静态初始化块");
 }
 public Animal(String name) {
  super(name);//显式调用父类的构造器,也必须放在第一行
  System.out.println("Animal带参的构造器,参数name:"+name);
 }
 public Animal(String name,int age) {
  this(name);
  System.out.println("Animal带参的构造器,参数name:"+name+"另一个参数:"+age);
 }
}

子类:

package com.wisco.variable;

public class Wolf extends Animal{

 public Wolf() {
  super("灰太狼", 3);
  System.out.println("Wolf无参数的构造器");
  // TODO Auto-generated constructor stub
 }
 public Wolf(double weight){
  this();
  System.out.println("Wolf带参数的构造器,参数:"+weight);
 }

}

主程序

package com.wisco.variable;

public class Variable {

 /**
  * @Title: main
  * @Description: TODO(这里用一句话描述这个方法的作用)
  * @param
  * @return void    返回类型
  * @throws
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
                 new Wolf(7.89);
 }
}

输出结果:

Creature的静态初始化块
Animal的静态初始化块
Creature的非静态初始化块
Creature的无参构造器
Creature有参数的构造器,name的参数:灰太狼
Animal的非静态初始化块
Animal带参的构造器,参数name:灰太狼
Animal带参的构造器,参数name:灰太狼另一个参数:3
Wolf无参数的构造器
Wolf带参数的构造器,参数:7.89
————————————————————————

从结果我们可以看出,静态化的总在前面,非静态化的在后面。同时构造器永远是父类——子类这样的顺序。

如果没有显式调用父类构造器,会默认调用父类的无参数构造器

 

 

你可能感兴趣的:(变量初始化,构造器执行顺序)