zoukankan      html  css  js  c++  java
  • 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.总结

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

  • 相关阅读:
    试试SQLServer 2014的内存优化表
    备份数据库的时候设置 BufferCount 选项不正确导致 out of memory 的情况
    SQLSERVER复制优化之一《改变包大小》
    Tomcat配置域名和虚拟文件夹
    BZOJ 1798 [Ahoi2009]Seq 维护序列seq 线段树
    125 Valid Palindrome
    jquery.lazyload.js实现图片懒载入
    hdu 2176 取石子游戏
    算法练习--十进制 二进制互转
    JavaScript学习10:动态载入脚本和样式
  • 原文地址:https://www.cnblogs.com/qcxdoit/p/6400632.html
Copyright © 2011-2022 走看看