前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【JavaSE】Java入门二(方法详解)

【JavaSE】Java入门二(方法详解)

作者头像
小皮侠
发布于 2024-04-08 12:35:42
发布于 2024-04-08 12:35:42
10400
代码可运行
举报
运行总次数:0
代码可运行

方法的使用

Java中的方法类似于C语言中的函数,目的都是解决程序设计中代码复用的问题。

1.方法定义

定义一个方法的语法格式如下:

// 方法定义 修饰符 返回值类型 方法名称 ([ 参数类型 形参 ...]){ 方法体代码 ; [ return 返回值 ]; }

对于没有返回值的方法,类型处写void。

需要特别注意,与C语言不同的是Java中的方法只能定义在类中,类外使用的时候可以通过定义对象来调用,要在入口方法(main)中使用需要在在定义方法的返回值前加上static关键字,直接比如下面这段例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Method{
// 方法的定义
public static int add(int x, int y) {
return x + y;
}
}

方法调用的执行过程如下:

调用方法 --- > 传递参数 --- > 找到方法地址 --- > 执行被调方法的方法体 --- > 被调方法结束返回 --- > 回到主调方法继续往下 执行

2.实参和形参的关系

Java中定义方法时括号里面的参数为形参,在main方法中调用方法时传递的参数我们称为实参。

形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值 。(可以理解为形参只是实参在内存空间的一份拷贝,当方法执行完毕时,形参所占用的内存空间随方法体一同被回收)。

具体情况我们可以从下面代码中看出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("main: a = " + a + " b = " + b);
}

public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println("swap: x = " + x + " y = " + y);
}
}

// 运行结果
swap: x = 20 y = 10
main: a = 10 b = 20

我们定义了一个交换方法,想交换两个数的值,但是因为在方法中只交换了形参的值,而形参的值在方法执行完就被销毁了,所以实参的值并没有发生交换。

对于基本数据类型来说,上述调用就是传值调用。

