关于java方法的签名

Jvm虚拟机依靠两个字符串唯一识别方法或者成员变量:“名称”以及“签名”。分别介绍如下,重点说明根据声明写出签名的方法,即第二部分。

1.       名称

         如果是函数,那么名称就是函数名称。如果是成员变量,那么名称就是成员变量名称。例如:

         public boolean isDisplayable();

         名称即为”isDisplayable”

        

         ClassType m_obj;

         名称即为”m_obj”

 

2.       签名

         因为java语言允许重载,即多个函数同名,所以不能仅仅依靠名称来区分函数。为了准确区分重载的多个java方法,需要判断各个方法的签名。

         函数的签名由两部分组成,形式为“(参数签名)返回值签名”。例如:public boolean isDisplayable();的签名为“()Z”

         成员变量的签名只有一部分,形式为“类型签名”。例如:ClassType m_obj;的签名为”Lpackage1/package2/ClassType;”

 

         签名与类型一一对应的,对应表如下:

         boolean    Z

         byte           B

         char           C

         short         S

         int              I

         long           J

         float           F

         double      D

         package1.package2.ClassName     Lpackage1/package2/ClassName;  //以大写字母’L’开头、以字符’;’结尾。

         Type[]        [Type_des //一维数组则只有一个’[‘

         Type[][]      [[Type_des //二维数组则有两个’[‘

 

3.       例子

         package com.sumavision;

 

         public class TestClass{

                   boolean boolVal;       //boolVal的签名为:Z

                   byte byteVal;      //byteVal的签名为:B

                   char cVal;           //cVal的签名为:C

                   short sVal;         //sVal的签名为:S

                   int iVal;               //iVal的签名为:I

                   long lVal;            //lVal的签名为:J

                   float fVal;            //fVal的签名为:F

                   double dVal;      //dVal的签名为:D

                   String strVal;      //strVal的签名为:Ljava/lang/String;

                   String[] strArr; //strArr的签名为:[Ljava/lang/String;

                   String[][] obj;      //obj的签名为:[[Ljava/lang/String;

 

                   public String getStrVal(TestClass obj);       //此函数的签名为:(Lcom/sumavision/TestClass;)Ljava/lang/String;

                   public String[] getStrArrayVal(TestClass[] objArray, int pos);        //此函数的签名为:([Lcom/sumavision/TestClass;I)[Ljava/lang/String;

                   public String[] getStrArrayVal(TestClass[] objArray, int pos, int verbose);     //此函数的签名为:([Lcom/sumavsion/TestClass;II)[Ljava/lang/String;

         };

4. 可以利用jdk提供的编译器获得指定类中所有变量和方法的签名。方法为:

         1)打开命令行窗口

         2)利用cd命令进入包所在目录

         3)执行javap –s –p 类全限定名称package1.package2.classname样式)

        

执行上述3步后,命令行窗口就会输出指定类的所有变量和方法的签名。

结果实例如下:

class test.Thread.TestTh extends java.lang.Thread{

test.Thread.TestTh();

  Signature: ()V

public void run();

  Signature: ()V

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值