为什么Android的View.class方法均抛出异常,但调用getContext()却正常?
问题1解答
你Ctrl+点击跳转进入的View.class是Android SDK提供的存根(Stub)类,并非实际运行时生效的实现类:
- 安卓系统的核心框架类实现代码全部内置在设备的系统分区中,不会打包进开发者的APK包,也不会包含在本地SDK的android.jar里
- SDK提供的存根类仅保留了完整的类结构、方法签名,目的是支持编译阶段的语法校验、代码补全、参数提示,方法体统一写为抛出
RuntimeException仅作为占位逻辑 - 应用运行在安卓设备上时,类加载器会优先加载系统内置的
View实现类,不会调用存根类的方法,因此实际运行不会抛出异常
问题2解答
你在Android Studio中看到的可读Java格式内容,是IDE自动反编译后的结果:
- 原始的
.class文件确实是JVM可识别的二进制字节码文件,你直接到本地SDK目录找到android.jar解压出对应的View.class,用文本编辑器打开只会看到乱码的二进制内容 - Android Studio内置了字节码反编译工具,当你跳转至没有关联源码的类时,会自动将字节码反编译为可读性更高的Java代码结构展示,方便开发者查看方法定义、类继承关系等信息
内容的提问来源于stack exchange,提问作者Tu Le Anh
相关产品推荐
相关产品推荐


