广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名)
  • 887
分享到

Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名)

2024-04-02 19:04:59 887人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录一、方法(Method)概念二、可变参数(Variable)三、方法的参数传递问题1. 基本数据类型2. 引用数据类型四、方法签名(Method Signature)五、方法的重

一、方法(Method)概念

  •  1、Java 中的方法就是其他编程语言中的函数(Function)
  •  2、方法的定义格式:

  • 访问修饰符有4种:public、protected、default、private【后期会详细说明】
  • 返回值类型可能是8大基本数据类型、引用类型或无返回值(void
  • 方法名需符合标识符命名规范、方法名需见名知意、方法名需是小驼峰(类名是大驼峰)
  • 参数列表是该方法需要调用者传入的值(包括参数类型和参数名)【后期会详细说明】
  • 方法体中才可编写 Java 语句(并不是所有花括号中都是方法体:如类定义的花括号中不是方法体)

下面是方法体代码案例:

public class MethodBody {

    // 1.代码块
    {
        System.out.println("【{}】是方法体");
    }

    // 2.静态代码块
    static {
        System.out.println("【static {}】是方法体");
    }

    // 3.方法
    public void run(int age) {
        System.out.println("方法的花括号中是方法体");

        // 4.if
        if (age == 18) {
            System.out.println("if 语句的花括号中是方法体");
        }

        // 5.for
        for (int i = 0; i < age; i++) {
            System.out.println("for 循环的花括号中是方法体");
        }

        // 6.while
        while (age > 50) {
            System.out.println("while 循环的花括号中是方法体");
        }

        // 7.switch-case
        switch (age) {
            // 错误:在该区域写代码是错误的(该区域不是方法体)
            // System.out.println(age); // ERROR
            case 1: {
                System.out.println("switch 语句的 case 语句块是方法体");
            }
        }

        // 8.do-while
        do {
            System.out.println("do-while 循环的花括号中是方法体");
        } while (age < 5);
    }

}

其实可以理解为只有三个地方是代码块:

① 代码块
② 静态代码块
③ 方法中
但是,当初老师教的时候把 if、while、for 等也归纳为方法体

补充:定义方法可能还会有其他修饰符(eg:static、final、abstract),后面还会详细介绍

仔细看下面的代码, 学会定义方法:

public class CreateMethodDemo {
    public static void main(String[] args) {
        int sum1 = CreateMethodDemo.sumOne2Hundred(1, 100);
        // sum1 = 5050
        System.out.println("sum1 = " + sum1);

        int sum2 = CreateMethodDemo.sumOne2Hundred(1, 1000);
        // sum2 = 500500
        System.out.println("sum2 = " + sum2);

        int sum3 = CreateMethodDemo.sumOne2Hundred(1, 10000);
        // sum3 = 50005000
        System.out.println("sum3 = " + sum3);
    }
    
    private static int sumOne2Hundred(int start, int end) {
        int sum = 0;

        for (int i = start; i <= end; i++) {
            sum += i;
        }
        return sum;
    }
}

二、可变参数(Variable)

思考:编写程序计算多个整数的和。eg:计算【2, 5, 6, 7, 66, 53】的和

public class VariableParameter {
    public static void main(String[] args) {
        int[] arr = {2, 5, 6, 7, 66, 53};
        VariableParameter vp = new VariableParameter();
        // sumByArr = 139
        System.out.println(vp.sumByArr(arr));
    }

    
    private String sumByArr(int[] arr) {
        if (arr == null || arr.length < 1) return "arr 数组为 null, 为数组元素为 0";

        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return "sumByArr = " + sum; 
    }
}

思路1:
?可把需要进行求和的整数放入一个整型数组中,并把整型数组作为参数传给 sumByArr 方法
?sumByArr 方法接收一个 int 类型的数组作为参数,在 sumByArr 的方法体中通过 for 循环遍历数组中的数字,并进行求和
思路2:
?使用可变参数替换 arr 数组

public class VariableParameter {

    public static void main(String[] args) {
        VariableParameter vp = new VariableParameter();
        // 当 sumByVariable1Parameter 的参数列表中一个【值】都没有
        // 的时候, 返回值是可变参数类型的默认值
        int sum = vp.sumByVariable1Parameter(2, 5, 6, 7, 66, 53);
        // sumByVariable1Parameter = 139
        System.out.println("sumByVariable1Parameter = " + sum);
    }

    
    private int sumByVariable1Parameter(int... nums) {
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        return sum;
    }
}
  • 可变参数的本质是数组
  • 可变参数必须是方法的参数列表中的最后一个参数

String 类有静态方法 format 可用于拼接字符,它的底层就用到了【可变参数】

public class VariableParameter {

    public static void main(String[] args) {
        String info = String.fORMat("name: %s; age: %d; money: %f", 
    							"庆医", 10, 895863.99);
        // info = name: 庆医; age: 10; money: 895863.990000
        System.out.println("info = " + info);
    }
}

三、方法的参数传递问题

1. 基本数据类型

Passing Primitive Data Type Arguments 传递原始数据类型参数

  • 基本类型作为参数是值传递
  • 基本类型作为返回值,返回的是值本身
  • 基本类型:byte、short、int、long、float、double、boolean、char

Primitive arguments, such as an int or a double, are passed into methods by value. This means that any changes to the values of the parameters exist only within the scope of the method. When the method returns, the parameters are Gone and any changes to them are lost.

原始参数(eg:int 或 double)通过 value 传递给方法。这意味着对参数值的任何更改仅存在于该方法的作用域内。当方法返回后,栈帧销毁后,参数消失后,对它们的任何更改都将无效。

public class ArgumentsPassingTest {

    public static void main(String[] args) {
        int n = 10;
        test(n); // 值传递(v 和 n 没有关系)
        // n = 10
        System.out.println("n = " + n);
    }
    private static void test(int v) { // v = 10
        v = 20;
    }
}

基本类型作为返回值,返回的是值本身:

public class ArgumentsPassingTest {

    public static void main(String[] args) {
        int test = test(66);
        // test = 88
        System.out.println("test = " + test);
    }

    private static int test(int param) {
        param = 88;
        return param;
    }
}

2. 引用数据类型

Passing Reference Data Type Arguments(传递引用数据类型参数)

  • 引用类型作为参数是引用传递(地址传递)
  • 引用类型作为返回值是引用传递(地址传递

Reference data type parameters, such as objects, are also passed into methods by value. This means that when the method returns, the passed-in reference still references the same object as before. However, the values of the object’s fields can be changed in the method, if they have the proper access level.
引用数据类型参数(例如对象)也按值传递给方法。这意味着当方法返回时,传入的引用仍然引用着与之前相同的对象。但是,如果对象字段的值具有适当的访问级别,则可以在方法中更改它们。

public class ArgumentsPassingTest {

    public static void main(String[] args) {
        int[] nums = {1, 2, 3};
        test(nums);
        // nums = [1, 66, 3]
        System.out.println("nums = " + Arrays.toString(nums));
    }
    private static void test(int[] param) {
        param[1] = 66;
    }
}

引用类型作为返回值是引用传递(地址传递):

public class ArgumentsPassingTest {

    public static void main(String[] args) {
        int[] test = test();

        // test = [1314, 520, 666]
        System.out.println("test = " + Arrays.toString(test));
    }
    private static int[] test() {
        int[] ints = {1314, 520, 666};
        return ints;
    }
}

栈帧销毁销毁的是局部变量信息,堆空间的对象不会被回收的。

四、方法签名(Method Signature)

方法签名只由2部分组成:方法名、参数类型

private static void test(double pai, String name, int age) {
    return null;
}
  • 上面方法的方法签名是:test(double, String, int)
  • 在同一个类中,方法签名是唯一的(同一方法签名在同一个类中只能出现一次)

五、方法的重载(Overload) 

官方教程:

Overloaded(重载) methods are differentiated by the number and the type of the arguments passed into the method. For example: run(String s) and run(int i) are distinct and unique methods because they require different argument types.

重载的方法通过传递给方法的参数的数量和类型来区分。
例如:run(String s)run(int i) 是不同且独特的方法,因为它们拥有不同的参数类型

重载:

  • ① 方法名相同,参数类型或数量不同;
  • ② 重载与返回值类型、参数名称无关

The compiler does not consider return type when differentiating methods, so you cannot declare two methods with the same signature even if they have a different return type.
编译器在区分方法时不考虑返回类型,因此即使它们具有不同的返回类型,也不能声明具有相同签名的两个方法。

You cannot declare more than one method with the same name and the same number and type of arguments, because the compiler cannot tell them apart.
您不能声明多个具有相同名称和相同数量和类型的参数的方法,因为编译器无法区分它们。

下面的两个方法构成方法重载:

private static int[] test(double weight, String name, int age) {
    return null;
}
private static int[] test(int age, double weight, String name) {
    return null;
}

到此这篇关于Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名)的文章就介绍到这了,更多相关Java方法定义内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名)

