Java方法的重载、可变个数形参、方法参数的值传递机制

简介: Java方法的重载、可变个数形参、方法参数的值传递机制

说完了类和对象,我们再对类的成员中的方法做一个详细的讲解

方法的定义本身比较简单,我在这里就不说了,关于上面提到的类和对象,大家可以参考我上一篇文章:面向对象有那么难吗?一个月搞定面向对象——第一周(1)

一、方法的重载:

什么是重载

我们在编程时,可能有些时候需要用同一个方法名,但是在不同的地方用的时候传递的参数类型以及数量可能不同,里面的内容可能不同,但是方法名是相同的。
那么我们就引入的重载的定义:在同一个类中,允许存在一个以上的同名方法,只要他们的参数类型或数量不同即可。

重载的特点

方法的重载与返回值类型无关,但参数列表必须不同(参数类型以及数量)。调用时,根据调用的方法参数列表的不同来区别。

我们来举个栗子~

public class OverloadExer {
  //1. 如下的三个方法构成重载
  public void mOL(int i){
    System.out.println(i * i);
  }
  public void mOL(int i,int j){
    System.out.println(i * j);
  }
  public void mOL(String s){
    System.out.println(s);
  }
  //2.如下的三个方法构成重载
  public int max(int i,int j){
    return (i > j)? i : j;
  }
  public double max(double d1,double d2){
    return (d1 > d2)? d1 : d2;
  }
  public double max(double d1,double d2,double d3){
    double max = (d1 > d2)? d1 : d2;
    return (max > d3)? max : d3;
  }

**

二、可变个数形参

**

JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定

义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可 变的实参。

//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量 
public static void test(int a ,String[] books); 
//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量 
public static void test(int a ,String…books);

可变个数形参的声明方法:方法名(参数的类型名…参数名)

可变个数形参能识别的参数可以是0个,1个或多个,也就是说,没有参数也可以调用这个方法。

说了这个概念,那究竟要怎么用呢?

我们在代码中分析:

public class MethodArgsTest {
  public static void main(String[] args) {
    MethodArgsTest test = new MethodArgsTest();
    test.show(12);
//    test.show("hello");
//    test.show("hello","world");
//    test.show();
    test.show(new String[]{"AA","BB","CC"});
  }
  public void show(int i){
  }
  public void show(String s){
    System.out.println("show(String)");
  }
  public void show(String ... strs){
    System.out.println("show(String ... strs)");
    for(int i = 0;i < strs.length;i++){
      System.out.println(strs[i]);
    }
  }
}

三、方法参数的值传递机制

若形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参

若形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

下面我们分别用两端代码来解释设两个机制:

//这里我们用交换两个数的程序来说明这一点
//首先是基本数据类型
public class ValueTransferTest1 {
  public static void main(String[] args) {
    int m = 10;
    int n = 20;
    System.out.println("m = " + m + ", n = " + n);
    //交换两个变量的值的操作
//    int temp = m ;
//    m = n;
//    n = temp;
    ValueTransferTest1 test = new ValueTransferTest1();
    test.swap(m, n);
    System.out.println("m = " + m + ", n = " + n);
  }
  public void swap(int m,int n){
    int temp = m ;
    m = n;
    n = temp;
  }
}

下面是引用数据类型

public class ValueTransferTest2 {
  public static void main(String[] args) {
    Data data = new Data();
    data.m = 10;
    data.n = 20;
    System.out.println("m = " + data.m + ", n = " + data.n);
    //交换m和n的值
//    int temp = data.m;
//    data.m = data.n;
//    data.n = temp;
    ValueTransferTest2 test = new ValueTransferTest2();
    test.swap(data);
    System.out.println("m = " + data.m + ", n = " + data.n);
  }
  public void swap(Data data){
    int temp = data.m;
    data.m = data.n;
    data.n = temp;
  }
}
class Data{
  int m;
  int n;
}

大家可以好好体会一下这两段代码,这些应该可以帮助理解数据类型的值传递机制!

相关文章
|
1月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
221 18
|
1月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
196 4
|
1月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
262 5
|
2月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
134 11
|
2月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
3月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
370 0
|
3月前
|
存储 Java 数据处理
Java映射操作:深入Map.getOrDefault与MapUtils方法
结合 `getOrDefault`方法的简洁性及 `MapUtils`的丰富功能,Java的映射操作变得既灵活又高效。合理地使用这些工具能够显著提高数据处理的速度和质量。开发人员可以根据具体的应用场景选择适宜的方法,以求在性能和可读性之间找到最佳平衡。
176 0
|
3月前
|
缓存 人工智能 NoSQL
Java中实现Token设置过期时间的方法
本文介绍了在Java应用中实现Token设置过期时间的多种方法,包括使用JWT和Redis缓存,并结合定时任务清理过期Token,以提升系统安全性与用户隐私保护。
433 0
|
3月前
|
算法 Java 开发者
Java 项目实战数字华容道与石头迷阵游戏开发详解及实战方法
本文介绍了使用Java实现数字华容道和石头迷阵游戏的技术方案与应用实例,涵盖GUI界面设计、二维数组操作、游戏逻辑控制及自动解法算法(如A*),适合Java开发者学习游戏开发技巧。
277 46
|
4月前
|
安全 Java API
Java 集合高级应用与实战技巧之高效运用方法及实战案例解析
本课程深入讲解Java集合的高级应用与实战技巧,涵盖Stream API、并行处理、Optional类、现代化Map操作、不可变集合、异步处理及高级排序等核心内容,结合丰富示例,助你掌握Java集合的高效运用,提升代码质量与开发效率。
253 0
下一篇
oss云网关配置