zoukankan      html  css  js  c++  java
  • 静态代码块和构造代码块的区别

    版权声明:本文为博主原创文章,未经博主允许不得转载。 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 可以说明构造代码块内容是优先于构造函数执行的。

    总结如下:

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

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

  • 相关阅读:
    [BZOJ] 2054 疯狂的馒头
    day33(sql)
    day32(表单校验js和jquery表单校验)
    day31(正则表达式)
    day30(对象转json(java))
    day29(对象转xml(使用java))
    day28(ajax之js原生代码实现)
    day27(反射之内省机制实现BeanUtils)
    day27(反射之内省机制)
    day26(分页查询)
  • 原文地址:https://www.cnblogs.com/mark5/p/11069644.html
Copyright © 2011-2022 走看看