zoukankan      html  css  js  c++  java
  • JAVA中初始化顺序复习

    static final、static、final区别

    static:静态,全局变量,类的对象共享一个静态变量,只初始化一次。

    final:常量,如果是方法则不可覆盖,如果是类不可被继承,必须初始化时设置值,设置后就不能改了

    static final:静态变量

    初始化顺序如下:

    父类静态变量(静态初始化话块)> 子类静态变量(静态初始化块)>父类普通变量(普通初始化块)>父类构造方法>父类普通方法

    >子类普通变量(普通初始化块)>子类构造方法>子类普通方法

    下面是一个例子就说明了这一切

    package com.loulijun.test1;

    public class Test1 {
    public static void main(String args[])
    {
    Son son = new Son();
    son.say();
    }
    }

    class Father
    {

    //static final 与 static 没有执行先后顺序,按照代码顺序从上而下执行
    //静态变量
    public static String str = initStr("Father:静态变量---1");
    //静态常量
    public static final int i = initfinal(2);
    //普通变量
    public int j = init(4);

    static int initfinal(int i)
    {
    System.out.println("Father:静态常量---"+i);
    return i;
    }
    static int init(int j)
    {
    System.out.println("Father:普通变量---"+j);
    return j;
    }
    //静态初始化块
    static
    {
    System.out.println("Father:静态初始化块---3");
    }
    static String initStr(String str)
    {
    System.out.println(str);
    return str;
    }

    //初始化块
    {
    System.out.println("Father:普通初始化块---5");
    }
    //构造方法
    public Father()
    {
    System.out.println("Father:父类构造器---6");
    }

    public void say()
    {
    System.out.println("Father:普通方法---7");
    }

    }

    class Son extends Father
    {
    //static final 与 static 没有执行先后顺序,按照代码顺序从上而下执行
    //静态变量
    public static String str = initStr("Son:静态变量---1");
    //静态常量
    public static final int i = initfinal(2);
    //普通变量
    public int j = init(4);
    static int initfinal(int i)
    {
    System.out.println("Son:静态常量---"+i);
    return i;
    }
    static int init(int i)
    {
    System.out.println("Son:普通变量---"+i);
    return i;
    }
    //静态初始化块
    static
    {
    System.out.println("Son:静态初始化块---3");
    }
    static String initStr(String str)
    {
    System.out.println(str);
    return str;
    }

    //初始化块
    {
    System.out.println("Son:普通初始化块---5");
    }
    //构造方法
    public Son()
    {
    System.out.println("Son:子类构造器6");
    }

    public void say()
    {
    System.out.println("Son:普通方法---7");
    }
    }

    运行结果:

    Father:静态变量---1
    Father:静态常量---2
    Father:静态初始化块---3
    Son:静态变量---1
    Son:静态常量---2
    Son:静态初始化块---3
    Father:普通变量---4
    Father:普通初始化块---5
    Father:父类构造器---6
    Son:普通变量---4
    Son:普通初始化块---5
    Son:子类构造器6
    Son:普通方法---7



  • 相关阅读:
    Springboot学习七 spring的一些注解
    Spring boot 学习六 spring 继承 mybatis (基于注解)
    Spring boot 学习 五:domain的定义
    Spring boot 学习 四:spring boot 配置文件 application.yml
    python学习(十九) 查看Python的安装路径
    docker 学习(九) docker部署静态网站
    maven学习9 关于maven一些參數
    docker 学习(八) docker file
    HTTP VS HTTPS
    【Python】【亲测好用】安装第三方包报错:AttributeError:'module' object has no attribute 'main'
  • 原文地址:https://www.cnblogs.com/loulijun/p/2348318.html
Copyright © 2011-2022 走看看