在Java中要想定义一个能交换两数的方法,我们就需要传引用数据类型(例如数组,包装类,字符串),Java中抛弃了C/C++中指针类型操控地址的设定,转而就是用引用数据类型来直接操作地址,Java中除了八大基本数据类型,其他的数据类型均为引用数据类型,所以我们靠传引用数据类型(相当于把实参的地址传给形参),就能保证形参和实参共用一份地址,即传址调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestMethod {
public static void main(String[] args) {
int[] arr = {10, 20};
swap(arr);
System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}

public static void swap(int[] arr) {
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
}

// 运行结果
arr[0] = 20 arr[1] = 10

3.方法重载

Java中规定在同一个作用域中不能定义两个相同名称的标识符,比如:方法中不能定义两个名字一样的变量,但是类中可以定义方法名相同的方法(只需要返回值类型或参数列表不同即可)。

方法重载的目的是为了让我们在代码复用的时候更加方便,如下案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestMethod {
public static void main(String[] args) {
add(1, 2); // 调用add(int, int)
add(1.5, 2.5); // 调用add(double, double)
add(1.5, 2.5, 3.5); // 调用add(double, double, double)
}
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
}

为么呢?

因为Java的编译器会在编译阶段修改方法的最终名字,即方法签名:方法全路径名+参数列表+返回值类型,构成编译后方法完整的名字。

tips:只有方法名相同,参数列表或返回值类型不同时才能叫方法重载。

4.递归

递归是一种解决问题的方法,更是一种思想,它的特点是自身中又包含了自己

有些时候,我们 遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解 决之后,原问题就迎刃而解了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {
int n = 5;
int ret = factor(n);
System.out.println("ret = " + ret);
}
public static int factor(int n) {
System.out.println("函数开始, n = " + n);
if (n == 1) {
System.out.println("函数结束, n = 1 ret = 1");
return 1;
}
int ret = n * factor(n - 1);
System.out.println("函数结束, n = " + n + " ret = " + ret);
return ret;
}

// 执行结果
函数开始, n = 5
函数开始, n = 4
函数开始, n = 3
函数开始, n = 2
函数开始, n = 1
函数结束, n = 1 ret = 1
函数结束, n = 2 ret = 2
函数结束, n = 3 ret = 6
函数结束, n = 4 ret = 24
函数结束, n = 5 ret = 120
ret = 120

上述过程如下,有一个明显的递归过程:

tips:递归的使用非常消耗时间和空间,使用之前一定要避免递归深度过大。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java篇】一法不变,万象归一:方法封装与递归的思想之道
方法是组织代码的一种形式,它允许将重复性代码封装在一个单独的块中,从而实现模块化。Java 方法类似于 C 语言中的“函数”。它是解决多次使用相同代码的理想方式。通过方法,我们不仅可以提高代码的可重用性,还能提高代码的可维护性和可读性。
半截诗
2025/03/15
600
【Java篇】一法不变,万象归一:方法封装与递归的思想之道
Java方法
方法中的返回值有两种情况,即有返回值和无返回值,如果定义方法时有返回值类型,就需要返回相对应的数据类型
闲花手札
2021/08/24
7790
【愚公系列】2021年12月 Java教学课程 19-方法
​ 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
愚公搬代码
2022/01/04
2830
21天学习挑战赛之Java方法
​ 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
楠羽
2022/11/18
3160
二、方法【黑马JavaSE笔记】
注意:方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将会报错。
啵啵鱼
2022/11/23
4310
【05】JAVASE-方法讲解【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
490
【05】JAVASE-方法讲解【从零开始学JAVA】
《JavaSE》---8.<基础语法(Java方法的定义详解&方法的递归)>
创建一个方法,我们首先是去定义这个方法的访问修饰符。现阶段直接使用public static 固定搭配(public static意思就是这个方法可以被所有类访问,并且这个方法是属于类的,而不是实例。可以不创建对象的实例而直接被类调用。),其实修饰符还有许多。如下表格。大家简单了解即可。随着学习的深入。我们会一一理解。
用户11288958
2024/09/24
1630
《JavaSE》---8.<基础语法(Java方法的定义详解&方法的递归)>
【Java】——方法的使用(从入门到进阶)
Java中的方法类似于C语言中的函数,方法是一组为了完成特定功能的代码块,它将一段逻辑封装起来,使其可以被重复调用。通过使用方法,我们可以提高代码的可维护性、可复用性和可读性。例如,计算两个整数之和这样一个简单的功能,如果没有方法,每次需要计算时都要重复编写加法的代码;而有了方法,我们只需编写一次加法逻辑,在需要的时候调用这个方法即可。
User_芊芊君子
2025/04/08
860
【Java】——方法的使用(从入门到进阶)
Java基础语法(五)——方法的使用
  首先调用的方法是main方法,那么此时在内存中会开辟一块main的栈帧,此时在main里创建了一个ret变量,在main的内存中就存放了ret的空间.
RAIN7
2021/08/11
4740
Java方法的详解和使用
Java中方法形参就相当于sum函数中的自变量n,用来接收sum函数在调用时传递的值的。形参的名字可以随意取,对方法都没有任何影响,形参只是方法定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。
用户11070251
2024/04/11
1250
Java方法的详解和使用
《JavaSE-第五章》之C中的函数-java中的方法
我们在C语言中学习函数,因为我们太懒了懒的写代码,为了提高代码的复用性避免重复的造轮子,我们可以将常用的功能独立成函数,在java中也是如此只是在java中没有函数这个概念,却有等同于函数的东西,那就是方法,接下来让我们走进java中方法,去领略方法的调用,方法的声明周期以及方法重载。
用户10517932
2023/10/07
1700
《JavaSE-第五章》之C中的函数-java中的方法
Java基础知识(七)方法的定义,形参,实参,
语句块(有时叫做复合语句),是用花括号扩起的任意数量的简单Java语句。块确定了局部变量的作用域。块中的程序代码,作为一个整体,是要被一起执行的。块可以被嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块中定义的变量作用域只限于语句块。
徐建国
2021/08/03
9650
Java基础知识(七)方法的定义,形参,实参,
【 JavaSE 】方法的使用
1. 简洁 2.在树的前序,中序,后序遍历算法中,递归的实现明显要比循环简单得多
用户9645905
2022/11/30
2730
【 JavaSE 】方法的使用
Java方法的基本用法
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1
鲜于言悠
2024/05/24
850
Java方法的基本用法
【Java探索之旅】方法的概念 定义 执行流程 实参与形参的交互
方法就是一个代码片段. 类似于 C 语言中的 “函数”。方法存在的意义(不要背, 重在体会)
屿小夏
2024/04/18
1430
大数据必学Java基础(二十三):方法的定义/调用/重载
方法(method)就是一段用来完成特定功能的代码片段,类似于其它语言的函数(function)。
Lansonli
2022/07/19
3000
大数据必学Java基础(二十三):方法的定义/调用/重载
【Java探索之旅】方法重载 递归
假设现在我们需要求两个数的和,要求根据数据的类型返回相应的返回值。那么就需要写一个整数和的方法、一个浮点数和的方法。如果类似的要求很多,你取名字都是一件极其麻烦的事情,这里就需要用到方法的重载了。
屿小夏
2024/04/18
860
【Java探索之旅】方法重载 递归
Java基础知识及细节之方法
​ 1:定义方法,名称为print ​ 2:为方法添加两个int类型的形参,准备接受调用者传递过来的实参 ​ 3:方法中设计for循环,循环从n开始,到m结束 ​ 4:循环中加入if判断,是奇数,则打印 ​ 5:main方法中调用print方法,传入两个实际参数
小炜同学
2022/08/20
2340
【JavaSE专栏33】用大白话解释Java的方法重载和方法覆盖
在同一个类中有多个方法名一致的方法,但是这些方法参数列表不同,代码也不一样,那么我们就叫做方法重载。
Designer 小郑
2023/08/01
1940
【JavaSE专栏33】用大白话解释Java的方法重载和方法覆盖
Java基础-方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/11/12
4360
相关推荐
【Java篇】一法不变,万象归一:方法封装与递归的思想之道
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验