方法
文章目录
方法介绍
- Java中的方法等同于C语言中的函数
- 是能够模块化的组织代码(当代码规模比较复杂的时候),做到代码被重复利用,一份代码可以在斗个位置是使用,让代码更好的理解,更为简单
- 可以直接调用现有的方法开发,不必重复造轮子、
设计方法的原则
- 方法的本意是功能块,就是某个功能的语句块的集合,我们设计方法的时候,最好保持方法的原子性:就是一个方法只完成一个功能,这样利于我们后期的扩展
- 方法名采用小驼峰的命名方式
方法的定义
方法代码实战
- 判断两个数值的最大值的需求:
- 使用不同的形式表示:
代码1:
public class Study1 {
/*求返回一个最大值*/
public static void main (String[] args) {
int num = max(99,100);
System.out.println("最大值为:"+num);
}
public static int max (int x,int y) {
return x > y ? x : y;
}
}
代码2:
public class Study1 {
/*求返回一个最大值的进一步探究*/
public static void main (String[] args) {
Study1 max = new Study1();
int num = max.max1(0,99);
System.out.println("最大值为:"+num);
}
public static int max2 (int x,int y) {
return x > y ? x : y;
}
}
代码3:
public class Study1 {
/*求三个数值的最大值的探究*/
public static void main (String[] args) {
Study1 max3 = new Study1();
int num = max3(1,10,100);
System.out.println("最大值为:"+num);
}
public static int max3 (int x,int y ,int c) {
int max = x > y ? x : y ;
max = max > c ? max : c;
return max;
}
}
代码4:
public class Study1 {
/* 求三个数值的最大值的进一步探究*/
public static void main (String[] args) {
int max = max4(max4(1,10),100);
System.out.println("最大值为:"+max);
}
public static int max4(int x,int y) {
if( x > y) {
return x;
} else {
return y;
}
}
}
上述代码: 第 5 行代码的解析:int max = max4 ( max4(1,10),100 );
- 首先从内向外,对(max4)中的 max4( 1, 10 )的方法调用,得到返回值,再对外部的 max4 (得到的返回值,100 );进行方法的i调用
- 化繁为简,大道至简;
方法的参数传递
- 方法的中在调用的时候才会栈帧 (开辟空间):开辟空间不是目的,保存数据才是目的,而数据是需要空间保存的,所以才通过开辟空间保存数据
- 有两种传递参数方式:
- 传值
- 传地址
- 而 Java 当中是没有传地址的说法,只有传值的说法
- 方法的形参,实参
- 所以形参的改变,不会对实参有任何的影响
- 经典例题
代码:
public class Study2 {
// 实参,形参的关系:交换两个数值
public static void main (String[] args) {
int a = 10;
int b = 100;
System.out.println("输出交换之前的数:"+"a ="+a+","+"b ="+b);
exchangeNum(a,b);
System.out.println("输出交换之后的数:"+"a ="+a+","+"b ="+b);
}
public static void exchangeNum(int num1 ,int num2) {
int tmp = 0;
tmp = num2;
num2 = num1;
num1 = tmp;
}
}
结果:
- 我们可以发现其两个数并没有被交换成功
- 其原因,请看下图:解析
方法的重载
-
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的形参列表。
-
方法名称**必须**相同
-
参数列表必须不同**(个数不同,或类型不同,或排列顺序不同)** 一定要满足其中的三个人中任意一个
-
方法重载与修饰符和返回类型无关
-
实现理论:
- 方法名称相同时,编译器会根据调用方法的参数的个数,参数类型等去逐个匹配,已选择对应的方法,如果匹配失败,则编译器报错。
-
下面验证:
参数个数不同
代码:
public class Study2 {
// 方法的重载探究
public static void main (String[] args) {
int threeSum = add(10,10,10);
System.out.println("三个数值的和 "+threeSum);
int twoSum = add(10,10);
System.out.println("两个数值的和 "+twoSum);
}
// 求两个数的和
public static int add (int x,int y) {
return x+y;
}
// 求三个数的和:
public static int add (int x,int y,int z) {
return x+y+z;
}
}
结果:
类型不同
代码:
public class Study2 {
// 方法的重载探究
/*参数类型的不同*/
public static void main (String[] args) {
System.out.println("两个浮点数的和:"+add(10.0,10.0));
System.out.println("两个整数的和:"+add(10,10));
}
/*求两个浮点数的和*/
public static double add (double x,double y) {
return x+y;
}
/*求两个整数的和*/
public static int add (int x,int y) {
return x+y;
}
}
结果
顺序的不同
- 其实你会发现顺序的不同和类型的不同是 一样的,只是参数的顺序不同,而已;
代码:
public class Study2 {
// 方法的重载探究
/*求顺序的不同*/
public static void main (String[] args) {
System.out.println("返回类型为double方法的调用的值:"+add(10,10.0));
System.out.println("返回类型int方法的调用的值:"+add(10.0,10));
}
public static double add (int x,double y) {
return x+y;
}
public static int add (double x,int y) {
return (int)(x+y);
}
}
结果:
方法的重载与返回类型是无关的
- 我们改变方法的返回类型是不行的,编译器会发生报错的
- 改变方法中参数的命名(自定义的标识符)也是不行的,编译器同样会报错呢
代码:
方法重载的报错原因:
- 方法同变量一样不可以重复定义,定义会开辟空间,不可以对同一个变量多次开辟空间,方法也是一样的不可以对同一个方法多次开辟空间,所以同一个变量,方法只能定义一次,
- 但是声明可以多次,声明不会开辟空间,只是告诉你有这么个东西。
- 关于定义,和声明更加详细介绍,可以移步到 <(93条消息) 一点都不安静的 ——static_月光下的编程魔术师的博客-CSDN博客>
方法的递归
- 因为方法的递归是一个重点,以及有一点不简单,所需要的篇幅可能会比较多,
- 这里就不多介绍了,想要了解的朋友可以移步止 :一递 + 一归 = 递归
最后:
每博一文案
人世间所有的相遇,其实都是前世注定每个人的所见所遇,皆是因为一场缘分。
虽然相遇每分每秒都在发生,但离别也每时每刻都在上演乍见之花,
永远抵不过九处,不厌璀璨烟火,永远比不上细水流年余生还请你珍惜这三种人:
- 珍惜那个主动联系你的人
- 珍惜业余花时间陪你人
- 珍惜那个整天惦记你的人
—————— 一禅心灵庙语
限于自身水平,其中存在的存在的错误希望大家给予指教,韩信点兵——多多益善!谢谢大家,后会有期,江湖再见!