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

今天看了李刚的文章,颇有感触,抱着学习的心态记录一下本身的学习心得!我是一个刚刚进入java世界的初学者,若是写错了,请你们指正! java

static修饰的变量  在文章中被称为 类变量,非static变量,称为实例变量,我的以为很是贴切。 学习

实例变量的初始化顺序 this

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

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

类变量的初始化顺序 ip

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

若是有实例变量还有类变量 源码

实例变量老是能够引用类变量,首先会对类变量进行初始化。 it

 

下面谈谈构造器 io

我照着文章敲了代码

下面是父类

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
————————————————————————

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

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

相关文章
相关标签/搜索