今天,测试了一下java中成员变量、构造方法、代码块等的执行顺序,代码如下:
package com.carol.entity;
/**
* @author Carol Tang
* @version 1.0.0
* @date 2018-09-13 10:37
* @description 测试java中各代码的执行顺序
**/
class G_Member{
G_Member(){
System.out.println("[初始化G_Member实例成员变量]");
}
}
class G_StaticMember{
G_StaticMember(){
System.out.println("[初始化G_StaticMember静态成员变量]");
}
}
class F_Member{
F_Member(){
System.out.println("[初始化F_Member实例成员变量]");
}
}
class F_StaticMember{
F_StaticMember(){
System.out.println("[初始化F_StaticMember静态成员变量]");
}
}
class Grantfather {
//静态成员变量g_staticMember
static G_StaticMember g_staticMember = new G_StaticMember();
//实例成员变量g_member
G_Member g_member = new G_Member();
//静态成员变量name
public static String name = "grantfather";
//实例成员变量age
public int age = 18;
static {
System.out.println("Grantfather类,static静态代码块");
}
{
System.out.println("Grantfather类,构造代码块");
}
Grantfather() {
System.out.println("Grantfather类,无参构造方法,name = "+ name);
}
Grantfather(String name){
this.name = name; //如果没有将传入的参数赋值给本类的name,则默认输出是传入的参数值,而非本类静态name值
System.out.println("Grantfather类,有参构造方法,name = "+name);
}
Grantfather(int age){
System.out.println("Grantfather类,有参构造方法,age = "+age);//默认输出是传入的参数值,而非本类age
}
}
class Father extends Grantfather{
public String name = "father";
//静态成员变量 f_staticMember
static F_StaticMember f_staticMember = new F_StaticMember();
//实例成员变量f_member
F_Member f_member = new F_Member();
static {
System.out.println("Father类,static静态代码块");
}
{
System.out.println("Father类,构造代码块");
}
Father(){
// super();
// super.name = "txx";
super("txx");
//super(20);
System.out.println("Father类,无参构造方法,name = "+name);
}
Father(int age){
super();
super.age = age;//此处将修改Gran