Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java中的方法签名解读

Java中的方法签名解读

作者头像
明明如月学长
发布于 2021-08-31 07:14:33
发布于 2021-08-31 07:14:33
2.8K00
代码可运行
举报
运行总次数:0
代码可运行

一、背景

Java的函数签名是基础知识,也是面试中常问的知识点之一,虽然难度不大,但是很多人并没有关注过或者查过这个问题。

二、解释

根据维基百科的定义: https://en.wikipedia.org/wiki/Type_signature

2.1 类型签名

虚拟机中,内部类型签名在字节码层面用来识别函数或者类。

例如:String String.substring(int, int) 其字节码表示形式为:Ljava/lang/String.substring(II)Ljava/lang/String;

main()方法长这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args)

字节码表示形式为:Lsome/package/Main/main:([Ljava/lang/String;)V

main()方法包括3个部分

  • public  表示 main()方法可以被任意对象调用
  • static表示main() 是一个类方法
  • void 表示main() 该方法无返回值

2.2 Java中的函数签名

在Java中,函数签名包括函数名,参数的数量、类型和顺序。

返回值和函数上声明的异常并不属于函数签名的构成部分。

下两个函数签名不同

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
doSomething(String[] y);
doSomething(String y);

因为他们虽然函数名相同,但是参数类型不同。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
下面三个函数的签名相同:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int doSomething(int y) 
String doSomething(int x)
int doSomething(int z) throws java.lang.Exception

他们的函数名相同,参数数量,类型和顺序也一致。

2.3 获取函数签名的工具类

参考:http://www.java2s.com/Code/Java/Reflection/Methodsignature.htm

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
Copyright 2011 Karl-Michael Schneider

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
//package org.jwatter.util;

import java.lang.reflect.Method;

public class ReflectUtil
{
  public static String parametersAsString ( Method method )
  {
    return parametersAsString(method, false);
  }
  public static String getSignature ( Method method, boolean longTypeNames )
  {
    return method.getName() + "("
        + parametersAsString(method, longTypeNames) + ")";
  }
  public static String parametersAsString ( Method method,
      boolean longTypeNames )
  {
    Class[] parameterTypes = method.getParameterTypes();
    if ( parameterTypes.length == 0 ) return "";
    StringBuilder paramString = new StringBuilder();
    paramString.append(longTypeNames ? parameterTypes[0].getName()
                    : parameterTypes[0].getSimpleName());
    for ( int i = 1 ; i < parameterTypes.length ; i++ )
    {
      paramString.append(",").append(
          longTypeNames  ? parameterTypes[i].getName()
                  : parameterTypes[i].getSimpleName());
    }
    return paramString.toString();
  }

  public static String getSignature ( Method method )
  {
    return getSignature(method, false);
  }


}

从其中获取函数签名的方法也可以得到印证

如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
偏移量函数进阶一oracle空行取上一行
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处 最后编辑时间为: 2021/11/17 12:31:11
overme
2022/01/17
5500
偏移量函数进阶一oracle空行取上一行
Oracle健康检查报告html
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处 最后编辑时间为: 2022/01/14 11:30:19
overme
2022/01/17
3610
Oracle健康检查报告html
Oracle行转列,pivot函数和unpivot函数
这些中文字段名比较刺眼,王五的 英语列和 数学列也为空不好看 我们这边强壮下sql
overme
2022/01/17
9080
Oracle行转列,pivot函数和unpivot函数
杂项 备用一下
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处 最后编辑时间为: 2021/05/27 15:41:40
overme
2022/01/17
5280
Oracle定时任务
oracle job 是应用在数据库层面,用来定时执行存储过程或者 SQL 语句的定时器。
overme
2022/01/17
2.7K0
Oracle定时任务
使用kettle导入excle到oracle
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处
overme
2022/01/15
9190
使用kettle导入excle到oracle
oracle不确定的逗号转列
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处 最后编辑时间为: 2021/04/16 17:22:28
overme
2022/01/17
1.3K0
oracle不确定的逗号转列
ORACLE用分析函数LEAD取日历表下一个交易日
现在只有250条交易日数据,只能取到交易日的下一个交易日,取不到非交易日的下一个交易日。
overme
2022/01/17
8970
ORACLE用分析函数LEAD取日历表下一个交易日
ORACLE服务端启动监听服务
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处
overme
2022/01/18
1.4K0
ORACLE服务端启动监听服务
Oracle查询用户所有表
来自:https://www.2cto.com/database/201212/174394.html
Alone88
2019/10/22
3.7K0
ORACLE取出连续区间
这个其实是之前那个连续N次数字题的小拓展。用在连续签到天数的开始结束区间和天数,也可以用在连续达标、连续正常考勤、连续超出预警天数等场景。
overme
2022/01/17
5020
ORACLE取出连续区间
oracle递归寻找父节点
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处
overme
2022/01/15
1.7K0
oracle递归寻找父节点
Oracle创建用户并把当前的表视图给予权限
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处 最后编辑时间为: 2021/10/28 15:46:00
overme
2022/01/17
1.2K0
Oracle 怎么同时插入多条数据?
Oracle 和 Mysql 语法还是有很多相似的,但是同时插入多条数据的话,用Mysql的语法会出问题~ 看一下Mysql插入多条数据
Alone88
2019/10/22
3.5K0
oracle解析xml
这个方法只适合clob比较短的xml,如果xml字段过大会报错需要用SUBSTR()函数来切割
overme
2022/01/17
1.6K0
oracle解析xml
Matlab画三维图_读书笔记图画
plot3 基本的三维曲线图绘制 plot3(x,y,z),x,y,z均为相同长度的向量,会得到三个向量相同下标构成的的三维坐标(xi,yi,zi)(i=1~n)连的曲线
全栈程序员站长
2022/11/10
1.2K0
Matlab画三维图_读书笔记图画
Oracle,查找所有至少连续出现N次的数字
一开始看到题目的时候就觉得有见过类似场景,一下子想不起来,觉得跟我平常工作中的取开仓日很像,思索一会无思路,去看题解,发现大家用的是多表关联和lead聚合函数,无法复用决定研究。
overme
2022/01/15
1.8K0
Oracle,查找所有至少连续出现N次的数字
ORACLE语句级触发器的实现
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处
overme
2022/01/15
5770
ORACLE语句级触发器的实现
oracle存储过程中使用create table as
今天有个同学跟我说存储过程无法建表,我本地试了一下嚯嚯果然不行。报错PLS-00103
overme
2022/01/17
3.5K0
oracle存储过程中使用create table as
【利用Python进行金融数据分析】开始了解和获取数据
本文由 所长 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名 最后编辑时间为: Apr 21, 2018 at 10:22 am
光点神奇
2019/05/28
9270
相关推荐
偏移量函数进阶一oracle空行取上一行
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验