函数签名 与 重载

什么是函数签名呢?

函数签名(或称类型签名、方法签名)定义了函数或方法的输入与输出

签名可包含:

  •    参数及参数的类型
  •    返回值及其类型
  •    可能抛出或传出的异常
  •    该方法在面向对象程序中可用性方面的信息(如public、static或prototype)

 

JavaScript中的签名

JavaScript是一钟松散型或动态语言。这意味着你不必提前声明变量的类型。类型将在程序处理时自动确定。JavaScript中的签名仍然可以为你提供有关该方法的一些信息: 

MyObject.prototype.myFunction(value)
  • 该方法是安装在一个名为 MyObject 的 对象 上。
  • 该方法安装在 MyObject 的原型上 (因此它是一个实例方法),而不是一个 静态方法 。
  • 该方法的名称是 myFunction
  • 该方法接受一个叫 value 的参数, 且没有进一步定义。

 

C语言中的签名

C语言中,是一个强类型的语言,在编译的时候就会被确定:

int total(int x , int y);
  • int 关键字表示是一个整型的函数,返回值必须是个整数
  • 该函数的名称为total
  • 该方法接受两个类型为 int 的参数。参数名称分别为x、y。

函数能否被重载,取决于函数签名:

C语言中函数可以被重载,因为函数签名有多个,可以重载,而在JavaScript中,函数签名只有函数名一个签名,一旦函数名相同,就会按照后来的函数来进行操作,所以JavaScript不能够被重载。

 

Java 中的签名

在 Java 中,签名用于识别虚拟机代码级别的方法和类。你必须在代码中声明变量的类型才能运行 Java 代码。 Java 是严格类型 的,将在编译时检查所有参数是否正确。

public static void main(String[] args)
  • public 关键字是一个访问修饰符,指示任何对象都可以调用此方法。
  • static 关键字指示此方法是一个类方法,而不是一个实例方法。
  • void 关键字表指示此方法没有返回值。
  • 该方法的名称为 main
  • 该方法接受一个类型为 String Array 的参数。它的名是 args

 

下面说说java中的重载:

比如:

复制代码
public  static  int  sum(int a, int b){  //
      return a+b; 
}
public  static  int  sum(int a, int b,int c){  //
      return a+b+c; 
}
public  static  int  sum(double a, double b){    //
      return a+b; 
}
public  static  int  sum(int a, double b){    //
      return a+b; 
}
public  static  int  sum(double a, int b){    //
      return a+b; 
}
复制代码

这些它们是同一个名字,但是都可以被重载

①与②:参数个数不同

①与③、④:参数的类型不同

④与⑤:参数的顺序不同

 

但是我们有下面的则将不会重载

复制代码
public  static  int  sum(int a, int b){  //
      return a+b; 
}
public  static  int  sum(int x, int y){   //
      return a+b; 
}
public  static  double sum(int a, int b){   //
      return a+b; 
}
复制代码

①与⑥:与参数的名字是无关的,无法被重载

①与⑦:与方法的返回值是无关的,无法被重载

 

顺便,方法与函数的区别:

经常谈论起函数和方法,也常常搞不清楚它们之间的界限,经常把两个混用。首先来看看,两者是如何定义的?

  函数(function)是可以执行的javascript代码块,由javascript程序定义或javascript实现预定义。函数可以带有实际参数或者形式参数,用于指定这个函数执行计算要使用的一个或多个值,而且还可以返回值,以表示计算的结果。

  方法(method)是通过对象调用的javascript函数。也就是说,方法也是函数,只是比较特殊的函数。假设有一个函数是fn,一个对象是obj,那么就可以定义一个method:

 

 

有些概念我一直很困惑,譬如“面向对象”、“类”和“实例化”。

希望有人能用简洁的话语帮我解释下方法(method)和函数(function)的区别。在google上找到的那些答案对我来说太难理解了。 谢谢。

这个问题还是 willc2 在 2008 年 9 月 30 日在 StackOverflow 上提问的。

下面先来看看被选为最佳答案的回复(来自  Andrew Edgecombe ):

函数是一段代码,通过名字来进行调用。它能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值。

所有传递给函数的数据都是显式传递的。

方法也是一段代码,也通过名字来进行调用,但它跟一个对象相关联。方法和函数大致上是相同的,但有两个主要的不同之处:

  1. 方法中的数据是隐式传递的;
  2. 方法可以操作类内部的数据(请记住,对象是类的实例化–类定义了一个数据类型,而对象是该数据类型的一个实例化)

以上只是简略的解释,忽略了作用域之类的问题。

Raffi Khatchadourian 对 Andrew Edgecombe 答案的补充:

对于 1),你应当再加上“ 方法在 C++ 中是被称为成员函数”。因此,在 C++ 中的“方法”和“函数”的区别,就是“成员函数”和“函数”的区别。此外,诸如 Java 一类的编程语言只有“方法”。所以这时候就是“静态方法”和“方法”直接的区别。

对于2),你应当补上方法可以操作已在类中声明的私有实例(成员)数据。其他代码都可以访问公共实例数据。

Aaron 的回答:

方法和对象相关;

函数和对象无关。

Java中只有方法,C中只有函数,而C++里取决于是否在类中。

posted @   xiaoxinZard  阅读(355)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示