您的位置:首页 > 编程语言 > Java开发

Java中普通代码块,构造代码块,静态代码块区别及代码示例

2017-06-18 22:29 239 查看
执行顺序:(优先级从高到低) 静态变量>静态代码块>普通变量>mian方法>构造代码块>构造方法

静态方法是等到调用到才有执行

其中静态代码块只执行一次。构造代码块在每次创建对象是都会执行



1) 变量定义的先后顺序决定了初始化的顺序,变量会在任何方法(包括构造器)被调用之前得到初始化.这里的变量也指对象 比如说 Person p = new Person()这种

2)静态数据的初始化

当类中有静态对象与普通对象时,是静态对象先初始化才轮到普通对象.

静态代码块与main方法的执行顺序是静态代码块先执行.然后再执行main方法,而静态代码块与静态代码块的执行顺序呢,是按照在类中的位置来执行的.而静态方法跟静态代码块不一样.静态方法是要等调用才会执行.而静态代码块则是在类初始化的时候就执行了.

下面这个例子.第一个作用是可以看到两种对象的初始化顺序 第二个作用是解释什么是static,我们可以看到在StaticDataTest类中,由于在main方法外已经初始化了一个 static Cupboard cupboard = new Cupboard();这样的类,这样子的话,Cupboard类中的bow4跟bow5这两个静态对象就已经初始化了,在输出记录中可以看到.然后当我们在main方法中再初始化一次Cupboard类时,我们可以看到在输出记录中已经不会再初始bow4跟bow5了.即静态数据只有在第一次访问的时候才会被初始化,后面访问都不会再被初始化了

class Bow1{
Bow1(int n){
System.out.println("Bow("+n+")");
}
void f1(int n){
System.out.println("f1("+n+")");

}

}

class Table{
static Bow1 bow1 = new Bow1(1);
Table(){
System.out.println("Table()");
bow2.f1(1);
}
void f2(int n){
System.out.println("f2("+n+")");

}
static Bow1 bow2 = new Bow1(2);

}

class Cupboard{
Bow1 bow3 = new Bow1(3);
static Bow1 bow4= new Bow1(4);
Cupboard(){
System.out.println("Cupboard()");
bow4.f1(2);
}
void f3(int n){
System.out.println("f3("+n+")");

}
static Bow1 bow5 = new Bow1(5);

}

public class StaticDataTest {

 public static void main(String[] args){
System.out.println("creating new Cupboard() in main");
new Cupboard();
System.out.println("");
new Cupboard();
table.f2(1);
cupboard.f3(1);

 }

 static Table table = new Table();

 static Cupboard cupboard = new Cupboard();

}

/* 输出结果

Bow(1)

Bow(2)

Table()

f1(1)

Bow(4)

Bow(5)

Bow(3)

Cupboard()

f1(2)

creating new Cupboard() in main

Bow(3)

Cupboard()

f1(2)

Bow(3)

Cupboard()

f1(2)

f2(1)

f3(1)

 */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