🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:【Java】内容概括
文章目录:
【前言】
在Java编程的世界里,方法(Method)就像是一个个精巧的工具,帮助我们把复杂的任务分解成一个个可管理的小模块。对于刚接触Java的小白来说,掌握方法的使用是迈向编程高手之路的重要一步。本文将全面且深入地探讨Java方法的使用,带你从基础入门,逐步深入理解其精髓。
1.方法的概念及使用
1.1 什么是方法?
Java中的方法类似于C语言中的函数,方法是一组为了完成特定功能的代码块,它将一段逻辑封装起来,使其可以被重复调用。通过使用方法,我们可以提高代码的可维护性、可复用性和可读性。例如,计算两个整数之和这样一个简单的功能,如果没有方法,每次需要计算时都要重复编写加法的代码;而有了方法,我们只需编写一次加法逻辑,在需要的时候调用这个方法即可。
通俗易懂的理解方法:
比如说,我买了一个小米榨汁机(这里不是打广告哈),我想喝一杯鲜榨橙汁,那么我需要准备橙子(食材)
,然后就开始放入榨汁机中,开始一系列操作
,最后得到一杯鲜榨橙汁
.
这一整个过程就相当于Java中的方法,食材就是参数
,一系列步骤就是代码
,最后得到的橙汁就是返回值
1.2 方法的意义
- 是能够模块化的组织代码(当代码规模⽐较复杂的时候).
- 做到代码被重复使⽤, ⼀份代码可以在多个位置使⽤.
- 让代码更好理解更简单.
- 直接调⽤现有⽅法开发, 不必重复造轮⼦.
1.3 方法的定义
语法格式:
修饰符 返回值类型 ⽅法名称([参数类型 形参 ...]){
⽅法体代码;
[return 返回值];
}
so:
当我们每次想喝橙汁时,只需要调⽤这个“函数”,⽽不需要每次都重复所有步骤。这样不仅提⾼了效率,也让整个过程变得更加简单和有条理。
1.4 示例
1.实现一个函数,判断闰年
public class Method{
// ⽅法定义
public static boolean isLeapYear(int year){
if((0 == year % 4 && 0 != year % 100) || 0 == year % 400){
return true;
}else{
return false;
}
}
}
2.实现⼀个两个整数相加的⽅法
public class Method{
// ⽅法的定义
public static int add(int x, int y) {
return x + y;
}
}
【注意事项】:
修饰符
:现阶段直接使⽤public static 固定搭配返回值类型
:如果⽅法有返回值,返回值类型必须要与返回的实体类型⼀致,如果没有返回值,必 须写成void⽅法名字
:采⽤⼩驼峰
第一个单词首字母小写,后面的首字母大写命名参数列表
:如果⽅法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使 ⽤逗号隔开⽅法体
:⽅法内部要执⾏的语句- 在Java当中,⽅法必须写在类当中
- 在Java当中,⽅法不能嵌套定义
- 在Java当中,没有⽅法声明⼀说
1.5 方法的调用
方法需要被调用之后才能运行那怎么调用呢,接着往下看吧
用两个数相加来举例:
public class Test {
public static void main(String[] args){
//调用方法
int x = 1;
int y = 2;
int ret = add(1,2);
System.out.println(ret);
}
public static int add(int x,int y){
//方法的定义
return x + y;
}
}
【注意】
- 定义⽅法的时候, 不会执⾏⽅法的代码. 只有调⽤的时候才会执⾏.
- 调⽤⽅法的时候,需要使⽤
⽅法名+参数列表
的形式进⾏调⽤- 如果⽅法有返回值,需要接收返回值结果
【练习】:计算 1! + 2! + 3! + 4! + 5!
博主在【Java】——程序逻辑控制(构建稳健代码的基石)中写过这个题,但使用函数调用之后就不用在套用,会变得更有条理,更容易让人看懂,下面是
三种方法
,大家可以体会体会
第一种:
public class Test {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <=5; i++) {
int ret = 1;
for(int j = 1;j <= i;j++){
ret *= j;
}
sum += ret;
}
System.out.println(sum);
}
}
第二种:
public class Test {
public static void main(String[] args){
int facSum = facSum(5);
System.out.println(facSum);
}
public static int facSum(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) {
int ret = 1;
for (int j = 1; j <= i; j++) {
ret *= j;
}
sum += ret;
}
return sum;
}
}
第三种
public class Test {
public static int facSum(int n){
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += fac(i);
}
return sum;
}
public static int fac(int n){
int ret = 1;
for (int j = 1;j <= n;j++){
ret *= j;
}
return ret;
}
public static void main(String[] args) {
int facSum = facSum(5);
System.out.println(facSum);
}
}
执行结果:
【总结】
- ⼀个⽅法可以被多次调⽤
- 使⽤⽅法, 避免使⽤⼆重循环, 让代码更简单清晰.
1.6 实参和形参的关系
⽅法的
形参
相当于数学函数中的⾃变量,⽐如:1 + 2 + 3 + … + n的公式为sum(n) = ((1+n)*n) / 2
Java中⽅法的形参就相当于sum函数中的⾃变量n,⽤来接收sum函数在调⽤时传递的值的。形参的
名字可以随意取,对⽅法都没有任何影响,形参只是⽅法在定义时需要借助的⼀个变量,⽤来保存⽅ 法在调⽤时传递过来的值。
public class TestMethod {
public static void main(String[] args) {
//调⽤⽅法
int ret = getSum(10); // 10是实参,在⽅法调⽤时,形参N⽤来保存10
System.out.println("ret = " + ret);
}
public static int getSum(int N) {
// N是形参
return (1+N)*N / 2;
}
}
注意:
- 在Java中,实参的值永远都是拷⻉到形参中,形参和实参本质是两个实体
- 实参传值给形参,必须做到类型匹配,顺序匹配,个数匹配
【示例】:交换实参的值
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("交换前:a = " + a + " b = " + b);
swap(a,b);
System.out.println("交换后:a = " + a + " b = " + b);
}
public static void swap(int x,int y){
int tmp = x;
x = y;
y = tmp;
}
}
运行结果:
【解释】
实参a和b是main⽅法中的两个变量,其空间在
main⽅法的栈
(⼀块特殊的内存空间)中,⽽形参x和y
是swap⽅法中的两个变量,x和y的空间在swap⽅法运⾏时的栈
中,因此实参a和b与形参x和y是两个没有任何关联性的变量,在swap⽅法调⽤时,只是将实参a和b中的值拷⻉了⼀份传递给了形参x和y,因此对形参x和y操作不会对实参a和b产⽣任何影响。
在Java当中是⽆法获取栈上的局部变量的地址的,如果要发⽣实参的交换,我们需要具备
类和对象
的知识
1.7 返回值
⽅法的返回值是⽤来接收⽅法运⾏之后,需要传递出去的值的。但是有的⽅法没有返回值,如果有返回值的情况下,我们需要注意返回值的数据类型需要匹配。
返回值可以⽀持链式表达式:
public class Test {
public static void main(String[] args){
//调用方法
int x = 1;
int y = 2;
int ret = add(1,2)+100;//链式表达式
System.out.println(ret);
}
public static int add(int x,int y){
//方法的定义
return x + y;
}
}
so:
- 返回值在接收过程当中需要匹配
- 没有返回值的情况下,⽅法的返回值类型为void
- ⼀个⽅法是否有返回值需要视情况⽽定
2.方法重载
2.1 为什么需要⽅法重载
当既想计算两个整数相加,也想计算两个⼩数相加的时候,此时会出现参数类型不匹配的情况,如下:
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = add(a,b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = add(a2,b2);
System.out.println("ret2 = " + ret2);
}
public static int add(int x,int y){
return x + y;
}
}
下面是一个比较愚蠢的方法:
提供两个方法,分开计算虽然不会报错,但需要提供许多不同的方法名
,就比较麻烦.不过重载
就可以解决这个问题
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = add(a,b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = addDouble(a2,b2);
System.out.println("ret2 = " + ret2);
}
public static int add(int x,int y){
return x + y;
}
public static double addDouble(double x,double y){
return x + y;
}
}
2.2 方法重载的概念
中华文化博大精深,很多词语都有不一样的含义,那这就说明该词语被重载了,在Java中,如果多个⽅法的名字相同,参数列表不同,则称该⼏种⽅法被重载了。
public class Test {
public static void main(String[] args) {
add(1,2); //调⽤add(int, int)
add(1.1,2.2);//调⽤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;
}
}
注意:
- ⽅法名必须相同
- 参数列表必须不同(
参数的个数不同、参数的类型不同、类型的次序必须不同
)- 与返回值类型是否相同⽆关
- 编译器在编译代码时,会对实参类型进⾏推演,根据推演的结果来确定调⽤哪个⽅法
- 两个⽅法如果仅仅只是因为返回值类型不同,是不能构成重载的
2.3 方法签名
⽅法签名:经过编译器编译修改过之后⽅法最终的名字。
具体⽅式:⽅法全路径名+参数列表,构成⽅法完整的名字
方法签名手册
【总结】
Java方法是Java编程中非常重要的概念,通过合理地定义和使用方法,可以使代码更加模块化、易于维护和复用。本文介绍了Java方法的定义、调用、参数、返回值、重载、等方面的知识。希望通过这些内容,能帮助Java小白们深入理解和掌握Java方法的使用,为后续的Java学习和编程实践打下坚实的基础。在实际编程中,多练习、多思考,不断积累经验,才能更加熟练地运用方法来解决各种复杂的问题。