Java 方法介绍

Java 中的方法,是为执行一个操作而组合在一起的语句组。如果一个操作会被多次执行,则可以将该操作定义成一个方法,执行该操作的时候调用方法即可。

方法的语法结构

方法包括方法头和方法体,方法头又可以分成修饰符、返回值类型、方法名和参数列表,因此方法包括 5 个部分。

  1. 修饰符:修饰符是可选的,告诉编译器如何调用该方法。
  2. 返回值类型:方法可以返回一个值,此时返回值类型是方法要返回的值的数据类型。方法也可以没有返回值,此时返回值类型是 void。
  3. 方法名:方法的实际名称。
  4. 参数列表:定义在方法头中的变量称为形式参数或参数,简称形参。当调用方法时,需要给参数传递一个值,称为实际参数,简称实参。参数列表指明方法中的参数类型、次序和数量。参数是可选的,方法可以不包含参数。
  5. 方法体:方法体包含具体的语句集合。

方法名和参数表共同构成方法签名。

参数的值传递

调用方法时,需要提供实参,实参必须与形参的次序相同,称为参数顺序匹配。实参必须与方法签名中的形参在次序上和数量上匹配,在类型上兼容,兼容的意思是不需要显性声明类型转换,即类型相同或者类型转换为拓宽类型。

在调用带参数的方法时,实参的值赋给形参,称为值传递。Java 中只有值传递,无论形参在方法中如何改变,实参不受影响。

当参数类型是基本数据类型时,传递的是实参的值,因此不能对实参进行修改。

当参数类型是对象时,传递的是对象的引用,此时可以对实参引用的对象进行修改,但是不能让实参引用新的对象。

方法的重载

方法的重载是指在同一个类中的多个方法有相同的名称,但是方法签名不同,编译器能够根据方法签名决定调用哪个方法。由于方法签名由方法名和参数表共同构成,因此方法的重载等同于多个方法有相同的名称和不同的参数列表。

方法的重载可以增加程序的可读性,执行相似操作的方法应该有相同的名称。

关于方法的重载,需要注意以下两点。

  1. 方法签名只由方法名和参数列表共同构成,因此被重载的方法必须具有不同的参数列表,而不能通过不同的修饰符和返回值类型进行方法的重载。
  2. 如果一个方法调用有多个可能的匹配,则编译器会调用最合适的匹配方法,如果编译器无法判断哪个方法最匹配,则称为歧义调用,会导致编译错误。

下面用两段示例代码说明方法的重载。

java 复制代码
public class Main {
    public static void main(String[] args) {
        getSum(1, 2);
        getSum(1.5, 2.5);
        getSum(5, 5.5);
    }

    public static void getSum(int num1, int num2) {
        System.out.println(num1 + "+" + num2 + "=" + (num1 + num2));
    }

    public static void getSum(double num1, double num2) {
        System.out.println(num1 + "+" + num2 + "=" + (num1 + num2));
    }
}
java 复制代码
public class Main {
    public static void main(String[] args) {
        getSum(1, 2);// 歧义调用,编译错误
    }

    public static void getSum(int num1, double num2) {
        System.out.println(num1 + "+" + num2 + "=" + (num1 + num2));
    }

    public static void getSum(double num1, int num2) {
        System.out.println(num1 + "+" + num2 + "=" + (num1 + num2));
    }
}

在示例 1 中,getSum(1, 2) 调用的是参数为两个 int 型的方法,getSum(1.5, 2.5) 和 getSum(5, 5.5) 调用的是参数为两个 double 型的方法,因此运行上述代码得到的输出结果是:

1+2=3

1.5+2.5=4.0

5.0+5.5=10.5

在示例 2 中,getSum(1, 2) 可以同时匹配两个方法,任何一个方法都不比另一个方法更匹配,因此为歧义调用,导致编译错误。

相关推荐
摇滚侠36 分钟前
Maven 入门+高深 单一架构案例 54-59
java·架构·maven·intellij-idea
VidDown1 小时前
Webhook 调试器:让第三方回调“原形毕露”
java·开发语言·javascript·编辑器·postman
折哥的程序人生 · 物流技术专研1 小时前
Java 23 种设计模式:从踩坑到精通 | 原型模式 —— 克隆对象,深拷贝与浅拷贝的坑你踩过吗?
java·设计模式·架构·原型模式·单一职责原则
装不满的克莱因瓶1 小时前
基于 OpenResty 扩展开发实现动态服务注册与发现能力
java·开发语言·架构·openresty
程序员小羊!1 小时前
06Java 异常机制与常用类
java
weixin_523185322 小时前
Java基础知识总结(四):引用数据类型与参数传递机制
java·开发语言·python
宸津-代码粉碎机2 小时前
Spring AI企业级实战|从RAG优化到Agent多工具调度
java·大数据·人工智能·后端·python·spring
噢,我明白了3 小时前
QueryWrapper的使用
java
Chase_______3 小时前
【Java基础 | 15】集合框架(中):Set、HashSet、TreeSet 与哈希表
java·windows·散列表
摇滚侠3 小时前
Maven 入门+高深 微服务案例 122-125
java·微服务·maven