时间:2021-05-20
java 方法签名,我想做java 开发的朋友也知道,方法签名的重要性,是方法重载的一个比较好的解释,尤其是在后续优化方面,这里记录下,有看到的朋友也可看下,
方法签名的意义
对于同名不同类、同类不同名的方法,方法签名的意义并不是很大,但是对于重载方法来说,方法签名的意义就十分巨大了。由于重载方法之间的方法名是相同的,那么我们势必要从构成方法的其他几个要素中找到另一个要素与方法名组成能够唯一标示方法的签名,方法体当然不予考虑。那么就是形参列表和返回值了,但是由于对于调用方法的人来说,方法的形参数据类型列表的重要程度要远远高于返回值,所以方法签名就由方法名+形参列表构成,也就是说,方法名和形参数据类型列表可以唯一的确定一个方法,与方法的返回值一点关系都没有,这是判断重载重要依据,所以,以下的代码是不允许的
方法签名的格式
首先我们先看几个方法以及他们的方法签名:
从以上三个例子,我们就可以很简单的看出一些小小的规律:
JVM为我们提供的方法签名实际上是由方法名(上文的例子为了简单没有写出全类名)、形参列表、返回值三部分构成的,基本形式就是:
全类名.方法名(形参数据类型列表)返回值数据类型
Java方法签名中特殊字符/字母含义
特殊字符 数据类型 特殊说明 V void 一般用于表示方法的返回值 Z boolean B byte C char S short I int J long F float D double [ 数组 以[开头,配合其他的特殊字符,表示对应数据类型的数组,几个[表示几维数组 L 全类名; 引用类型 以 L 开头 ; 结尾,中间是引用类型的全类名
一定要注意的是方法重载时,方法返回值没有什么意义,是由方法名和参数列表决定的
利用javap生成方法签名
类库类
$ javap -s java.lang.String Compiled from "String.java" public final class java.lang.String extends java.lang.Object implements java.io.Serializable,java.lang.Comparable,java.lang.CharSequence{ public static final java.util.Comparator CASE_INSENSITIVE_ORDER; Signature: Ljava/util/Comparator; public java.lang.String(); Signature: ()V public java.lang.String(java.lang.String); Signature: (Ljava/lang/String;)V public java.lang.String(char[]); Signature: ([C)V public java.lang.String(char[], int, int); Signature: ([CII)V public java.lang.String(int[], int, int); Signature: ([III)V public java.lang.String(byte[], int, int, int); Signature: ([BIII)V public java.lang.String(byte[], int); Signature: ([BI)V public java.lang.String(byte[], int, int, java.lang.String) throws java.io.UnsupportedEncodingException; Signature: ([BIILjava/lang/String;)V public java.lang.String(byte[], int, int, java.nio.charset.Charset); Signature: ([BIILjava/nio/charset/Charset;)V public java.lang.String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException; Signature: ([BLjava/lang/String;)V public java.lang.String(byte[], java.nio.charset.Charset); Signature: ([BLjava/nio/charset/Charset;)V public java.lang.String(byte[], int, int); Signature: ([BII)V ...自定义类
package com.demo; public class SigTest { public static final String name = null; public int getName(int[] data,long index) { return 0; } }输出
-s 表示打印签名信息
-p 表示打印所有函数和成员的签名信息,默认只打印public的签名信息
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Android实现获取签名及公钥的方法。分享给大家供大家参考。具体如下:1.java代码如下:privatebyte[]getSign(Conte
本文实例讲述了Java使用DSA密钥对生成XML签名的方法。分享给大家供大家参考。具体实现方法如下:MainClass.java代码如下:复制代码代码如下:im
Java两种延时thread和timer详解及实例代码在Java中有时候需要使程序暂停一点时间,称为延时。普通延时用Thread.sleep(int)方法,这很
Java中自定义异常详解及实例代码下面做了归纳总结,欢迎批评指正自定义异常classChushulingExceptionextendsException{pu
Java绘图技术的详解及实例简单实例publicclassDemo1extendsJFrame{MyPanelmp=null;publicstaticvoidm