【知识总结】Java类初始化顺序说明,java高级面试笔试题


我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
扫描二维码或搜索下图红色VX号,加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。




 

微信公众号:努力编程的小猪
如有问题或建议,请公众号留言



 

Java类初始化顺序说明

一个类中包含如下几类东西,他们前后是有顺序关系的




  1.  
  2. 静态属性:static 开头定义的属性


     
  3. 静态方法块: static {} 圈起来的方法块


     
  4. 普通属性: 未带static定义的属性


     
  5. 普通方法块: {} 圈起来的方法块


     
  6. 构造函数: 类名相同的方法


     
  7. 方法: 普通方法


     

初始化顺序

public class LifeCycle {
    // 静态属性
    private static String staticField = getStaticField();
    // 静态方法块
    static {
        System.out.println(staticField);
        System.out.println("静态方法块初始化");
        System.out.println("Static Patch Initial");
    }
    // 普通属性
    private String field = getField();
    // 普通方法块
    {
        System.out.println(field);
        System.out.println("普通方法块初始化");
        System.out.println("Field Patch Initial");
    }
    // 构造函数
    public LifeCycle() {
        System.out.println("构造函数初始化");
        System.out.println("Structure Initial ");
    }

    public static String getStaticField() {
        String statiFiled = "Static Field Initial";
        System.out.println("静态属性初始化");
        return statiFiled;
    }

    public static String getField() {
        String filed = "Field Initial";
        System.out.println("普通属性初始化");
        return filed;
    }   
    // 主函数
    public static void main(String[] argc) {
        new LifeCycle();
    }
}

执行结果:

静态属性初始化
Static Field Initial
静态方法块初始化
Static Patch Initial
普通属性初始化
Field Initial
普通方法块初始化
Field Patch Initial
构造函数初始化
Structure Initial 

总结:包含父子类和接口类

普通类:




  •  
  • 静态变量


     
  • 静态代码块


     
  • 普通变量


     
  • 普通代码块


     
  • 构造函数


     

继承的子类:




  •  
  • 父类静态变量


     
  • 父类静态代码块


     
  • 子类静态变量


     
  • 子类静态代码块


     
  • 父类普通变量


     
  • 父类普通代码块


     
  • 父类构造函数


     
  • 子类普通变量


     
  • 子类普通代码块


     
  • 子类构造函数


     

抽象的实现子类: 接口 - 抽线类 - 实现类




  •  
  • 接口静态变量


     
  • 抽象类静态变量


     
  • 抽象类静态代码块


     
  • 实现类静态变量


     
  • 实习类静态代码块


     
  • 抽象类普通变量


     
  • 抽象类普通代码块


     
  • 抽象类构造函数


     
  • 实现类普通变量


     
  • 实现类普通代码块


     
  • 实现类构造函数


     

接口注意:




  •  
  • 声明的变量都是静态变量并且是final的,所以子类无法修改,并且是固定值不会因为实例而变化


     
  • 接口中能有静态方法,不能有普通方法,普通方法需要用defalut添加默认实现


     
  • 接口中的变量必须实例化


     
  • 接口中没有静态代码块、普通变量、普通代码块、构造函数


     





转载:https://www.cnblogs.com/fly-piglet/p/8766226.html

推荐内容:
50道Java线程面试题
Java JDBC连接Oracle
java-pdf转word
Java在常见的spring面试问题TOP50
java多线程、集合和IO面试题_02
BAT美团滴滴java面试大纲(带答案版)之四:多线程Lock
面试题--JAVA中静态块、静态变量加载顺序
Java线程面试题 Top 50
两道面试题,带你解析Java类加载机制
Java面试处理高并发

猜你喜欢

转载自blog.csdn.net/abca999/article/details/89470363
今日推荐