JAVA中初始化顺序复习

举报
ShaderJoy 发表于 2021/12/30 00:35:43 2021/12/30
【摘要】 static final、static、final区别 static:静态,全局变量,类的对象共享一个静态变量,只初始化一次。 final:常量,如果是方法则不可覆盖,如果是类不可被继承,必须初始化时设置值,设置后就不能改了 static final:静态常量 初始化顺序如下: 父类静态变量(静态初始化话块)&gt...

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


文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/9138511

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。