作者: 小飞学编程…_CSDN博客-编程小白
专栏:JavaSE
标题:Java-方法的使用
Java 方法的使用
一.方法的通俗理解
想象一下,你在家里想做一盘西红柿炒鸡蛋。
需要什么呢???
制作西红柿炒鸡蛋步骤:
1.准备材料:西红柿,鸡蛋,蒜,等各种调味品;
2.开始行动:①切西红柿,②打鸡蛋,并进行搅拌鸡蛋;③炒鸡蛋
3.开始做饭:首先向锅中加食用油,待油热,放入蒜末炒香,加入切好的西红柿,进 行加热,并加入盐,味精,生抽等进行入味,等到西红柿炒出汁水,加入炒好的鸡蛋,进行入味,差不多即可出锅
4享用美食:将炒好的西红柿炒鸡蛋倒入盘中享用。
5.本人作品展示哈。。
在上面的步骤中,我们不单单是为了了解西红柿炒鸡蛋啊!!!!!
关键我要在此进行类比java中的方法:
①:食材(西红柿,鸡蛋等)对应参数;
②:做饭步骤(开始做饭)对应 代码;
③:一盘西红柿炒鸡蛋 对应 返回值;
通过上述现实生活的中方法的介绍....
就能更好的对应java中方法的学习;
下面我就进行java中方法的讲解;
二.方法概念及使用
1.什么是方法:
方法就是一个代码块,类似与C语言中的函数。
做“西红柿炒鸡蛋”这盘菜,就好像java中的一个方法,经过
①:食材(西红柿,鸡蛋等)对应参数;
②:做饭步骤(开始做饭)对应 代码;
③:一盘西红柿炒鸡蛋 对应 返回值;
这三步就得到一个对应的方法。
这样你每次想吃西红柿炒鸡蛋的时候就可以使用这个方法,这样对于代码来说,你就可以直接调用这个方法进行实现西红柿炒鸡蛋这盘菜了;
2.方法的定义;
①方法的语法格式:
修饰符 返回值类型 方法名称([参数类型 形参.....){
方法体代码;
return 返回值;
}
②方法示例
示例一:实现一个方法,检查一个年份是否为闰年;
判断一年是不是闰年的条件:
①能被4整除但不能被100整除;
②能被400整除;
①和②满足一个就可以;
public class Method{
//方法定义
public static boolean isleapYear(int year){
if((0==year%4&&0!=year%100)||0==year%400){
return true;
}else{
return false;
}
}
}
代码解析;
示例二:实现;两个整数相加的方法
public class Method{
// ⽅法的定义
public static int add(int x, int y) {
return x + y;
}
}
③注意事项
3.方法的调用
现在我们会写方法了,
我发现
①:方法写好了,是不是可以直接运行呢???
② :方法的执行需要被调用,那么方法怎么调用呢????
根据代码进行问题解决;
①代码展现
public class Method{
// ⽅法的定义
public static int add(int x, int y) {
return x + y;
}
public static void main(String[] args) {
//调⽤⽅法
int ret = add(1,2);//add方法有返回值,需要进行定义变量ret进行接收;
System.out.println("ret = " + ret);//进行结果值的输出;
int ret2 = add(3,4);
System.out.println("ret2 = " + ret2);
}
}
②代码解析
1.定义⽅法的时候, 不会执⾏⽅法的代码. 只有调⽤的时候才会执⾏.
2. 调⽤⽅法的时候,需要使⽤⽅法名(参数列表)的形式进⾏调⽤
3. 如果⽅法有返回值,需要接收返回值结果
4.一个方法可以被多次调用;
4.实参和形参的关系
通俗意义上讲:实参与形参的关系相当于数学中函数的f(x)=x+2;
形参相当于自变量x,用于接收实参传进来的x的值。
形参只是⽅法在定义时需要借助的⼀个变量,⽤来保存⽅法在调⽤时传递过来的值。
①注意事项:
我们根据上图会发现
①实参和形参是一一对应的,(类型,顺序,个数)都是一致的。
②在Java中,实参的值永远都是拷⻉到形参中,形参和实参本质是两个实体
②经典案例
下面我通过一个案例进行分析,让大家再更加强化对形参与实参关系的理解;
public class TestMethod {
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 = 10 b = 20
交换后: a = 10 b = 20
答案有点出乎我们的意料
这不是进行传值交换了吗?
为什么交换前后的值不变呢?
我们还记得,当时注意事项中说过:形参和实参本质是两个实体,
而现在再看看上述代码:
我们只是将实参的值传递给了形参,形参在内部干了什么实参什么都不知道,
并且swap()方法无返回值也没有进行值的接收,
所以现在问我们实参交换前后的值是怎么样的,那肯定没有变啊!!!!!
那我想问一个问题了:如果我想实参的值交换前后发生改变该怎么办呢??
在Java当中是⽆法获取栈上的局部变量的地址的,
如果要发⽣实参的交换,我们需要具备类和对象的知识,
后续在讲解完类和对象之后,我们会讲解⼀个合理的做法。
5.关于返回值
⽅法的返回值是⽤来接收⽅法运⾏之后,需要传递出去的值的
关于方法的返回值来说,有两种情况:
①有返回值:
②无返回值:
③注意事项
1.如果有返回值的情况下,我们需要注意返回值的数据类型需要类型匹配;
2.如果没有返回值,我们需要注意,不能接受该⽅法返回值,返回值类型为void
④返回值支持链式表达式
下面我已一个例题来理解什么是链式表达式;
题⽬:计算连续数字1到N之间的和,将其计算得到的结果扩⼤为2倍
计算方法:*(首项+末项)项数/2
public class TestMethod {
public static void main(String[] args) {
//调⽤⽅法
int ret = getSum(10) * 2;
System.out.println("ret = " + ret);
}
public static int getSum(int N) { // N是形参
return (1+N)*N / 2;//
}
}
观察上述代码我们发现:
①:getSum()方法有返回值;
②在main()方法中使用ret变量进行了接收,并且在接收的时候进行了对接收值的扩大;
其中,这一扩大方法就是我们所谓的链式表达式
③优点:大大减少了我么的代码量,并且可以使得我们的代码简洁高级;
三.方法重载
1.什么是方法重载?
我们先从生活角度进行理解重载…
我先给大家讲一个故事:
一天,作为程序员的小明,对弟弟说我们上班真累啊,累就累吧,挣得钱还很少,我感觉我就是公司里的***牛马,这是他的弟弟说:哥你也长的不像牛马啊,不要这样说,于是小明笑了笑又去敲代码去了;
在生活中我们可以分清楚俩个牛马是什么,但是电脑作为机器不懂,这是就需要我么的方法重载了。。。。
①概念
在Java中,如果多个⽅法的名字相同,参数列表不同,则称该⼏种⽅法被重载了。
②代码体现
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;
}
}
代码分析
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)
我们从调用角度来观察:这三个方法就构成了重载,先不考虑返回值类型。
我们发现
这几个实参类型不同,
实参个数不同,
实参顺序也不同,
,并且方法名都为add,(对比牛马理解,此牛马非牛马)
正好与我们的方法重载概念完全符合,
注意事项
- ⽅法名必须相同
- 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
- 与返回值类型是否相同⽆关
- 编译器在编译代码时,会对实参类型进⾏推演,根据推演的结果来确定调⽤哪个⽅法
2.为什么要用方法重载呢??(方法重载的作用)
经过上述方法重载的学习,我们也了解了方法重载,
我们只是知道了它是什么,但是对它怎么样用??都是有疑惑的,
下面我们就一起来学习方法重载的用途。。。。。
问题:当既想计算两个整数相加,也想计算两个⼩数相加的时候:
记得当时我想到了两个方法:
①方法一,直接调用add方法;
public class TestMethod {
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 TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = addInt(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 addInt(int x, int y) {
return x + y;
}
public static double addDouble(double x, double y) {
return x + y;
}
}
编译正确,但是感觉add方法没有很好,类型不同就需要重新定义不同的add方法,使得代码很繁琐。
现在回想我们上述方法重载概念时用到的方法;
③方法重载的使用;
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;
}
}
编译成功,代码简洁高效,受益匪浅;
四.总结
我们根据上述内容的学习要
1.掌握⽅法的定义以及使⽤
2.掌握⽅法传参
3. 掌握⽅法重载
在后续的学习会一直伴随着它们的使用,上述内容的理解对后续的学习有很大的作用。