zoukankan      html  css  js  c++  java
  • 转行小白成长路-java篇

    第14章:类型信息(上)

      此篇确实是讲类型的有关信息。感觉很重要。今天上半部分的重点放在了什么是RTTI,都有那几种方式,及根据内容引发的思考对以前的补充

      RTTI是运行时类型检查的一种缩写,这个RTTI可是比自己想象的要重要的多,重文件初始化,到运行时加载文件和转型前都有用到,而且用的深度远超我之前的想象。

    •   项目启动时期:文件加载,我们以前知道是按照ClassPath给定的路径中查找相应的文件读入程序中,现在在这部分要加入一些补充。类加载器由jvm实现,会在项目启动的时候加载进入相应的字节码文件,这里必须提一下,类加载器不是唯一的,可以我们主动更改,但是极少动他。类加载器加载的字节码文件并不是全部加载,而是由懒加载的方式(用到才取)读取一部分到内存中。他们读取文件的过程大致是先加载(由类加载器完成,不管不顾先看一遍),然后建立连接(建立引用关系,并初始化静态资源,由此说明静态资源存储位置肯定不同),最后初始化(利用构造器属于静态方法,于是乎这里有点问题,明天分析),至此类加载完成,这里类的字节码文件也都是被当作对象来存储相关信息,这里就有意思了。我们之前分析,所有对象都继承Object,这个字节码文件也利用对象的方式存储,但是没有相关的操作这些字节码文件的类(就像class管理对象,看不到谁管理了字节码文件)。说明他们都是直接继承Object,今天查看了object发现有所体会,object中肯定会有一些成员变量被隐藏了,只展示了一些可见的get方法和线程操作。联想我们之前总结继承和多态,这里有个大胆猜想,object类其实是一个大型的封装类,只不过有些东西让我不可见,比如类型,地址,这些都让jvm自动进行了
    • 项目运行时:有三种方式加载类Class.for Name()/XX.Class/InstanceOf()这三种,这三种其实都是依赖内置的Class类,这个内置的Class类更像是Object的一个工具类继承了object但是扩展了。这部分也是猜测。前两种获取类对象的引用,不同点是第一种直接就初始化了字节码文件的类,走了一遍上面说的。第二种就是像正常类的工作方式,用到才加载。这部分如果有底层的源码就太棒了
    • 容器的相关猜想,书中说到容器其实都是上转型为object后,在使用的时候在下转型,转到原来的对象类型上。类型间的转化,这说明引用也是object形式,并不是像之前想的那样单纯。
  • 相关阅读:
    java.lang.NoSuchMethodError
    asm相关内容想下载(包括 jar 包)
    Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type
    用Navicat连接mysql报错:2003-Can't connect to MySql server on '10.100.0.109'(10039)
    The type java.lang.reflect.AnnotatedElement cannot be resolved. It is indirectly referenced from required .class files
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
    交通测速方式
    卡口和电子警察的区别
    Myeclipse连接Mysql数据库时报错:Error while performing database login with the pro driver:unable
    在window上安装mysql
  • 原文地址:https://www.cnblogs.com/aiwin/p/12438946.html
Copyright © 2011-2022 走看看