• 方法重载和参数传递


    方法重载和参数传递

    方法相同:
    在 Java 语言中,方法相同的概念和其它程序设计语言不尽相同,Java
    语言中的方法相同指方法名称和参数列表都相同,其中参数列表相同指参数个
    数、参数类型和参数排列顺序等相同,参数名称可以不相同。相同的方法访问控
    制符、返回值类型可以不相同。
    以下是一下相同的方法:
    public void test(int a,double[] d)
    private int test(int i,double[] d1)
    在同一个类内部,不能声明相同的方法,否则将出现语法错误。


    方法重载:

    方法重载(overload)是一种语法现象,指在一个类内部出现了多个方
    法名相同,但是参数列表不同的方法。
    方法重载的作用是将功能相同,但是参数列表不同的方法采用相同的
    方法名称,便于程序员使用。根据方法相同的概念,重载的方法都是不相同的方
    法。
    在 Java 提供的 API 中,大量应用重载的概念,方便程序员对于系统功
    能方法的实际使用。
    恰当的使用重载,可以增强代码的可维护性。
    以下是方法重载的示例:
    public void a(int a){}
    public int a(){}
    public void a(int a,String s){}
    在以上示例方法中,方法的名称都是 a,而参数列表却各不相同,这
    些方法实现了重载的概念。但是仔细观察可以发现,这些重载的方法的返回值不
    尽相同,因为返回值类型和方法的重载无关。
    通常情况下,重载的方法在访问控制符、修饰符和返回值类型上都保
    持相同,这个不是语法的要求,只是将这些制作成一致以后,便于实际使用。

     参数传递
    在方法调用时,需要根据方法声明传入适当的参数,通过每次调用方

    法时传参,极大的增强了方法的统一性,避免了方法内部功能代码的重复。但是
    在实际传递参数时,如果在方法内部修改了参数的值,则调用时使用的变量是否
    发生改变呢?
    例如如下代码:
    /**
    * 参数传递代码示例
    */
    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)
    按址传递指每次传递参数时,把参数在内存中的存储地址传递到方法内部,在方
    法内部通过存储地址改变对应存储区域的内容。由于在内存中固定地址的值只有
    一个,所以当方法内部修改了参数的值以后,参数原始的值发生改变。
    说明:使用该方式传递的参数,在方法内部修改参数的值时,参数原始的值也发
    生改变。
    在 Java 语言中,对于那些数据类型是按值传递,那些数据类型是按址
    传递都作出了硬性规定,如下所示:
    l 按值传递的数据类型:八种基本数据类型和 String
    l 按址传递的数据类型:除 String 以外的所有复合数据类型,包括数组、类和
    接口
    按照这里的语法规则,则上面的代码中变量 m 的类型是 int,属于按值传递,所
    以在方法内部修改参数的值时 m 的值不发生改变,而 a 的类型是数组,属于按址
    传递,所以在方法内部修改参数的值时,原始的值发生了改变。
    按值传递和按址传递在实际使用时,需要小心,特别是在方法内部需要修改参数
    的值时。有些时候,对于按值传递的参数需要修改参数的值,或者按址传递时,
    不想修改参数的值,下面是实现这两种方式时的示例代码。
    按值传递时通过返回值修改参数的值:
    /**
    * 按值传递的类型通过返回值修改参数的值
    */
    public class TransferValueDemo1 {
    public static void main(String[] args) {
    int m = 10;
    m = test1(m); //手动赋值
    System.out.println(m);
    }
    public static int test1(int n){
    n = 15;
    return n;
    }
    }
    在该示例代码中,通过把修改以后的参数 n 的值返回,来为变量 m 赋
    值,强制修改按值传递参数的值,从而达到修正参数值的目的。
    按址传递时通过重新生成变量避免修改参数的值:
    /**
    * 按址传递时通过重新生成变量避免修改参数的值
    */
    public class TransferValueDemo2 {
    public static void main(String[] args) {
    int[] a = {1,2,3};
    test2(a);
    System.out.println(a[0]);
    }
    public static void test2(int[] m){
    int[] n = new int[m.length];
    for(int i = 0;i <
    m.length;i++){
    n[i] = m[i];
    }
    n[0] = 10;
    }
    }
    在该示例代码中,通过在方法内部创新创建一个数组,并且把传入数
    组中每个参数的值都赋值给新创建的数组,从而实现复制数组内容,然后再修改
    复制后数组中的值时,原来的参数内容就不发生改变了。
    这里系统介绍了 Java 语言中参数传递的规则,深刻理解这些规则将可
    以更加灵活的进行程序设计。例如使用复合数据类型按址传递的特性可以很方便
    的实现多参数的返回,代码示例如下:
    public int test3(int[] m,int[] n){……}
    则该方法中,实际上返回了三种值,一个 int 的返回值,数组 m 的值,
    数组 n 的值,这只是参数传递的一种基本使用,在 JDK 提供的 API 文档中也大量
    的存在该方法。
     
    本部分系统的介绍了方法的概念,方法的语法,方法的调用以及和方
    法有关的一些其它语法知识,深刻理解这些语法是进行程序设计的基础。

  • 相关阅读:
    【Caffe代码解析】Layer网络层
    Codeforces Round #276 (Div. 2)
    深入一点 让细节帮你和Fragment更熟络
    C-IDE使用指南
    14.11 隔离事务
    【工具类】遍历扫描目录下全部文件并列出
    Cocos2d-x源代码解析(1)——地图模块(1)
    【Android实战】----基于Retrofit实现多图片/文件、图文上传
    RabbitMQ基本使用
    Spring 4 中重定向RedirectAttributes的使用
  • 原文地址:https://www.cnblogs.com/bocai2010000/p/6744856.html
Copyright © 2020-2023  润新知