关于Class中的Signature属性
1、Signature属性:https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.9
2、ClassSignature、FieldTypeSignature、MethodTypeSignature说明:
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.3.2-200
3、JLS:https://docs.oracle.com/javase/specs/index.html
举个例子,如下:
interface IA{} interface IB{} class CA{} class TP extends CA implements IA,IB{} class ParentClass<T>{} interface ParentIA{} interface ParentIB{} // 出现在ClassFile的attributes属性中的Signature属性 // <T:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;E:TT;> // Lcom/test18/ParentClass<Ljava/lang/String;>; // Lcom/test18/ParentIA;Lcom/test18/ParentIB; public class TestClass<T extends CA&IA&IB,E extends T> extends ParentClass<String> implements ParentIA,ParentIB{ // 出现在methods属性的attributes的Signature属性 // <A:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;B:TA;> // (TA;Ljava/util/List<+TB;>;) // V public <A extends CA&IA&IB,B extends A> void mymethod(A a,List<? extends B> list){ // 仅出现在常量池中,为什么? // Ljava/util/List<Ljava/io/InputStream;>; List<InputStream> x = null; // Ljava/util/List<-Ljava/io/InputStream;>; List<? super InputStream> y = null; } }
通过javap -verbose TestClass查看Class文件的结构:
Classfile /C:/TestClass.class Last modified 2018-7-5; size 1058 bytes MD5 checksum d9dc89733c2ea9a57bbced4b4c20f998 Compiled from "TestClass.java" public class com.test18.TestClass<T extends com.test18.CA & com.test18.IA & com.test18.IB, E extends T> extends com.test18.ParentClass<java.lang.String> implements com.test18.ParentIA, com.test18.ParentIB Signature: #29 // <T:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;E:TT;>Lcom/test18/ParentClass<Ljava/lang/String;>;Lcom/test18/ParentIA;Lcom/test18/ParentIB; SourceFile: "TestClass.java" minor version: 0 major version: 51 flags: ACC_PUBLIC, ACC_SUPER Constant pool: #1 = Methodref #3.#32 // com/test18/ParentClass."<init>":()V #2 = Class #33 // com/test18/TestClass #3 = Class #34 // com/test18/ParentClass #4 = Class #35 // com/test18/ParentIA #5 = Class #36 // com/test18/ParentIB #6 = Utf8 <init> #7 = Utf8 ()V #8 = Utf8 Code #9 = Utf8 LineNumberTable #10 = Utf8 LocalVariableTable #11 = Utf8 this #12 = Utf8 Lcom/test18/TestClass; #13 = Utf8 LocalVariableTypeTable #14 = Utf8 Lcom/test18/TestClass<TT;TE;>; #15 = Utf8 mymethod #16 = Utf8 (Lcom/test18/CA;Ljava/util/List;)V #17 = Utf8 a #18 = Utf8 Lcom/test18/CA; #19 = Utf8 list #20 = Utf8 Ljava/util/List; #21 = Utf8 x #22 = Utf8 y #23 = Utf8 TA; #24 = Utf8 Ljava/util/List<+TB;>; #25 = Utf8 Ljava/util/List<Ljava/io/InputStream;>; #26 = Utf8 Ljava/util/List<-Ljava/io/InputStream;>; #27 = Utf8 Signature #28 = Utf8 <A:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;B:TA;>(TA;Ljava/util/List<+TB;>;)V #29 = Utf8 <T:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;E:TT;>Lcom/test18/ParentClass<Ljava/lang/String;>;Lcom/test18/ParentIA;Lcom/test18/ParentIB; #30 = Utf8 SourceFile #31 = Utf8 TestClass.java #32 = NameAndType #6:#7 // "<init>":()V #33 = Utf8 com/test18/TestClass #34 = Utf8 com/test18/ParentClass #35 = Utf8 com/test18/ParentIA #36 = Utf8 com/test18/ParentIB { public com.test18.TestClass(); flags: ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // Method com/test18/ParentClass."<init>":()V 4: return LineNumberTable: line 53: 0 LocalVariableTable: Start Length Slot Name Signature 0 5 0 this Lcom/test18/TestClass; LocalVariableTypeTable: Start Length Slot Name Signature 0 5 0 this Lcom/test18/TestClass<TT;TE;>; public <A extends com/test18/CA & com/test18/IA & com/test18/IB, B extends A> void mymethod(A, java.util.List<? extends B>); flags: ACC_PUBLIC Code: stack=1, locals=5, args_size=3 0: aconst_null 1: astore_3 2: aconst_null 3: astore 4 5: return LineNumberTable: line 60: 0 line 61: 2 line 62: 5 LocalVariableTable: Start Length Slot Name Signature 0 6 0 this Lcom/test18/TestClass; 0 6 1 a Lcom/test18/CA; 0 6 2 list Ljava/util/List; 2 4 3 x Ljava/util/List; 5 1 4 y Ljava/util/List; LocalVariableTypeTable: Start Length Slot Name Signature 0 6 0 this Lcom/test18/TestClass<TT;TE;>; 0 6 1 a TA; 0 6 2 list Ljava/util/List<+TB;>; 2 4 3 x Ljava/util/List<Ljava/io/InputStream;>; 5 1 4 y Ljava/util/List<-Ljava/io/InputStream;>; Signature: #28 // <A:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;B:TA;>(TA;Ljava/util/List<+TB;>;)V }
关于Class中的Signature属性的更多相关文章
- 在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be closed first”
在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be ...
- 借助JavaScript中的Dom属性改变Html中Table边框的颜色
借助JavaScript中的Dom属性改变Html中Table边框的颜色 -------------------- <html> <head> <title>我是页 ...
- CSS 中关于background 属性功能
background 是 css中的核心属性,我们对他应该充分了解. background-image 定义背景图像 这个属性是我们用的最多的属性 设置背景图像有两个方式 background: ...
- android中xml tools属性详解
第一部分 安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果. 但是有些效果则必须在运行之后才能看见,比如这种情况:TextView在xml中没有设置任何字符,而是在activity中设置了 ...
- echarts中显示效果option中必有的属性
写一个最简单的效果让option中不可缺少的属性. var option = { xAxis:[ //x轴,数组对象,其下至少有一个对象 {.....} ], yAxis:[//y轴,数组对象,其下可 ...
- Vue - 在v-repeat中使用计算属性
1.从后端获取JSON数据集合后,对单条数据应用计算属性,在Vue.js 0.12版本之前可以在v-repeat所在元素上使用v-component指令 在Vue.js 0.12版本之后使用自定义元素 ...
- DataGrid中的常用属性
DataGrid中的常用属性 $('#dg').datagrid({ url:'datagrid_data.json', columns:[[ {field:'code',title:'Code',w ...
- meta标签中的http-equiv属性使用介绍(转载)
meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...
- Don’t Use Accessor Methods in Initializer Methods and dealloc 【初始化和dealloc方法中不要调用属性的存取方法,而要直接调用 _实例变量】
1.问题: 在dealloc方法中使用[self.xxx release]和[xxx release]的区别? 用Xcode的Analyze分析我的Project,会列出一堆如下的提示:Inco ...
随机推荐
- 201709015工作日记--上下文的理解,ASM
1.Android上下文理解 Android上下文对象,在Context中封装一个所谓的“语境”,Activity.Service.Application都继承自Context,所以在这三者创建时都会 ...
- (回文串 Manacher)吉哥系列故事——完美队形II -- hdu -- 4513
http://acm.hdu.edu.cn/showproblem.php?pid=4513 吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) ...
- Vivado级联Modelsim仿真Re-launch问题
前两天在群里看到有朋友说Vivado级联Modelsim仿真出现修改设计代码后重新run do文件,波形没有随着代码修改而改变,这个问题博主之前没有注意到,因为把Vivado和Modelsim级联好后 ...
- 探求Floyd算法的动态规划本质
Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(All Paris Shortest Paths,APSP)的算法.从表面上粗看,Floyd算法是一个非常简单的 ...
- DBCC--CHECKDB--使用快照还是表锁
在SQL SERVER 2005及后续版本中, DBCC CHECKDB运行时不对数据表加排他锁,而使用内部数据库快照来保持数据一致性,内部数据库快照本质是sparse Filestream,使用Sp ...
- Django:上传文件或者图片时request.FILES的值为空
在form表单中加上属性 enctype="multipart/form-data"
- Meteor in Action(一)起步
杜撰的名字,这个系列文章旨在记录工作中开发APP所要学习meteor的过程. 最简单的例子,运行Meteor自带的缺省的Hello world例子. 安装好Meteor后,建立一个空白目录. 然后: ...
- docker和定时任务
查看linux信息 cat /etc/issue 以id运行容器docker start 1c3339d7f9a8通过id结束容器 docker kill 1c3339d7f9a8 Ubuntu 安装 ...
- 关于Boolean()
Boolean(value); 如果省略 value 参数,或者设置为 0.-0.null."".false.undefined 或 NaN,则该对象设置为 false. 否则设置 ...
- Flask从入门到精通之MySQL数据库操作
前面的章节中我们已经学习了如何建立模型和关系,接下来我们学习如何使用模型的最好方法是在Python shell 中实际操作.并将介绍最常用的数据库操作. 一.创建表 首先,我们要让Flask-SQLA ...