关于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 ...
随机推荐
- faceswap使用手冊
cd faceswap cd faceswap-master python faceswap.py gui Notice: This repository is not operated or mai ...
- linux的客户端安装步骤配置
现有一个***.tar.gz的客户端软件,现在客户端安装步骤如下 说明:此软件是一个网络客户端认证软件,因为采用虚拟机中的linux主机,所以此主机的网路配置从只能使用Bridge模式,而不能使用NA ...
- hdu 4972 根据每轮篮球赛分差求结果
http://acm.hdu.edu.cn/showproblem.php?pid=4972 两支球队进行篮球比赛,每进一次球后更新比分牌,比分牌的计数方法是记录两队比分差的绝对值,每次进球的分可能是 ...
- How Many Tables HDOJ
How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 基于SketchUp和Unity3D的虚拟场景漫游和场景互动
这是上学期的一次课程作业,难度不高但是也一并记录下来,偷懒地拿课程报告改改发上来. 课程要求:使用sketchUp建模,在Unity3D中实现场景漫游和场景互动. 知识点:建模.官方第一人称控制器.网 ...
- java web渲染器
渲染就是server端将夹杂有脚本语言变量对象的模版文件解释为纯html页面的过程!
- Android-普通菜单Menu
第一种方式,使用Java方式 第二种方式,使用menu.xml package liudeli.activity; import android.app.Activity; import androi ...
- Jersey构建Restful风格的webservices
最近一直在搞老项目的开发工作,很少写博文了.听了两位阿里巴巴大牛的讨论,决定试试用restful风格的webservices看看. 这里用的是Jersey这个框架,刚开始弄,有点麻烦,只能到处查资料. ...
- 深入理解Aspnet Core之Identity(2)
主题: 我将继续介绍Identity的账户简单管理,即是增删改查.我会只介绍增加和删除,修改功能代码我会上传到我的github上, 创建用户: 1.我在Model文件夹创建一个 CreateModel ...
- JAVA 从头开始<四>
一.switch 1.根据输入月份获取季节 import java.util.*; class Demo8{ public static void main(String[] args) { Syst ...