java初始化得顺序

2014-11-24 08:36:57 · 作者: · 浏览: 0
1.。。。如果mian函数所在的类包含静态的代码块和静态的变量,则按静态代码块和变量的先后的顺序执行静态代码块和初始静态的变量,接着在执行普通的变量or普通的代码块or方法,最后在再执行static main方法。
2.。。。。在static main 方法里面,是按顺序执行里面的代码的,在里面初始化main所在类的对象的时候,先按普通代码块和变量的初始顺序先执行,
在执行构照函数
注意:在这里要注意的是,只在产生一个对象的时候,才执行里面的普通变量和普通代码块
public class Testmain {
/**
* @param args
*
*/
public Testmain(){
System.out.println("This is a construct!!!");
}
{
System.out.println("1111111111111111111");
}
static {
System.out.println("hello world!!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
{
System.out.println("I am before main!!");
}
//new Fruit();
//ew Fruit();
new Testmain();
{
System.out.println("I am behinde main!!");
}
}
static {
System.out.println("are you ok ");
}
{
System.out.println("122222222222");
}
}
运行的结果是:
hello world!!
are you ok
I am before main!!
1111111111111111111
122222222222
This is a construct!!!
I am behinde main!!
3.。。。当我们要创建一个类的对象的时候,初始的顺序是。。这个类里面的静态变量or静态代码块or静态方法,他们是按代码的先后顺序依次初始的
然后再依次执行普通的变量or普通的代码块or普通的方法,他们也是按在代码里面的先后顺序执行的,我这里所说的执行是,一个类里面的内容的加载的先后顺序,并不一定执行了里面的东西,因为有的加载了,并没有显示的执行,我们并不能显示的看到他们的顺序,但这是他们里面的一种机制,测试出来的。
最后在执行里面的构造方法,接着才使用对象调用里面的方法和属性
4,。。。我们要注意的是,静态代码块和静态的变量只初始化一次,不管有多少个对象,只在创建第一个对象时,按顺序执行静态的东西一次。。。。。。
class Fruit{
private static int c=99;
{
System.out.println(c);
}
static{
System.out.println("I is a static code ----2-----****");
}
{
System.out.println("This is code of fruit!!--4");
}
int b=88;
{
System.out.println("This is code of fruit!!--3");
System.out.println(b);
}
private int a;
{
System.out.println("This is code of fruit!!--1");
System.out.println(a);
}
public Fruit(){
System.out.println("it is a Fruit!!");
a=3;
}
{
System.out.println("This is code of fruit!!--2");
System.out.println(a);
}
static{
System.out.println("I is a static code ----1-----****");
}
}
class Apple extends Fruit{
int b;
public Apple(){
System.out.println("i is apple ,i is a fruit also!!");
}
}
public class Testmain {
/**
* @param args
*
*/
public Testmain(){
System.out.println("This is a construct!!!");
}
{
System.out.println("1111111111111111111");
}
static {
System.out.println("hello world!!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
{
System.out.println("I am before main!!");
}
//new Fruit();
//ew Fruit();
new Testmain();
{
System.out.println("I am behinde main!!");
}
}
static {
System.out.println("are you ok ");
}
{
System.out.println("122222222222");
}
}
在这里main函数所在的类,和main不再的类,初始有点点不同,