• Java类的初始化顺序


     刚刚开始学习Java的时候就很想写这么一片文章,到今天没什么事,回顾一下以前学习的,弄出来当作记忆,废话不多说,程序猿应该直接上代码。。。

    1.类无继承时的初始化顺序

     1 package com.cn.qiao.other.test;
     2 
     3 
     4 /**
     5  * @author yang_qiao
     6  * 类无继承时的初始化顺序
     7  * 静态变量、静态块、
     8  * 变量、普通块、
     9  * 构造器
    10  *
    11  */
    12 public class ClassInitalOrderTest {
    13     
    14     //静态变量
    15     public static String staticVar = "static variable";
    16     //普通变量
    17     private String normalVar = "normal variable";
    18     
    19     /**
    20      * 在静态块中不能打印显示普通变量,
    21      * 此时普通变量未被初始化,
    22      * 如过打印显示直接提示错误
    23      */
    24     static{
    25         System.out.println("Static block init");
    26         System.out.println(staticVar);
    27         //System.out.println(normalVar);
    28     }
    29     /**
    30      * 静态块
    31      */
    32     {
    33         System.out.println("Normal block init");
    34         System.out.println(normalVar);
    35     }
    36     
    37     /**
    38      * 构造函数
    39      */
    40     public ClassInitalOrderTest(){
    41         System.out.println("Constructor init");
    42         System.out.println(staticVar);
    43         System.out.println(normalVar);
    44     }
    45 
    46     /**
    47      * @param args
    48      */
    49     @SuppressWarnings("unused")
    50     public static void main(String[] args) {
    51         //测试
    52         ClassInitalOrderTest ciot = new ClassInitalOrderTest();
    53 
    54     }
    55 
    56 }

    2.有继承时子类的初始化顺序

     1 package com.cn.qiao.other.test;
     2 
     3 public class SuperClass {
     4     //父类静态变量
     5     public static String superStaticVar = "Super static variable";
     6     //父类普通变量
     7     private String superNormalVar = "Super normal variable";
     8     /**
     9      * 父类静态块
    10      */
    11     static{
    12         System.out.println("Super static block init");
    13         System.out.println(superStaticVar);
    14         System.out.println("Super static block init over");
    15     }
    16     /**
    17      * 父类普通块
    18      */
    19     {
    20         System.out.println("Super normal block init");
    21         System.out.println(superNormalVar);
    22         System.out.println("Super normal block init over");
    23     }
    24     
    25     /**
    26      * 构造函数
    27      */
    28     public SuperClass(){
    29         System.out.println("Super constructor init");
    30         System.out.println(superStaticVar);
    31         System.out.println(superNormalVar);
    32         System.out.println("Super constructor init over");
    33     }
    34 
    35 
    36 }
     1 package com.cn.qiao.other.test;
     2 
     3 public class SubClass extends SuperClass {
     4     
     5     //子类静态变量
     6     public static String subStaticVar = "Sub static variable";
     7     //子类普通变量
     8     private String subNormalVar = "Sub normal variable";
     9     
    10     /**
    11      * 子类静态块
    12      */
    13     static{
    14         System.out.println("Sub Class static block init");
    15         System.out.println(subStaticVar);
    16         System.out.println("Sub Class static block init over");
    17     }
    18     /**
    19      * 子类普通块
    20      */
    21     {
    22         System.out.println("Sub class normal block init");
    23         System.out.println(subNormalVar);
    24         System.out.println("Sub class normal block init over");
    25     }
    26     
    27     /**
    28      * 子类构造函数
    29      */
    30     public SubClass(){
    31         System.out.println("Sub class constructor init");
    32         System.out.println(subStaticVar);
    33         System.out.println(subNormalVar);
    34         System.out.println("Sub class constructor init over");
    35     }
    36 
    37     /**
    38      * @param args
    39      */
    40     @SuppressWarnings("unused")
    41     public static void main(String[] args) {
    42         //测试
    43         /**
    44          * 有继承时类的初始化顺序
    45          * 父类-静态变量
    46          * 父类-静态块
    47          * 子类-静态变量
    48          * 子类-静态块
    49          * 父类-普通变量
    50          * 父类-普通块
    51          * 父类-构造函数
    52          * 子类-普通变量
    53          * 子类-普通块
    54          * 子类-构造函数
    55          */
    56         SubClass sc = new SubClass();
    57 
    58     }
    59 
    60 }
  • 相关阅读:
    【Oracle】修改oracle数据库的字符集
    【OS_Linux】Centos7 设置定时任务
    【 DB_Oracle】Oracle多表关联更新
    Java后端技术路线
    【 OS_Linux】centos下查找jdk的安装路径
    【实用工具】Notepad++的主题和字体设置
    【OS_Linux】Linux删除指定日期之前的文件
    【OS_Windows】windows下删除指定日期前的文件
    C#计算一段程序运行时间的三种方法
    Win10 新功能 改变显示器色彩
  • 原文地址:https://www.cnblogs.com/binger/p/2714916.html
Copyright © 2020-2023  润新知