美文网首页
Java对象初始化和多态

Java对象初始化和多态

作者: Mick米壳 | 来源:发表于2019-04-19 12:31 被阅读0次

加载 Load

  • 根据一个类的全限定名来读取此类的二进制bytestream(并不一定要从class文件中获取,可以通过其他渠道,譬如jar、zip、数据库、动态编译的java源文件、本地系统直接加载、通过网络)
  • 将bytestream代表的静态存储结构转换为方法区的run-time structure(类型信息)
  • 在堆中生成一个对应的java.lang.Class对象(类对象),作为方法区类型信息的访问入口
  • Loading和Linking的部分内容交叉进行,但开始时间存在顺序

链接 Linking

验证 verification

  • 验证bytecode,file format(class文件格式),metadata,symbol reference(确保resolution能正常进行),即是否符合虚拟机的要求且不会危害虚拟机的安全
  • 重要但非必要

准备 Preparation

  • 为类中的静态分配内存,并设定默认值(static final 例外,会直接赋值)

解析 resolution

  • 将方法区中对象类型信息的符号引用->直接引用(即类、接口、字段、接口方法、方法类型、方法句柄、调用点限定符这7类符号引用在内存中的指针偏移量),这一阶段可以在初始化之后,运行之前进行
  • 完成方法表的填充

初始化 Initializaiton

  • <clint>:包含static非final变量初始化语句,static代码块。根据语句出现顺序执行
  • static语句快只能访问定义在其之前的变量
  • JVM保证一个类的<clint>执行之前,它的超类<clint>方法已经被执行
  • <clinit>方法被JVM加锁
  • 如果一个类没有声明任何的类变量,也没有静态代码块,那么可以没有类<clinit>方法
  • 触发初始化的时机:new,反射,序列化,static方法、字段,main(),父类
  • 初始化不同于实例化(<init>),后者的触发条件为new、clone等,顺序为父类->子类,变量->语句块->构造函数,<init>之前必须由<clinit>初始化过

相关文章

  • Java对象初始化和多态

    加载 Load 根据一个类的全限定名来读取此类的二进制bytestream(并不一定要从class文件中获取,可以...

  • 对像和类

    Java 对象和类 多态 继承 封装抽象 Java对象和类 类对象实例方法消息解析代码: 11 运行结果: 小狗的...

  • 学习JavaScript设计模式——面向对象(五)

    面向对象(五) 多态 我仔细看了一下,这里说的JavaScript 的多态好像和Java的多态不一样, Java ...

  • 008.java 对象和类

    Java 对象和类 Java作为一种面向对象语言。支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法...

  • 04.Java 对象和类

    Java 对象和类 Java作为一种面向对象语言。支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法...

  • 详解Java多态

    详解Java多态 多态定义 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态...

  • 日常记忆之Java对象和类

    Java对象和类 Java作为一种面向对象语言。支持下列基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 ...

  • java抽象类和接口小记

    Java抽象类和接口小记 Java抽象类和接口实现了java的多态.多态是面向对象程序语言的核心,在项目开发过程中...

  • java对象转型和多态

    本文为学习笔记 能力有限 如有错误望指正。谢谢!!! 对象转型: 一个基类的引用可以指向其子类的对象,基类的引用不...

  • day09-Java面向对象三(多态/抽象类/接口)

    9.0 Java面向对象三大特性 封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的 多态概念:指...

网友评论

      本文标题:Java对象初始化和多态

      本文链接:https://www.haomeiwen.com/subject/ojzfgqtx.html