zoukankan      html  css  js  c++  java
  • java 编译时的初始化顺序

    有的时候,java的初始化会对我的工作照成很大影响,所以简单介绍一下,

    首先介绍简单的变量的初始化:在类的内部,变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于方法定义之间,它也会先于构造器和方法初始化。

    public class Test{
        public static void main(String[] args){
            Test2 test2 = new Test2();
            test2.f();
        }
    }
    class Test1{
        public Test1(int i){
            System.out.println("this is Test1"+i);
        }
    }
    class Test2{

        Test1 test1;
        Test1 test11 = new Test1(1);
        public Test2(){
            System.out.println("this is Test2");
            System.out.println("here is test1 "+test1);
            test1 = new Test1(1111);
            test13 = new Test1(33);
        }
        Test1 test12 = new Test1(2);
        public void f(){
            System.out.println("this is f()");
        }
        Test1 test13 = new Test1(3);
    }

    输出结果为:

    this is Test11
    this is Test12
    this is Test13
    this is Test2
    here is test1 null
    this is Test11111
    this is Test133
    this is f()

    由此可以看出初始化的顺序为:在类的内部,变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于方法定义之间,它也会先于构造器和方法初始化。

    即使在构造器或者定义的时候对变量进行了初始化但是这也没办法阻止系统对它进行的默认的初始化;

    如果有静态的变量,那么static的变量会优先进行初始化,然后再对普通变量初始化,static变量只初始化一次,当第一次用到这个类的时候进行初始化

  • 相关阅读:
    转义将正文中换行符
    THINKPHP短链接设置方法(路由设置)
    MEMCACHE分布式算法(PHP)
    win7下memCache安装过程
    JQUERY根据值将input控件选中!
    Thinkphp CURD中的where方法
    SQL语法LPAD和RPAD
    Linux查看docker容器日志
    Linux中清空docker容器日志
    错误记录——fail: Microsoft.AspNetCore.Server.Kestrel[13]
  • 原文地址:https://www.cnblogs.com/monkeydai/p/4171627.html
Copyright © 2011-2022 走看看