精华内容
下载资源
问答
  • 都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了。 但每一个函数都有一个特殊的参数arguments,利用...

     都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了。

    但每一个函数都有一个特殊的参数arguments,利用它可以实现方法的重载。

    例如:

     function Add(firstnumber,sencondnumber) {   
           return firstnumber+sencondnumber;       
        }

    只能处理两个参数,如果有多个参数,或者没有参数,一个参数的情况都是处理不了的。如果没有传递参数,则firstnumber,sencondnumber都是未定义的,如果传递了一个参数,就相当于只给firstnumber赋值了,sencondnumber依然是未定义。相反如果传递了多于两个的参数,则相当于firstnumber,sencondnumber都赋值了,虽然还有其他的参数,但处理时都忽略掉了。如果能获取其他的参数,自然就可以处理了。此时应该就可以想到函数的特殊参数arguments,这个包含了传递给函数的所有参数,利用它就可以实现方法重载的效果。

    以上的方法修改如下:

     function Add(firstnumber,sencondnumber) {   
           if (arguments.length == 0)//没有传递参数
    	   {
    	     return null;
    	   }
             else if (arguments.length == 1) {//传递的是一个参数
                   return firstnumber;//也可以写为 return arguments[0];
                } 
    			else if(arguments.length == 2)//传递的是两个参数
    			{
    			
    			  return firstnumber+sencondnumber;//也可以写为 return arguments[0]+arguments[1];
    			}
    			
    			else {
                  var total=0;
                    for (var i = 0; i < arguments.length; i++) {
                       total=total+arguments[i]
                    }
    				return total;
                } 
           
        }
     当然这种方法的弊端就是参数的顺序不能打乱,如果函数实现依赖于参数的顺序,就必须进行特殊处理,例如传递null来占位。

    由于传递给函数的参数是严格按照定义函数的顺序给每一个参数赋值的,如果只想给第二个参数赋值,则必须传递两个参数,否则实际上传递的值赋值给了第一个参数,并没有赋值给第二个参数。

    例如只想给sencondnumber传值,但不想给firstnumber传值,必须这样调用Add(null,2)(当然函数内部必须处理传递特殊值的情况),如果这样调用Add(2),其实是给firstnumber传值了,相当于调用了传递了一个参数的情况。


    展开全文
  • 都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了。 但每一个函数都有一个特殊的参数arguments,利用...
  • Java方法的重载参数

    2020-07-12 16:43:12
    Java方法02:方法的重载及参数 ...方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法如果匹配失败,则编译器报错。 案例: public class Demo03 { public static voi

    Java方法的重载及参数

    方法重载

    重载就是在一个类中,有相同的函数名称,但形参不同的函数。

    方法重载的规则:

    • 方法名称必须相同。
    • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。
    • 方法的返回类型可以相同也可以不相同。
    • 仅仅返回类型不同不足以成为方法的重载。

    实现理论:

    方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。

    案例:

    public class Demo03 {
        public static void main(String[] args) {
    
            int max = max(10,20);
            System.out.println(max);
    
            double max1 = max(10.0,20.0);
            System.out.println(max1);
        }
    
        //整数比大小
        public static int max(int num1,int num2){
    
            int result = 0;
    
            if (num1 == num2){
                System.out.println("num1=num2");
                return 0;//终止方法
            }
            if (num1 > num2){
                result =  num1;
            }else {
                result = num2;
            }
            return result;
        }
    
        //小数比大小
        public static double max(double num1,double num2){
    
            double result = 0;
    
            if (num1 == num2){
                System.out.println("num1=num2");
                return 0;//终止方法
            }
            if (num1 > num2){
                result =  num1;
            }else {
                result = num2;
            }
            return result;
        }
    }
    

    命令行传参

    有时候你希望运行一个程序的时候再传递给它消息。这要靠传递命令行参数给main()方法实现。

    public class CommandLine{
        public static void main(String args[]){
            for(int i=0;i<args.length;i++){
                System.out.println("args[" + i +"]:" + args[i]);
            }
        }
    }
    

    可变参数

    JDK1.5开始,Java支持传递同类型的可变参数给一个方法。

    在方法声明中,在指定参数类型后加一个省略号 (…)。

    一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

    案例:

    public class Demo05 {
        public static void main(String[] args) {
        
            Demo05 demo05 = new Demo05();
            demo05.test(1,2,3,4,5);
        }
        
        public void test(int... i){
            System.out.println(i);
        }
    }
    
    展开全文
  • 概念:在同一个类,允许存在一个以上同名方法,只要它们的参数个数或者参数类型不同即可。 特点:与返回值类型无关,只看参数列表,且参数列表必须不相同参数个数或参数类型)。 个体可变参数 public class ...

    方法的重载

    概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
    特点:与返回值类型无关,只看参数列表,且参数列表必须不相同(参数个数或参数类型)。

    个体可变参数

    public class Person{
    //用数组的方式传递可变个数的参数
    //如果没有参数,就要定义一个空数组或null
         public void printInfo1(String[] args){
              for(int i = 0;i < args.length;i++){
                 System.out.println(args[i]);
                 }
     //用java特有的...的方式来传递可变个数的参数。这种参数的使用和数组方式相同
     //如果没有参数就可以不填
         public void printInfo2(String... args){
             for(int i = 0;i < args.length;i++){
                 System.out.println(args[i]);
                 }
              }
    }
    
    //测试
    public class Test{
        public static void main(String[] args){
           Person p = new Person();
           //用数组
           String[] ss = new String[]{"..."};
           p.printInfo1(ss);
           p.printInfo1(null);//要填null
           //用...
           p.printInfo2("...");
           String[] ss2 = new String[]{"..."};
           p.printInfo2(ss2);
           p.printInfo2();//可以不填
           }
      }
    

    ”:可以代表0到多个参数。
    注意:如果一个方法有多个形参,可变形参(…)一定要放到所有的参数最后。例:printInfo2(int a,String... args)

    方法的参数传递

    JVM的内存模型:
    相当于一个间接寻址

    在这里插入图片描述

    方法的参数传递之基本数据类型

    方法的参数传递之引用对象

    在这里插入图片描述
    总结:
    方法的参数传递:
    1.如果方法的形参是基本数据类型,那么实参(实际的数据)向形参传递参数时,就是直接传递值,把实参的值复制给形参。
    2.如果方法的形参是对象,那么实参(实际的对象),向形参传递参数时,也是把值给形参,这个值是实参在栈内存中的值,也就是引用对象在堆内存中的地址。

    基本数据类型都是保存在栈内存中,引用对象在栈内存中保存的是引用对象的地址,那么方法的参数传递时传递值(是变量在栈内存的当中的值)。

    关键字 ------ package
    package语句指明该文件中定义的类所在的包(和文件夹一个性质)。
    package 顶层包名.子包名;
    包对应于文件系统目录,package语句中,用“.”来指明包(目录)的层次。
    包通常用小写单词,类名首字母通常大写。
    包可以有多级,也就是说包下可以有包和文件,例,com包下的cn包下的test包,com.cn.test

    关键字 ------ import
    为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*)。import语句告诉编译器到哪里去寻找类。
    import 包名[.子类名…].<类名| *>
    例:import p1.Test;//import p1.*;表示引用p1包中的所有类

    展开全文
  • 都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了。 但每一个函数都有一个特殊的参数arguments,...

     都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了。

    但每一个函数都有一个特殊的参数arguments,利用它可以实现方法的重载。

    例如:

     

     function Add(firstnumber,sencondnumber) {   
           return firstnumber+sencondnumber;       
        }


    只能处理两个参数,如果有多个参数,或者没有参数,一个参数的情况都是处理不了的。如果没有传递参数,则firstnumber,sencondnumber都是未定义的,如果传递了一个参数,就相当于只给firstnumber赋值了,sencondnumber依然是未定义。相反如果传递了多于两个的参数,则相当于firstnumber,sencondnumber都赋值了,虽然还有其他的参数,但处理时都忽略掉了。如果能获取其他的参数,自然就可以处理了。此时应该就可以想到函数的特殊参数arguments,这个包含了传递给函数的所有参数,利用它就可以实现方法重载的效果。

     

    以上的方法修改如下:

     function Add(firstnumber,sencondnumber) {   
           if (arguments.length == 0)//没有传递参数
    	   {
    	     return null;
    	   }
             else if (arguments.length == 1) {//传递的是一个参数
                   return firstnumber;//也可以写为 return arguments[0];
                } 
    			else if(arguments.length == 2)//传递的是两个参数
    			{
    			
    			  return firstnumber+sencondnumber;//也可以写为 return arguments[0]+arguments[1];
    			}
    			
    			else {
                  var total=0;
                    for (var i = 0; i < arguments.length; i++) {
                       total=total+arguments[i]
                    }
    				return total;
                } 
           
        }

     当然这种方法的弊端就是参数的顺序不能打乱,如果函数实现依赖于参数的顺序,就必须进行特殊处理,例如传递null来占位。

     

    由于传递给函数的参数是严格按照定义函数的顺序给每一个参数赋值的,如果只想给第二个参数赋值,则必须传递两个参数,否则实际上传递的值赋值给了第一个参数,并没有赋值给第二个参数。

    例如只想给sencondnumber传值,但不想给firstnumber传值,必须这样调用Add(null,2)(当然函数内部必须处理传递特殊值的情况),如果这样调用Add(2),其实是给firstnumber传值了,相当于调用了传递了一个参数的情况。


     

    转载于:https://www.cnblogs.com/jiangu66/p/3230794.html

    展开全文
  • 方法重载与可变个数形参 方法重载 同一个类中的不同方法依靠方法名和形参列表来相互区分.当方法相同,形参列表名不同时,成为方法重载.方法的重载不能依靠返回类型或依靠形参变量名来区分,而仅依靠方法名和形参...
  • #1.方法的重载、 * 重载就是在一个类,有相同的函数名称,但形参... * 方法名称相同时,编译器会根据调用方法的参数个数,参数类型等去逐个匹配,已选择对应的方法如果匹配失败,则编译器报错 * 示例 package
  • (1)静态方法与实例方法静态方法只能够使用类的静态成员,只能由类调用。(2)方法重载2个以上的方法所取的... 参数个数必须不同(如果参数个数相同,那么类型必须不同) 3. 参数类型必须不同 4. 和返回值无关...
  • 前面内容已经学过了构造...方法的重载就是在同一个类允许同时存在一个以上同名方法,只要这些方法的参数个数或类型不同即可。 例: public class Test8 { public static int add(int a,int b){ return a+b;
  • 在同一个类方法相同,但方法的参数类型或参数个数不同,就构成了方法重载。 这里要注意一个问题,如果方法相同,参数类型和个数都相同,返回值类型不同,这不是方法重载,同时编译也会报错。 1.使用一个名...
  • 方法的重载

    2021-01-11 14:49:14
    方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配, 已选择对应的方法如果匹配失败,则编译器报错 。 eg:int max = max(10, 20,30,40);//没有定义4个参数的方法,你却想调用,
  • 方法参数类型、个数、顺序至少有一个不同3.方法的返回类型可以不同,因为方法重载和返回类型没有任何关系4.方法的修饰符可以不同,因为方法重载和修饰符没有任何关系5.方法重载只出现在同一个类中方法的覆盖...
  • Java程序中方法的重载

    2020-07-29 08:45:36
    在Java程序如果同一个类存在两个方法同名,方法的签名(参数个数、参数类型、类型排列次序)上也一样,将无法编译通过。 但在Java多个方法重名是允许,只要保证方法签名不同即可,这种特性称为方法重载...
  • Java中方法的重载

    2016-01-19 10:32:22
     (1)重载的方法参数列表各不相同  (2)重载方法的返回值类型、访问限制没有特别要求,可以相同也可以不同  (3)重载方法的匹配:  当方法的参数均为基本类型时只检查参数类型和个数是否匹配。在方法调用...
  • 方法的重载是指方法相同,参数类型,参数个数,参数顺序至少有一个不相同的一类方法。在方法内部不能使用private、protected、public定义局部变量。被final修饰形参不能修改其引用存在值。 注意:1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 680
精华内容 272
关键字:

重载的方法中如果参数个数相同