java 成员初始化

public class Test {
	private static int i;
	private int k;

	//静态代码块,主要用于初始化类的静态成员变量
	//在静态代码块中不能使用非静态的成员变量或方法
	static {
		System.out.println("赋值前:i--------->"+i);
		i = 1;
		System.out.println("赋值后:i--------->"+i);
	}

	//代码块
	{
		System.out.println("赋值前:k--------->"+k);
		k = 1;
		System.out.println("赋值后:i--------->"+k);
	}

	public Test(){
	        super();
		System.out.println("---进入构造器---");
		System.out.println("i------>"+i);
		System.out.println("k------>"+k);
	}

	public static void main(String[] args) {
		System.out.println("---进入main方法---");
		new Test();
		System.out.println("completed!!!");
	}

}

// 运行结果

//赋值前:i--------->0
//赋值后:i--------->1
//---进入main方法---
//赋值前:k--------->0
//赋值后:i--------->1
//---进入构造器---
//i------>1
//k------>1
//completed!!!

从运行结果我们可以看出Java初始化成员变量是:先静态 然后 非静态

大致的流程如下:

初始化静态成员变量 -> 初始化静态代码块 (静态变量或静态代码块,只在第一次调用该类时执行初始化) -> 初始化一般成员变量 -> 初始化代码块 -> 进入构造方法 -> 首先执行super()(可以选择不同的父类构造方法,默认为无参),初始化父类的成员变量 -> 执行构造方法中的初始化

时间: 2024-11-07 03:43:08

java 成员初始化的相关文章

Java 成员初始化顺序

package com.cwcec.test; class Fu { int num = 5; //构造代码块 { System.out.println("Fu constructor code..." + num); num=6; } public Fu() { System.out.println("Fu constructor ..." + num); show(); } void show() { System.out.println("show

Java 类中成员初始化顺序

Java 中的类成员 基本分为 静态成员, 实例变量  方法中特别的是静态方法和构造方法. 1.定义一个类 public class ClassLoaderTest { public int a ; public String b; private static int c; public  ClassLoaderTest(){ System.out.println("执行前:"+ a + "  "+ b); a = 10; b = "lisi"

java类中各成员初始化的顺序

了解java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识.不说太多,直接看下面的例子 class Father { static{ System. out.println("父类静态代码块初始化" ); } { System. out.println("父类代码块初始化" ); } private static String s=print(); public static String print() { System. out.println

Java构造时成员初始化的陷阱

1.首先列出代码 Base.java public class Base { Base() { preProcess(); } void preProcess() {} } Derived.java public class Derived extends Base { public String whenAmISet = "set when declared"; @Override void preProcess() { whenAmISet = "set in prePr

java 成员变量 静态成员变量 方法 静态方法初始化顺序

Java构造方法.成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的? [Java笔试真题]:构造方法.成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的? [解答]:当类第一次被加载的时候,静态变量会首先初始化,接着编译器会把实例变量初始化为默认值,然后执行构造方法. Java程序的初始化一般遵循以下三个原则(以下三原则优先级依次递减): ① 静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次: ② 父类

java中类成员初始化顺序

java中初始化类成员方法包括: 1.显示域初始化,比如public int a=1;public static int b=1: 2.初始化块,分为普通初始化块,静态初始化块: 3.构造函数. 初始化的时候,首先是静态类的初始化方式执行,然后才是普通初始方式执行, 并且初始化块总是先于构造函数执行,显式域初始化与初始化块的执行顺序按照代码中出现的顺序执行. 显式静态域初始化先于静态初始化块 public class Hello{ public static int staticA=1; pub

Java类成员初始化顺序

类中包含7中成员:1.静态变量 static2.final静态常量 final static3.静态代码块 static{}  //多个代码块顺序执行 4.普通变量5.普通代码块 {}  //多个代码块顺序执行 6.构造方法 7.普通方法 类中成员初始化方式(排出7): 非继承类中:    首先执行1/2/3,执行顺序为顺序执行(谁在前先执行谁).    之后执行4/5,执行顺序为顺序执行(谁在前先执行谁).    然后执行6(默认执行无参构造方法).    继承类中:    首先执行父类1/2

Java字段初始化规律:

Java进行初始化的地方有两个,初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块(以上程序为实例初始化块).静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句. 执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”. 当有两个构造函数时依据参数个数进行引用

Java 对象初始化顺序 执行顺序

先看一道Java面试题: 求这段程序的输出. 解答此题关键在于理解和掌握类的加载过程以及子类继承父类后,重写方法的调用问题: 从程序的执行顺序去解答: 1.编译:当这个类被编译通知后,会在相应的目录下生成两个.class 文件.一个是 Base.class,另外一个就是Base$Sub.class.这个时候类加载器将这两个.class  文件加载到内存 2.Base base= new Sub(): 声明父类变量base对子类的引用,JAVA类加载器将Base,Sub类加载到JVM(Java虚拟