深究一个静态代码块不被执行问题

深究一个静态代码块不被执行问题

问题现象:

  1. spring环境中的bean 的静态代码块会被自动执行
  2. 工具类中的静态代码块不被自动执行,工具类第一次被调用时静态代码块执行
  3. 通过子类调用继承的父类的方法,子类静态代码块不被执行

复习ClassLoad

Java类加载 会初始化的情况有且仅有以下五种:(也称为主动引用)

1.遇到new(用new实例对象),getStatic(读取一个静态字段),putstatic(设置一个静态字段),invokeStatic(调用一个类的静态方法)这四条指令字节码命令时

2.使用Java.lang.reflect包的方法对类进行反射调用时,如果此时类没有进行init,会先init。

3.当初始化一个类时,如果其父类没有进行初始化,先初始化父类

4.jvm启动时,用户需要指定一个执行的主类(包含main的类)虚拟机会先执行这个类

5.当使用JDK1.7的动态语言支持的时候,当java.lang.invoke.MethodHandler实例后的结果是REF-getStatic/REF_putstatic/REF_invokeStatic的句柄,并且这些句柄对应的类没初始化的话应该首先初始

问题分析

  1. 工具类中的静态代码块不被自动执行

    项目启动时工具类不满足Java类加载条件,因此未初始化,在第一次调用时,满足Java类加载条件,ClassLoad同时执行静态代码块

  2. 通过子类调用继承的父类的方法,子类静态代码块不被执行

    对应于Java类加载 第一条,invokeStatic的对象是父类,虽然是子类引用了父类方法,但是代码的归属权上归属于父类,因此子类静态代码块不执行(拓展子类引用父类静态变量同理)

  3. 拓展问是不是在项目启动时类一定会被加载到内存

    答案时否定的,使用时才会加载。因此对性能要求较高情况需考虑启动时全量加载。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《Android安全架构深究》一文主要讲解了Android系统的安全架构。Android被广泛应用于智能手机、平板电脑等移动设备,对其安全性的要求也越来越高。文章介绍了Android系统的四个核心组件,包括Linux内核、硬件驱动和抽象层、应用框架和应用程序,这四个组件密切相关,共同构成了Android的整体安全网络。 文章指出,Linux内核是Android安全网络的核心,负责提供整个系统的基本服务。硬件驱动和抽象层负责与硬件设备的交互,应用框架则是整个系统的接口层,负责协调不同组件之间的工作,应用程序则运行在最高层,是整个系统的最终用户界面。由于这四个组件的功能各不相同,因此需要采取不同的安全策略。 文章进一步分析了Android系统的安全机制,包括权限管理、应用签名、沙盒机制、安全隔离和加密技术等等。其中,应用签名可以保证应用程序的完整性和真实性,沙盒机制和安全隔离可以防止应用程序之间的相互干扰和信息泄露,而加密技术则可以保护用户的数据安全。 综上所述,Android安全架构是一个大系统,需要多个组件之间的协调和衔接。只有采取全面的安全策略,才能够保证整个系统的安全性。随着Android系统的普及和发展,未来的安全挑战也会越来越严峻,因此,研究Android安全架构的相关问题,对提高整个系统的安全性具有重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值