Java方法的定义、调用和冲载

news2024/11/25 4:29:32

目录

  • 什么是方法
  • 方法的定义
  • 方法的声明
    • 方法声明的格式
  • 方法的调用方式
  • 方法调用实例
  • 面试题
    • 在内存中的变化
  • 方法的重载

什么是方法

  • 方法(method)就是一段用来完成特定功能的代码片段,类似于其它语言的函数(function)。
    方法用于定义该类或该类的实例的行为特征和功能实现。 方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。
  • 面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。

在Java中,方法是一种代码块,它执行特定的操作并返回一个值。方法提供了一种组织代码的方式,使程序更加模块化、可读性和可维护性。

方法的定义

方法是在Java程序中定义的一种特定功能的代码块,它具有独立性,只负责完成一项任务,并且可以通过反复调用实现代码复用,从而降低代码的重复性,有利于代码的维护。

方法的定义包括以下部分:

  1. 修饰符:这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。包括权限修饰符和静态修饰符。权限修饰符有公开的(public)、受保护的(protected)、默认的(default)和私有的(private)。静态修饰符表示该方法属于类,而不是对象,可以通过类名直接调用。
  2. 返回值类型:这是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,返回值类型是关键字void。
  3. 方法名:这是方法的实际名称。方法名和参数表共同构成方法签名。
  4. 参数列表:这是方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。参数是方法执行所需的数据,当方法被调用时,传递值给参数。这个值被称为实参或变量。
  5. 方法体:这是包含方法的实际语句,定义该方法的功能。
    在这里插入图片描述

方法的调用可以通过以下方式进行:

  1. 无返回值:直接使用方法名(如果有参数,则通过括号传递参数)进行调用。
  2. 有返回值:使用数据类型和变量名来调用方法,并将返回值存储在变量中。

方法的声明

方法声明的格式

[修饰符1  修饰符2]  返回值类型    方法名(形式参数列表){
        Java语句;… … …
}

方法的声明是在Java程序中定义方法的过程,它告诉编译器如何调用该方法。方法声明包括以下部分:

  1. 访问修饰符:这是可选的,用于指定方法的可见性。常见的访问修饰符包括publicprivateprotected。如果没有指定访问修饰符,则默认为package-private(即只在同一个包中可见)。
  2. 返回类型:这指定了方法返回值的类型。如果方法不返回任何值,则使用关键字void
  3. 方法名:这是方法的唯一标识符,用于在程序中调用该方法。
  4. 参数列表:这定义了传递给方法的参数。参数列表包括参数类型、参数名称和参数顺序。参数是可选的,具体取决于方法的定义。

以下是一个方法的声明的示例:

public int add(int a, int b) {
    // 方法体
}

在这个例子中,public是访问修饰符,int是返回类型,add是方法名,int a, int b是参数列表。

方法的调用方式

在Java中,方法的调用主要有以下几种方式:

  1. 通过对象名 . 方法名进行调用:这是最普通的也是最常见的一种调用方式。如果方法是非静态的,必须通过对象来调用。
  2. 通过new关键字调用构造方法:这种是在实例化对象时使用的方式。
  3. 通过类名 . 方法名调用:当需要调用的那个方法为静态(有static的)方法时使用。

此外,方法的重载是指在同一个类中,存在多个同名方法,但参数列表不同的情况。这允许使用相同的方法名来执行不同的操作,增加了代码的可读性和可维护性。

方法是在Java程序中定义的一种特定功能的代码块,它具有独立性,只负责完成一项任务,并且可以通过反复调用实现代码复用,从而降低代码的重复性,有利于代码的维护。

注意事项

  1. 方法不能嵌套定义,即方法不能在方法中定义另一个方法。
  2. 方法定义后,如果没有被调用,则不会被执行。
  3. 方法的返回值必须与返回值类型匹配。
  4. 方法的参数列表中可以包含多个参数,用逗号分隔。如果没有参数,则括号可以留空。
  5. 方法的定义顺序不影响其执行。
  6. 在同一个类中,可以有多个重载的方法,但必须遵守重载规则。

