欢迎来到【开开心心学java~快快乐乐写代码】此专栏,今天我将给大家来分享一下java中的方法的概念和使用,关于方法的重载等等更深层次的知识我将会在下一篇博客中仔细讲解。本章内容虽然很简单,但我依旧也是会讲的很详细的哦。
1、引用例子:
临近高考,好多学生都出现了压力大,难以排解的问题,他们都选择了与老师进行沟通,以下是他们的沟通内容:
过了几天,又有好几个同学有同样的问题,跟老师说压力好大,不知道该怎么学习了。这时老师不得不把之前重复做的工作再做一遍。这时老师心想,说不定以后还会有更多人来问同样的问题,也许还有同学不好意思问,于是,老师写了一篇帖子,发到了学校论坛上:
然后将帖子的链接发到群中,说:最近压力大的同学看这里,https://www.xxx.com ,学生点击链接就可以看到帖子的内容。
通过以上案例我们可以发现:
1.老师将学生普遍的问题整理成帖子,减少了重复性工作,然后就有时间解决同学更多的问题。
2. 同学点击链接,就可以进入帖子进行阅读,问题得到解决。
3. 学生随机可以点击链接阅读,而不需要一遍一遍和老师做重复的事情。
在编程中也是一样,某段功能的代码可能频繁使用到,如果在每个位置都重新实现一遍,会:
1. 使程序变得繁琐
2. 开发效率低下,做了大量重复性的工作
3. 不利于维护,需要改动时,所有用到该段代码的位置都需要修改
4. 不利于复用
因此,在编程中,我们也可以将频繁使用的代码封装成"帖子"(方法),需要时直接拿来链接(即方法名--方法的入口地址)使用即可,避免了一遍一遍的累赘。
2、方法的概念及使用:
2.1 什么是方法
方法就是一个代码片段,类似于c语言中的函数一样。方法存在的意义:
(1)是能够模块化的组织代码(当代码规模复杂时)。
(2)做到代码可以被重复利用(一份代码可以在多个地方使用)。
(3)让整个工程更具可读性,更好理解,更简单。
(4)直接调用现有方法开发,不必重复造轮子。
比如:现在要开发一款日历,在日历中经常要判断一个年份是否为闰年,则有如下代码:
int year = 1900;
if((0 == year % 4 && 0 != year % 100) || 0 == year % 400){
System.out.println(year+"年是闰年");
}else{
System.out.println(year+"年不是闰年");}
以上只是用来实现此功能一代码段,那方法又该如何来定义呢?
2.2 方法定义
方法语法格式:
//方法定义
修饰符 返回值类型 方法名(参数类型 变量 1,参数类型 变量2...){
方法体代码;
return 返回值;//若没有返回值则不用写}
修饰符有public,static,private,protected等,在方法里面有什么作用之后再来给大家讲解哈。
注意事项:
(1)方法名字:方法名建议使用小驼峰形式 (及当方法名由多个单词组成时,首个单词全部小写,从第二个单词开始,首字母大写)。
(2)返回值:方法的返回值类型要与返回的实际类型一致,若没有返回值,则必须写成void。
(3)参数:如果方法没有参数,则()里面什么都不用写,如果有参数,则需要写明参数类型,多个参数之间用逗号隔开。
(4)方法体:方法内部要执行的语句。
(5)在java中,方法必须要写在类里面。
(6)在java中,方法不能嵌套定义。
(7)在java中,方法没有声明这一说。
示例一:实现一个函数,检测一个年份是否为闰年
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 sum(int x,int y){ return x+y; } }
2.4 方法调用的执行过程
调用方法-->传递参数-->找到方法地址-->找到被执行的方法体-->方法结束返回-->回到主调方法继续往下执行
注意:定义方法的时候,一般不会执行方法体,只有调用方法的时候,才会执行。一个方法可以被多次调用。
代码示范:计算1! + 2! + 3! + 4! + 5!的值
public class Test {
public static void main(String[] args) {
int sum=0;
for(int i=1;i<=5;i++) {
sum += fac(i); //方法fac()被多次调用
}
System.out.println(sum);
}
public static int fac(int x){
int mul=1;
for(int i=1;i<=x;i++){
mul*=i;
}
return mul;
}
}
2.5实参和形参的关系
形参只是方法在定义时需要借助的一个变量,用来接受方法被调用时传过来的值。 形参只有在方法被调用时才会被分配空间。在基本类型中,形参是实参的一份临时拷贝,形参与实参本质上是两个独立的实体。形参的名字可以任意取,对方法没有影响。
比如:
public static void main(String[] args) { int ret=add(2,3);//2,3是实参,在方法调用时,x用来保存2,用来保存3 System.out.println(ret); } public static int add(int x,int y){ //x,y是形参,用来保存调用此方法时传递过来的2,3 return x+y; }//运行结果
5
我们再来看一个例子:交换两个整型变量
public class Test{
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 = 2
从中我们可以发现x和y的值发生了互换,但是a和b的值没有发生互换,还是和之前一样。这是为什么呢?
原因:上面说过,对于基础类型来说,形参只是实参的一份临时拷贝,即传值调用。它们是两个独立的实体,对形参的一顿操作是改变不了形参的。就好像你复制了你朋友写的一篇论文(在这里,2和3就相当于是你朋友的那篇论文,而x,y就相当于是你复制过去的那篇论文。),然后对你自己复制的那篇论文进行一系列的修改然后发表。最后可想而知你最后发表的那篇论文与你那个朋友的论文不一样,因为你手里的论文只是通过复制朋友的论文得来的,很显然通过改变这篇复制的论文并不能影响你朋友手里的那篇论文。
【解决办法】: 传引用类型参数 (例如数组来解决这个问题)
这个代码的运行过程, 后面学习数组的时候再详细解释.
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
2.6 没有返回值的方法
方法的返回值是可选的,没有返回值也可以, 但是返回值类型必须写void。
例如:
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
print(a, b);
}public static void print(int x, int y) {
System.out.println("x = " + x + " y = " + y);
}}
//运行结果
x=10 y=20
以上就是我要今天分享的内容啦,后续我还会继续更新的哒,常看我的博客会学到很多知识哦