Java 方法签名详解及实例代码

 更新时间:2016年10月26日 10:31:54   作者:戎码人生   我要评论

这篇文章主要介绍了 Java 方法签名详解及实例代码的相关资料,需要的朋友可以参考下

java 方法签名,我想做java 开发的朋友也知道,方法签名的重要性,是方法重载的一个比较好的解释,尤其是在后续优化方面,这里记录下,有看到的朋友也可看下,

方法签名的意义

对于同名不同类、同类不同名的方法,方法签名的意义并不是很大,但是对于重载方法来说,方法签名的意义就十分巨大了。由于重载方法之间的方法名是相同的,那么我们势必要从构成方法的其他几个要素中找到另一个要素与方法名组成能够唯一标示方法的签名,方法体当然不予考虑。那么就是形参列表和返回值了,但是由于对于调用方法的人来说,方法的形参数据类型列表的重要程度要远远高于返回值,所以方法签名就由方法名+形参列表构成,也就是说,方法名和形参数据类型列表可以唯一的确定一个方法,与方法的返回值一点关系都没有,这是判断重载重要依据,所以,以下的代码是不允许的

public long aaaa(){ 

} 
public int aaaa(){ 

} 


方法签名的格式

首先我们先看几个方法以及他们的方法签名:

public void test1(){}          test1()V
public void test2(String str)   test2(Ljava/lang/String;)V
public int test3(){}           test3()I

从以上三个例子,我们就可以很简单的看出一些小小的规律:

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; 
   } 
 } 

输出

$ javac SigTest.java 
$ javap -s -p com.demo.SigTest
Compiled from "SigTest.java"
public class com.demo.SigTest extends java.lang.Object{
public static final java.lang.String name;
 Signature: Ljava/lang/String;
public com.demo.SigTest();
 Signature: ()V
public int getName(int[], long);
 Signature: ([IJ)I
static {};
 Signature: ()V
}

-s 表示打印签名信息

-p 表示打印所有函数和成员的签名信息,默认只打印public的签名信息

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Java中线程用法总结

    Java中线程用法总结

    这篇文章主要介绍了Java中线程用法,实例总结了java中线程的常见使用技巧,需要的朋友可以参考下
    2015-06-06
  • Java获取时间年、月、日的方法

    Java获取时间年、月、日的方法

    这篇文章主要介绍了Java获取时间年、月、日的方法,涉及java时间操作的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 深入解析java HashMap实现原理

    深入解析java HashMap实现原理

    这篇文章主要介绍了深入解析java HashMap实现原理的相关资料,需要的朋友可以参考下
    2015-09-09
  • spring学习之参数传递与检验详解

    spring学习之参数传递与检验详解

    这篇文章主要给大家介绍了关于spring参数传递与检验的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作能带来一定的帮助,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07
  • JAXB命名空间及前缀_动力节点Java学院整理

    JAXB命名空间及前缀_动力节点Java学院整理

    这篇文章主要给大家介绍了关于JAXB命名空间及前缀的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-08-08
  • java和matlab画多边形闭合折线图示例讲解

    java和matlab画多边形闭合折线图示例讲解

    由于要将“哈密顿回路问题(TSP)”的求解中间结果表示出来,查了一下使用程序画多边形图形。现在在总结一下,这个图是“由给定节点首尾相连的”闭合多边形
    2014-02-02
  • Java Servlet简单实例分享(文件上传下载demo)

    Java Servlet简单实例分享(文件上传下载demo)

    下面小编就为大家带来一篇Java Servlet简单实例分享(文件上传下载demo)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Java 字节数组类型(byte[])与int类型互转方法

    Java 字节数组类型(byte[])与int类型互转方法

    下面小编就为大家带来一篇Java 字节数组类型(byte[])与int类型互转方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Java线程安全中的单例模式

    Java线程安全中的单例模式

    这篇文章主要介绍了Java线程安全中的单例模式,需要的朋友可以参考下
    2015-02-02
  • Java语言实现对MySql数据库中数据的增删改查操作的代码

    Java语言实现对MySql数据库中数据的增删改查操作的代码

    这篇文章主要介绍了Java语言实现对MySql数据库中数据的增删改查操作的代码,实现了连接数据库,和数据库的增删改查操作,有兴趣的可以了解一下。
    2016-12-12

最新评论