• Java 类加载、调用构造器、执行方法的过程


    注:整理到这部分知识点时候发现有很多问题还没搞清楚,所以这里可能会存在很多不够详细甚至错误的理解,准备翻一遍编程思想再来更新,

    欢迎评论交流

    当JVM执行到这么一句代码:  new Person().setName("superzhao")

    它会做这么几件事

    类加载

    JVM会用类加载器加载xxx.Person这个class文件

    加载(class){

      if(class有父类){

        加载(superclass);

      }

      1.静态域申明,默认初始化为0,false,null

      2.按照申明顺序(从上而下书写顺序)执行静态域(赋值)和静态代码块(执行代码块体),

        二者等价,因此不可在静态代码块中使用位于代码块之后申明的静态域,但是可以初始化

      3.按照申明顺序加载静态方法

    }

    构造器被调用(对象初始化)

    1.所有实例域初始化为默认值0,false,null

    2.按照申明顺序执行域初始化及块初始化

    3.如果构造器"第一行"调用了其他构造器,则执行

    4.执行构造器体

    调用方法

    1.编译器查看对象的申明类型,找到它所有与方法名相同的方法

    2.根据参数类型,找到相应"最合适"的父类方法可能会出现类型转换(向上转型)

    3.如果是private,static,final,构造器 方法,那么已经确定就是该方法(这四种类型的方法没有多态特征),

      因为没有多态所以也叫静态绑定

    4.如果是其他方式,采用动态绑定:JVM去寻找改类的实际类型中对应的最合适方法

    5.执行调用

  • 相关阅读:
    Git常用命令
    Shell脚本学习
    Shell脚本学习
    Shell脚本学习
    Git ignore文件的用法
    RSA非对称加密算法
    C++ 标准库中的堆(heap)
    EM(Entity FrameWork)- code first , using in Visual stdio 2017
    C# 图片文字识别
    C# 调 C++ DLL 托管代码中释放非托管函数分配的内存
  • 原文地址:https://www.cnblogs.com/superzhao/p/4597883.html
Copyright © 2020-2023  润新知