方法调用实例

public class Testmethod {
    public static int add(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        // 在main方法中调用add方法,并打印结果
        int sum = add(5, 3);
        System.out.println("The sum of 5 and 3 is: " + sum);
    }
}

在这里插入图片描述

这段代码是一个简单的Java程序,它定义了一个名为Testmethod的类,并在其中定义了一个add方法和一个main方法。以下是代码的解释:

  1. public class Testmethod{: 定义一个名为Testmethod的公共类。
  2. public static int add(int a, int b) {: 定义一个公共的静态方法add,该方法接受两个整数参数ab,并返回一个整数。
  3. return a + b;: 这是add方法的主体,它返回两个参数的和。
  4. public static void main(String[] args) {: 定义一个公共的静态方法main,这是Java程序的入口点。它接受一个字符串数组作为参数。
  5. int sum = add(5, 3);: 在main方法中,我们调用先前定义的add方法,并传递5和3作为参数。将返回的结果(即8)存储在变量sum中。
  6. System.out.println("The sum of 5 and 3 is: " + sum);: 使用System.out.println打印一条消息,显示5和3的和。

当您运行这段代码时,它会输出:

The sum of 5 and 3 is: 8

简而言之,这段代码演示了如何在Java中定义一个方法(在这里是add方法),并在主方法中调用它。

面试题

  • 请问下面代码中两个数是否交换成功:
public class Testm01{
        public static void main(String[] args){
                int a=10;
                int b=20;
                System.out.println("输出交换前的两个数:"+a+"---"+b);
                changeNum(a,b);
                System.out.println("输出交换后的两个数:"+a+"---"+b);
        }
        public static void changeNum(int num1,int num2){
                int t;
                t=num1;
                num1=num2;
                num2=t;
        }
}

运行结果:
在这里插入图片描述

  • 在Java中,方法参数的传递是按值传递的。这意味着当你把一个变量的值传递给方法时,方法接收的是该值的副本,而不是原始变量本身。因此,在changeNum方法中,虽然你交换了num1num2的值,但这并不会影响到方法外部的ab的值,因为ab在方法内部是按值传递的,它们的副本被交换,而不是原始变量。

在内存中的变化

  • 在内存中,当程序运行时,每个变量都有自己的内存地址。当你在方法中交换两个变量的值时,实际上是在内存中交换了这两个变量的内容。这是在计算机的RAM(随机存取存储器)中发生的。

  • 然而,由于Java是按值传递的,方法的参数传递是变量的值的副本,而不是原始变量本身。因此,尽管在方法内部交换了num1num2的值,但这并不会影响到方法外部的ab的值,因为ab在方法内部是按值传递的,它们的副本被交换,而不是原始变量。

如果你想在方法中改变外部变量的值,你可以使用引用传递或者通过返回值来实现。但Java是按值传递的,所以你不能直接交换两个变量的值。

方法的重载

  • 在Java中,方法重载(overloading)是指在一个类中可以定义多个方法,它们具有相同的方法名,但参数列表不同(可能是参数类型、参数数量或参数顺序的不同)。方法重载允许编译器根据调用方法时提供的参数类型和数量来确定具体应该调用哪个方法。

下面是一个修改后的Main类示例,其中包含了两个名为add的重载方法:一个用于添加两个整数,另一个用于添加三个整数。

public class Main {
    // 定义一个方法,该方法接受两个整数参数并返回它们的和
    public static int add(int a, int b) {
        return a + b;
    }
    
    // 重载add方法,使其能够接受三个整数参数并返回它们的和
    public static int add(int a, int b, int c) {
        return a + b + c;
    }

    public static void main(String[] args) {
        // 在main方法中调用两个参数的add方法,并打印结果
        int sumTwo = add(5, 3);
        System.out.println("The sum of 5 and 3 is: " + sumTwo);
        
        // 在main方法中调用三个参数的add方法(重载版本),并打印结果
        int sumThree = add(5, 3, 2);
        System.out.println("The sum of 5, 3, and 2 is: " + sumThree);
    }
}

在这个例子中,我们有两个add方法:一个接受两个整数参数,另一个接受三个整数参数。当我们在main方法中调用add(5, 3)时,编译器会选择接受两个参数的add方法。而当我们调用add(5, 3, 2)时,编译器会选择接受三个参数的add方法。这样,我们就成功地实现了方法的重载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1426666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sqli.labs靶场(23关到28a关)

23、第二十三关 id1单引号闭合 找位置1 and 12 union select 1,2,3 爆库:1 and 12 union select 1,2,database() 爆表名:1 and 12 union select 1,2,group_concat(table_name) from information_schema.tables where table_schemasecurity 爆字段&#…

【算法详解 | 二分查找】详解二分查找 \ 折半查找高效搜索算法 | 顺序数组最快搜索算法 | 递归循环解决二分查找问题

二分查找 by.Qin3Yu 本文需要读者掌握 顺序表 的操作基础,完整代码将在文章末尾展示。 顺序表相关操作可以参考我的往期博文: 【C数据结构 | 顺序表速通】使用顺序表完成简单的成绩管理系统.by.Qin3Yu 文中所有代码使用 C 举例,且默认已使用…

Linux管道、网络管理和远程连接

这次来说一下Linux管道、网络管理与远程连接相关的一些内容,如下。 一、管道(重点) 1、管道符 用 “|”(竖线)表示。 作用:管道是一种通信机制,通常用于进程间的通信。它表现出来的形式将前…

ZigBee学习——在官方例程基础实现点灯

IAR版本 :10.10.1 Z-stack版本 :3.0.2 文章目录 一、买的板子原理图二、实现过程2.1 重定义LED的物理映射(HAL层)2.2 创建LED事件(应用层)2.2.1 定义用户事件2.2.2 修改zclGenericApp_event_loop() 2.3 触发事件 一、买的板子原理图 二、实现过程 2.1 重定义LED的物理映射(HAL…

MirrorLayer可以正常触摸屏幕原理分析

背景: 上次blog分享了给学员朋友们布置的作业,今天来进行简单的揭秘。 问题: 在多屏互动时候有一个屏幕的画面是一个MirrorLayer,另一个屏幕画面是真实的,即2个屏幕上有一个是MirrorLayer,这个时候疑问就…

算法篇之二分

二分算法简介 特点 最简单的一种算法,也是最恶心,细节最多,最容易写出死循环的算法时间复杂度O(logN) 如何学习 明白其中的算法原理,二分并不是只有数组有序的的时候使用,而是看是否具有二段性。模板 朴素的二分模…

算法面试八股文『 基础知识篇 』

博客介绍 近期在准备算法面试,网上信息杂乱不规整,出于强迫症就自己整理了算法面试常出现的考题。独乐乐不如众乐乐,与其奖励自己,不如大家一起嗨。以下整理的内容可能有不足之处,欢迎大佬一起讨论。 PS:…

失物招领|基于Springboot的校园失物招领系统设计与实现(源码+数据库+文档)

校园失物招领系统目录 目录 基于Springboot的校园失物招领系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、 管理员功能实现 (1) 失物招领管理 (2) 寻物启事管理 (3) 公告管理 (4) 公告类型管理 2、用户功能实现 (1) 失物招领 (2) 寻物启事 (3) 公告 …

2024 美国大学生数学建模竞赛 美赛(C题)网球比赛趋势问题 国际大学生数学建模竞赛| 建模秘籍文章代码思路大全

铛铛!小秘籍来咯! 小秘籍希望大家都能轻松建模呀,华数杯也会持续给大家放送思路滴~ 抓紧小秘籍,我们出发吧~ 完整内容可以在文章末尾领取! 问题1 • 开发一个模型,捕捉到比赛进行时点的流动,…

(2)(2.11) RFD900

文章目录 前言 1 概述 2 主要功能 3 状态LED指示灯 4 接口 5 使用Mission Planner进行配置 6 支持不同国家/地区 7 讨论论坛 前言 RFD900 无线电调制解调器是一款高功率 900Mhz ISM 波段无线电调制解调器,设计用于远距离串行通信。据报道,其通信…

2024美国大学生数学建模美赛选题建议+初步分析

总的来说&#xff0c;去年算是美赛环境题元年&#xff0c;去年的开放度是较高的&#xff0c;今年每种赛题类型相对而言平均了起来 提示&#xff1a;DS C君认为的难度&#xff1a;E<BCF<AD&#xff0c;开放度&#xff1a;DBCE<A<F。 以下为A-F题选题建议及初步分析…

C++(17.5)——list模拟实现扩展

在上篇文章中&#xff0c;实现了的大部分功能以及部分迭代器。本片文章将对剩下的功能进行补充。 1. const迭代器&#xff1a; 对于上篇文章中实现的迭代器只能使用于非类型的对象。对于类型的遍历&#xff0c;则需要额外编写类型的迭代器。例如对于下面的场景&#xff1a; …

grafana安装DevOpsProdigy KubeGraf 1.5.2

安装DevOpsProdigy KubeGraf需要安装kube-state-metrics 官方地址&#xff1a;https://github.com/kubernetes/kube-state-metrics/tree/release-2.10/examples/standard 查看k8s版本和kube-state-metrics对应版本&#xff1a; [rootmaster1 kube-state-metrics]# ll 总用量 …

25考研|660/880/1000/1800全年带刷计划

作为一个参加过两次研究生考试的老学姐&#xff0c;我觉得考研数学的难度完全取决于你自己 我自己就是一个很好的例子 21年数学题目是公认的简单&#xff0c;那一年考130的很多&#xff0c;但是我那一年只考了87分。但是22年又都说是有史以来最难的一年&#xff0c;和20年的难度…

华擎B660 主板 怎么设置打开来电自启功能?

环境&#xff1a; 华擎B660 钢铁传奇 1700 : Intel B660 问题描述&#xff1a; 华擎B660 主板 怎么设置打开来电自启功能&#xff1f; 解决方案&#xff1a; 1.前往-高级- 芯片组配置 2.往下划找到交流 /电源断电恢复 选择电源故障后的电源状态。如果选择 [关机]&#x…

《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(4)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述&#xff08;3&#xff09; 4.1.2 PCIe总线使用的信号 PCIe设备使用两种电源信号供电&#xff0c;分别是Vcc与Vaux&#xff0c;其额定电压为3.3V。其中Vcc为主电源&#xff0c;PCIe设备…

免费分享一套SpringBoot+Vue药店(药房)管理系统,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue药店(药房)管理系统 &#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue药店(药房)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue药店(药房)管理系统 Java毕业设计…

flutter实战之美化 container

我们来看一个代码 Column(children: [...transaction.map((e) > Card(child:Row(children: [Container(child: Text(e.amout.toString()),),Column(children: [Text(e.title),Text(e.date.toString()),],)],),)).toList()],) 看看效果 感觉很不好 我们要去美化一下contai…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)

专属领域论文订阅 关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 为了答谢各位网友的支持&#xff0c;从今日起…

pytorch_car_caring 排坑记录

pytorch_car_caring 排坑记录 任务踩坑回顾简单环境问题代码版本问题症状描述解决方法 cuda问题&#xff08;异步问题&#xff09;症状描述解决方法 任务 因为之前那个MPC代码跑出来的效果不理想&#xff0c;看了一天代码&#xff0c;大概看明白了&#xff0c;但要做改进还要有…