本文链接: https://www.lsjlt.com/news/167281.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名)
    目录一、方法(Method)概念二、可变参数(Variable)三、方法的参数传递问题1. 基本数据类型2. 引用数据类型四、方法签名(Method Signature)五、方法的重...
    99+
    2022-11-13
  • Java 方法的重载与参数传递详解
    目录方法重载概述方法重载特特点方法重载练习方法参数传递方法参数传递(基本类型)方法参数传递(引用类型)方法重载概述 方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方...
    99+
    2022-11-13
  • java传递参数的方法有哪些
    在Java中,传递参数的方法有以下几种:1. 值传递:基本数据类型(如int、char、boolean等)和字符串类型(String...
    99+
    2023-09-15
    java
  • php函数参数的传递方法
    这篇文章给大家分享的是有关php函数参数的传递方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在调用函数时,需要向函数传递参数,被传入函数的参数称为实参,而函数定义的参数称为形参。而向函数传递参数的方式有四种,...
    99+
    2023-06-14
  • Java的可变参数方法详述
    目录一、可变参数方法的定义二、可变参数方法的调用三、可变参数方法的重载四、Object 可变参数一、可变参数方法的定义 首先看下可变参数方法在代码上是如何定义的,如下所示: publ...
    99+
    2022-11-13
  • Shell参数传递的使用方法
    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…...
    99+
    2023-05-19
    Shell 参数传递 Shell 传递参数
  • Shell 参数传递的使用方法
    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……具体实例:以下实例我们向脚本传递三个参数,并分别输出...
    99+
    2023-05-12
    Shell 参数传递 Shell 传递参数
  • 使用JPA传递参数的方法
    目录JPA传递参数的方法第一种第二种浅谈JPA优缺点一.JPA的理解二.JPA 实体生命周期理解和总结三.为什么要使用JPAJPA传递参数的方法 第一种         @Quer...
    99+
    2022-11-13
  • java string参数传递的方法是什么
    在Java中,字符串参数传递的方法是通过将字符串作为参数传递给方法。这可以通过以下几种方式实现: 传递字符串字面值:可以直接将字符...
    99+
    2023-10-26
    java string
  • java中的可变参数使用方法
    java中的可变参数使用方法可变参数时Java 1.5新增的方法,可变参数方法接收0个或者多个指定类型的参数,可变参数机制通过先创建一个数组,数组的大小为在调用位置所传递的参数数量,然后将参数值传到数组中,最后将数组传递给方法。如:publ...
    99+
    2023-05-31
    java 可变参数 ava
  • Java的可变参数方法怎么用
    今天小编给大家分享一下Java的可变参数方法怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、可变参数方法的定义首先看...
    99+
    2023-06-29
  • iframe参数传递的方法是什么
    在HTML中,可以使用iframe标签来嵌套其他网页。要传递参数给嵌套的网页,可以使用以下方法:1. URL查询字符串:可以将参数作...
    99+
    2023-09-20
    iframe
  • Django URL传递参数的方法总结
    1 无参数情况 配置URL及其视图如下: (r'^hello/$', hello) def hello(request): return HttpResponse("Hello World") ...
    99+
    2022-06-04
    参数 方法 Django
  • java重载方法的参数如何设置
    这篇文章主要介绍“java重载方法的参数如何设置”,在日常操作中,相信很多人在java重载方法的参数如何设置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java重载方法的参数如何设置”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • vue中的get方法\post方法如何实现传递数组参数
    目录get方法\post方法如何传递数组参数第一部分:vue中get方法如何传递数组参数 下面列出我的接口格式及解决方法的源码vue get与post传参方式1.post:...
    99+
    2022-11-13
  • shell传参并将参数传递给sql文件的方法
    如下所示: 调用代码:   sh /tmp/t.sh 20160808  echo $1 cat /tmp/t.sql | sedyLEEDe '$s/ssssss/'$1'/g' ...
    99+
    2022-06-04
    shell 传参 sql
  • DRUPAL6中定义hook_menu参数的方法
    本文实例讲述了DRUPAL6中定义hook_menu参数的方法。分享给大家供大家参考。具体分析如下: hook_menu()函数位于 developer/hooks/core.php ,第928 行 描述:确定菜单项和页...
    99+
    2022-06-12
    DRUPAL6 定义 hook_menu 参数
  • python函数参数传递的方法有哪些
    在Python中,函数参数传递的方法有以下几种:1. 位置参数传递:根据参数的位置顺序进行传递,参数的值与参数的位置一一对应。例如:...
    99+
    2023-10-19
    python
  • django url传递参数的方法是什么
    Django中向URL传递参数的方法主要有两种:使用路径参数和使用查询参数。1. 路径参数:路径参数是通过在URL中直接添加参数来传...
    99+
    2023-10-09
    django
  • SpringMVC中参数的传递方法有哪些
    这篇文章主要介绍“SpringMVC中参数的传递方法有哪些”,在日常操作中,相信很多人在SpringMVC中参数的传递方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作