Java 方法签名详解及实例代码
作者:戎码人生 时间:2022-02-04 05:56:06
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的签名信息
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/qiuchengjia/article/details/52910884
标签:Java,方法签名
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
C++容器适配与栈的实现及dequeque和优先级详解
2023-11-02 12:57:52
![](https://img.aspxhome.com/file/2023/9/105179_0s.png)
Java删除二叉搜索树最大元素和最小元素的方法详解
2023-09-30 07:27:09
![](https://img.aspxhome.com/file/2023/2/61022_0s.png)
springmvc如何使用map接收参数
2023-11-28 04:49:17
![](https://img.aspxhome.com/file/2023/9/60289_0s.png)
SpringBoot中如何对actuator进行关闭
2022-11-30 01:56:37
![](https://img.aspxhome.com/file/2023/9/62349_0s.png)
JAVA MyBatis入门学习过程记录
2022-04-23 13:49:24
Java字符串拼接新方法 StringJoiner用法详解
2022-06-16 13:02:13
android: targetSdkVersion升级中Only fullscreen activities can request orientation问题的解决方法
2023-07-26 13:56:08
举例讲解Java编程中this关键字与super关键字的用法
2023-03-09 01:46:02
Java服务器主机信息监控工具类的示例代码
2023-07-26 04:34:49
![](https://img.aspxhome.com/file/2023/0/57730_0s.png)
MyBatis一对多嵌套查询的完整实例
2023-07-12 02:49:56
Java利用反射对list对象做过滤
2023-12-23 07:39:17
![](https://img.aspxhome.com/file/2023/7/63347_0s.png)
JavaWeb建立简单三层项目步骤图解
2023-03-08 16:51:02
![](https://img.aspxhome.com/file/2023/9/63799_0s.png)
bool当成函数参数错误理解
2021-07-30 09:27:18
Flutter 日历组件简单实现
2023-10-21 11:04:35
Java Fluent Mybatis实战之构建项目与代码生成篇下
2023-11-24 10:59:52
![](https://img.aspxhome.com/file/2023/7/59787_0s.png)
SpringBoot跨域Access-Control-Allow-Origin实现解析
2023-11-28 23:04:34
关于@Autowired注入依赖失败的问题及解决
2023-11-29 00:50:42
![](https://img.aspxhome.com/file/2023/4/60474_0s.png)
SpringBoot Security密码加盐实例
2023-06-08 17:06:48
java异步上传图片示例
2023-05-31 13:42:51
Java设计模式之享元模式实例详解
2021-12-19 17:54:00