前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Java方法签名

Java方法签名

作者头像
java干货
发布2021-02-17 17:23:32
发布2021-02-17 17:23:32
4.4K00
代码可运行
举报
文章被收录于专栏:java干货java干货
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
复制
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生成方法签名

代码语言:javascript
代码运行次数:0
复制
$ 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  
...  
自定义类
代码语言:javascript
代码运行次数:0
复制
package com.demo;  
 public class SigTest {  
     public static final String name = null;  
     public int getName(int[] data,long index) {  
         return 0;  
     }  
 }  
代码语言:javascript
代码运行次数: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的签名信息
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/04/24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法签名的格式
  • 利用javap生成方法签名
    • 自定义类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档