今天看了李刚的文章,颇有感触,抱着学习的心态记录一下本身的学习心得!我是一个刚刚进入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
————————————————————————
从结果咱们能够看出,静态化的总在前面,非静态化的在后面。同时构造器永远是父类——子类这样的顺序。
若是没有显式调用父类构造器,会默认调用父类的无参数构造器