• java初探之初始化


    首先明确,变量初始化是在任何方法(包括构造器)被调用之前进行的。

    1、实例变量的初始化

      实例变量只有当它所属的类实例化后才会存在,构造器被执行就意味着对象就被创建。

    1.1、指定初始化。

    class Dog
    {
      Dog(){
        System.out.println("Constructor is coming!");
      }

      String a = "dog's name is Lily.";
      String b = "dog's attribute is big.";

    }

    1.2、构造器初始化。

    class Dog
    {

      String a;

      String b;
      Dog(){

        a = "dog's name is Lily.";
        b = "dog's attribute is big.";
        System.out.println("Constructor is coming!");
      }

    }

    显然,构造器初始化方法,能够保证初始值必为构造器中的设定值(构造器初始化后于指定初始化及实例代码块初始化);

    1.3、实例代码块初始化。

    class Dog
    {
      Dog(){
        System.out.println("Constructor is coming!");
      }

      String a;
      String b;
      {
        a = "dog's name is Lily.";
        b = "dog's attribute is big.";

        System.out.println(a);
        System.out.println(b);
      }

      Dog(int a){
        System.out.println("Constructor "+a+" is coming!");
      }

      public static void main(String args[]){
        Dog dog = new Dog();
      }
    }

    实例代码块初始化中,变量定义和赋值语句位置可以颠倒。按笔者水平看来,代码块初始化和指定初始化并无区别,都先于构造器之前被执行,并都是按定义的先后顺序来决定初始化的先后顺序。

    2.静态数据的初始化

    静态是相对于内存而言的,静态变量仅初始化一次,并且只有在必要时刻才会被初始化。

    指定初始化和静态块代码初始化与非静态变量类似,同样的执行优先级,这里不再细分。构造器初始化与非静态变量相同,不在赘述。

    class Dog
    {
      Dog(){
      System.out.println("Constructor is coming!");
    }

      String a1;
      String b1;
      {  
        a1 = "The dog is not static.";
        b1 = "The dog's name is Jack.";
        System.out.println(a1);
        System.out.println(b1);
      }

      static String b;
      static String a = "dsada";
      static {
        a = "dog's name is Lily.";
        b = "dog's attribute is big.";
        System.out.println(a);
        System.out.println(b);
      }


      Dog(int a){
        System.out.println("Constructor "+a+" is coming!");
      }

      public static void main(String args[]){
        Dog dog = new Dog(666);
      }
    }

    3.总结

    初始化顺序为,父类先于子类,静态数据先于非静态数据,构造器初始化总在最后。

  • 相关阅读:
    Nexus入门指南(图文)[转]
    java注解[转]
    JS设置IE可信站点及ActiveX设置
    ExtJS 4 树
    SQL大全
    基于Spring aop 和JAVA注解方式添加日志
    Excle自动增长序号
    VS 生成后事件
    Oracle命令分解之正则表达式搜索(一)
    Oracle命令分解之……SOUNDEX
  • 原文地址:https://www.cnblogs.com/qcxdoit/p/6400632.html
Copyright © 2020-2023  润新知