java重载java方法的重载参数问题

js中方法重载如何实现?以及函数的参数问题
js中方法重载如何实现?以及函数的参数问题
js中没有办法直接实现方法重载,但每一个函数都有一个特殊的参数arguments,利用它可以实现方法的重载,具体示例如下
  都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了。
但每一个函数都有一个特殊的参数arguments,利用它可以实现方法的重载。
复制代码 代码如下:
function Add(firstnumber,sencondnumber) {
return firstnumber+
只 能处理两个参数,如果有多个参数,或者没有参数,一个参数的情况都是处理不了的。如果没有传递参数,则 firstnumber,sencondnumber都是未定义的,如果传递了一个参数,就相当于只给firstnumber赋值 了,sencondnumber依然是未定义。相反如果传递了多于两个的参数,则相当于firstnumber,sencondnumber都赋值了,虽 然还有其他的参数,但处理时都忽略掉了。如果能获取其他的参数,自然就可以处理了。此时应该就可以想到函数的特殊参数arguments,这个包含了传递 给函数的所有参数,利用它就可以实现方法重载的效果。
以上的方法修改如下:
复制代码 代码如下:
function Add(firstnumber,sencondnumber) {
if (arguments.length == 0)//没有传递参数
else if (arguments.length == 1) {//传递的是一个参数
//也可以写为 return arguments[0];
else if(arguments.length == 2)//传递的是两个参数
return firstnumber+//也可以写为 return arguments[0]+arguments[1];
var total=0;
for (var i = 0; i & arguments. i++) {
total=total+arguments[i]
当然这种方法的弊端就是参数的顺序不能打乱,如果函数实现依赖于参数的顺序,就必须进行特殊处理,例如传递null来占位。
由于传递给函数的参数是严格按照定义函数的顺序给每一个参数赋值的,如果只想给第二个参数赋值,则必须传递两个参数,否则实际上传递的值赋值给了第一个参数,并没有赋值给第二个参数。
例如只想给sencondnumber传值,但不想给firstnumber传值,必须这样调用Add(null,2)(当然函数内部必须处理传递特殊值的情况),如果这样调用Add(2),其实是给firstnumber传值了,相当于调用了传递了一个参数的情况。
&&&主编推荐
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
港口与航道工程建设工程法规及相关知识建设工程经济考试大纲矿业工程市政公用工程通信与广电工程
操作系统汇编语言计算机系统结构人工智能数据库系统微机与接口
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
Powerpoint教程WPS教程
电子政务客户关系管理首席信息官办公自动化大数据
职称考试题目
就业指导签约违约职业测评
招生信息考研政治
网络安全安全设置工具使用手机安全
3DMax教程Flash教程CorelDraw教程Director教程
Dreamwaver教程HTML教程网站策划网站运营Frontpage教程
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
互联网电信IT业界IT生活
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
组织运营财务资本
视频播放文件压缩杀毒软件输入法微博
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-您还未登陆,请登录后操作!
方法重载时,一个方法接收Object类型参数,另一个接收String类型参数,调用方法时传入参数为null,请问他会调用哪一个方法?为什么?结果我是知道的,我只想知道why?
您的举报已经提交成功,我们将尽快处理,谢谢!
说简单一点吧,public void add(Object o) 如此定义就是表明这个实参可以填入任何的类型,不管是java自己定义的类型还是你自己定义的类型
大家还关注您现在的位置:&&>>&&>>&&>>&&>>&正文
Java编程那些事儿55―方法重载和参数传递
&&& 7.5 方法相同
&&& 在语言中,方法相同的概念和其它程序设计语言不尽相同,Java语言中的方法相同指方法名称和参数列表都相同,其中参数列表相同指参数个数、参数类型和参数排列顺序等相同,参数名称可以不相同。相同的方法访问控制符、返回值类型可以不相同。
&&& 以下是一下相同的方法:
          public void test(int a,double[] d)          private int test(int i,double[] d1)
&&& 在同一个类内部,不能声明相同的方法,否则将出现语法错误。
&&& 7.6 方法重载
&&& 方法重载(overload)是一种语法现象,指在一个类内部出现了多个方法名相同,但是参数列表不同的方法。
&&& 方法重载的作用是将功能相同,但是参数列表不同的方法采用相同的方法名称,便于程序员使用。根据方法相同的概念,重载的方法都是不相同的方法。
&&& 在Java提供的API中,大量应用重载的概念,方便程序员对于系统功能方法的实际使用。
&&& 恰当的使用重载,可以增强代码的可维护性。
&&& 以下是方法重载的示例:
          public void a(int a){}          public int a(){}          public void a(int a,String s){}
&&& 在以上示例方法中,方法的名称都是a,而参数列表却各不相同,这些方法实现了重载的概念。但是仔细观察可以发现,这些重载的方法的返回值不尽相同,因为返回值类型和方法的重载无关。
&&& 通常情况下,重载的方法在访问控制符、修饰符和返回值类型上都保持相同,这个不是语法的要求,只是将这些制作成一致以后,便于实际使用。
&&& 7.7 参数传递
&&& 在方法调用时,需要根据方法声明传入适当的参数,通过每次调用方法时传参,极大的增强了方法的统一性,避免了方法内部功能代码的重复。但是在实际传递参数时,如果在方法内部修改了参数的值,则调用时使用的变量是否发生改变呢?
&&& 例如如下代码:
          /*** 参数传递代码示例*/public class TransferValueDemo {               public static void main(String[] args) {                    int m = 10;                    int[] a = {1,2,34};                    test(m,a);                    System.out.println(m);                    System.out.println(a[0]);               }                   public static void test(int n,int[] t){                    n = 0;                    t[0] = 123;               }}
&&& 则执行该程序以后,程序的输出结果是:10 123.则在调用test方法时,同样都是传入参数,为什么变量m的值未改变,而a[0]的值发生了改变呢?下面就来说明该问题。
&&& 在参数传递时,一般存在两种参数传递的规则,在Java语言中也是这样,这两种方式依次是:
&&& l 按值传递(by value)
&&& 按值传递指每次传递参数时,把参数的原始数值拷贝一份新的,把新拷贝出来的数值传递到方法内部,在方法内部修改时,则修改的时拷贝出来的值,而原始的值不发生改变。
&&& 说明:使用该方式传递的参数,参数原始的值不发生改变。
&&& l 按址传递(by address)
&&& 按址传递指每次传递参数时,把参数在内存中的地址传递到方法内部,在方法内部通过地址改变对应存储区域的内容。由于在内存中固定地址的值只有一个,所以当方法内部修改了参数的值以后,参数原始的值发生改变。
【责编:Chuan】
?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]
相关产品和培训
 友情推荐链接
 认证培训
 专题推荐
 ? ? ? ? ? ? ? ? ? ?
 今日更新
?&?&?&?&?&?&?&?&?&?&
 社区讨论
 博客论点
 频道精选
 Java 频道导航可变参数重载解释不通的现象_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:282,164贴子:
可变参数重载解释不通的现象收藏
class test{ static void f (float a) { System.out.println(&float&); } static void f (Character a) { System.out.println(&Character&); }}public class Untitled{ public static void main(String[] args) { test.f ('a') ; }}如上的代码,编译没有问题,执行结果为:float//也就是说,编译器认为'a'更适合float而如下代码:class test{ static void f (float... a) { System.out.println(&float&); } static void f (Character... a) { System.out.println(&Character&); }}public class Untitled{ public static void main(String[] args) { test.f ('a') ; }}则提示编译错误,说参数'a'不明确,也就是说编译器分不清改传给哪个方法,但是上面的代码表示编译器认为比起Character,参数'a'更适合float,但是为什么到了可变参数的重载就说传参模糊,不知道该传给谁了呢?
character改为char
继续顶上来
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或当前访客身份:游客 [
当前位置:
public class Test1 {
public void test(Object o){
System.out.println(&o&);
public void test(String s){
System.out.println(&s&);
public static void main(String[] args) {
new Test1().test(null);
请问这个程序的执行结果为&s&,求解释!!!
共有5个答案
<span class="a_vote_num" id="a_vote_num_
String比Object更“特定”。具体可以看Java语言规范(JLS)
Java语言规范(JLS)15.12节 方法调用表达式。
JLS 15.12.2节编译期确定方法签名分为以下几个步骤:
1)不允许拆装箱及使用可变元数方法进行重载解析,即可由类型宽化(扩展基本转换、扩展引用转换)确定的匹配元数方法。(确保较老语言版本中任何有效的方法调用不会因为引入隐式拆装箱、可变元数方法而被当成不明确的)
2)允许拆装箱但不允许使用可变元数方法进行重载解析,即可由方法调用转换确定的匹配元数方法。(确保如果存在一个可用固定元数方法,可变元数方法就不会被调用)
3)允许拆装箱及使用可变元数方法进行重载解析。
以上每个步骤中,如果存在多个符合的方法,则需在它们中选择最特定的方法。
JLS 5.3节方法调用转换规定可包括以下转换:
同一性转换:如int-&int, Object-&Object
扩展基本转换:如short-&int
扩展引用转换:如String-&Object
装箱转换,可后接扩展引用转换:如int-&Integer-&Number
拆箱转换,可后接扩展基本转换:如Short-&short-&int
<span class="a_vote_num" id="a_vote_num_
这个很简单null被看成字符串 所以系统优先调用 String s &这个方法
<span class="a_vote_num" id="a_vote_num_
坑爹~这道题要是选作面试题。。。。
--- 共有 1 条评论 ---
被你猜对了,这道题就是我面试时的笔试题。。。
(3年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
String的地位是相当高
<span class="a_vote_num" id="a_vote_num_
有什么技术问题吗?
haopeng...的其他问题
类似的话题}

我要回帖

更多关于 java 方法重载 返回值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信