深度剖析类加载器系列文章:二、类的主动使用和被动使用
来源:互联网 发布:mac pro 如何重装系统 编辑:程序博客网 时间:2024/05/17 02:10
深度剖析类加载器系类文章:二、类的主动使用和被动使用
本文为本人理解总结,如有错误请指正
1.Java类的使用方式
- Java程序对类的使用方式可以分为两种:
- 主动使用:会执行加载、连接、初始化
- 被动使用:只执行加载、连接,不执行类的初始化。
- 所有的Java虚拟机实现必须在类或接口被Java程序“首次主动使用”时才初始化它们(JVM规范)。
2.主动使用(六种)
- 创建类的实例
- 访问某个类或接口的静态变量,或对该静态变量赋值(即在字节码中,执行getstatic或putstatic指令时)
- 调用类的静态方法(即在字节码中执行invokestatic指令时)
- 反射
- 初始化一个类的子类
当虚拟机启动某个被表明为启动类的类
Java类的初始化规则:- 类按静态变量、静态代码块的定义顺序初始化
- 先初始化父类
- 当访问一个Java类或接口中的静态域的时候,只有真正声明这个域的类或接口才会被初始化。
接口初始化不会导致父接口的初始化。
例子:package com.wzm.jvm; /** * @ClassName: Test7 * @Description: * @author nameisbill * @date 2017年1月18日 下午4:08:09 */public class Test7 { static{ System.out.println("Class Test7 is initialized"); } public static void main(String[] args) { int age=Child.age; }}class Parent { public static int age=36; static{ System.out.println("Class Parent is initialized"); }}class Child extends Parent{ public static int number=3; static{ System.out.println("Class Child is initialized"); } }
控制台输出结果是:
Class Test7 is initialized
Class Parent is initialized在上述代码中通过Child.age引用了其父类Parent中声明的静态变量age,根据上面的初始化规则第三条,由于age是在父类Parent中声明定义的,所以只加载初始化父类Parent,不初始化Child。
3.被动使用
除了上面六种方式,其他的都是类的被动使用。
0 0
- 深度剖析类加载器系列文章:二、类的主动使用和被动使用
- Java类加载器深度剖析 类的主动和被动使用
- Java虚拟机深入详解JVM之类加载器深度剖析、类的主动使用、被动使用
- 类的主动使用与被动使用;ClassLoader的剖析
- 深入类加载器二----主动引用和被动引用
- 深入剖析Classloader(一)--类的主动使用与被动使用
- 深度剖析类加载器系列文章:一、Java类的加载、链接、初始化
- Java之类的主动使用和被动使用
- 【深度解析】论BMS的主动均衡和被动均衡
- Java 中对类的主动引用和被动引用
- Java 中对类的主动引用和被动引用
- Java中对类的主动引用和被动引用
- Java 中对类的主动引用和被动引用
- JVM类加载过程及主动引用与被动引用
- 深入理解jvm--Java类的初始化及主动引用和被动引用完全解析
- Discuz! 的主动缓存和被动缓存
- ftp的主动模式和被动模式
- FTP主动和被动模式的区别
- angular 实时更新模板视图的方法$apply
- Windows下整合Apache2.2和Tomcat6.0 集群与负载均衡
- 内存、并发什么的
- JNA调用报错lang.IllegalArgumentException: Unrecognized calling convention: 1
- java 重载
- 深度剖析类加载器系列文章:二、类的主动使用和被动使用
- java+redis+spring mvc实现发布订阅(不同项目间)
- js迭代器模式——内部迭代器
- Hibernate 一些简单错误提示信息
- [转载] 好文保存
- 数据结构的基本概念
- react 事件 (笔记)
- python3+selenium3 环境搭建
- Eclipse中找不到Servlet