静态代码块和构造代码块的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CronousGT/article/details/78390933
package gt;

/**
* Created by Cronous on 2017/10/29.
* 静态代码块和构造代码块的区别
*/
public class day01 {

public static void main(String[] args){
Person p1 = new Person("tom");
Person p2 = new Person("jerry");
p1.sayHello();
p2.sayHello();
}
}

class Person{
private String name;
static int i = 2;//静态变量
Person(){}
Person(String name){
this.name = name;
}
//静态代码块
static{
System.out.println("进来了!");
//这里我们可以对类1进行初始化操作,比如修改静态变量值
i = i + 1;
}
public void sayHello(){
System.out.println("name = " + name + " ,i = " + i);
}
}
控制台输出如下:

进来了!
name = tom ,i = 3
name = jerry ,i = 3

我们可以根据控制台的输出了解到,static代码块部分作用于类,它只是执行一次,用于类的初始化,这里我们使用了静态变量做了个例子,我们在初始化的时将

i 的值初始化为 3,之后所有创建的对象i的值都是一样的。

 

我们再看看构造代码块

package gt;

/**
* Created by Cronous on 2017/10/29.
* 静态代码块和构造代码块的区别
*/
public class day01 {

public static void main(String[] args){
Person p1 = new Person("tom");
Person p2 = new Person("jerry");
//p1.sayHello();
//p2.sayHello();
}
}

class Person{
private String name;
Person(){}
Person(String name){
this.name = name;
}
//构造代码块
{
cry();
}
public void cry(){
System.out.println("哇哇哇!!!" + name);
}
public void sayHello(){
System.out.println("name = " + name );
}
}
这里我们看到我们将p1.sayHello()和p2.sayHello()全部注释掉,发现控制台打印如下:
哇哇哇!!!null
哇哇哇!!!null

说明每个对象初始化都会先调用构造代码块中的内容,用于对象的初始化,并且通过 name = null 可以说明构造代码块内容是优先于构造函数执行的。

总结如下:

静态代码块作用于类,主要用于类的初始化操作,并且只执行一次;

构造代码块作用于对象,主要用于对象的初始化操作,只要有对象创建都会执行,并且优先级由于构造函数;

posted @ 2019-06-22 17:23  双间  阅读(1369)  评论(0编辑  收藏  举报