1.什么是方法
说白了,方法就是把功能相同的代码,封装起来,以供重复使用。
2.方法的书写格式
修饰符 返回值类型 方法名(形参列表) {
需要执行的代码;
return 返回值;
}
/**
* public static 修饰符
* int 返回值类型
* sum 方法名称
* int a,int b 形参列表
*
* @param a
* @param b
* @return
*/
public static int sum(int a, int b) {
return a + b;
}
3.方法要怎么调用?
方法定义后,必须调用才可以跑起来
4.方法的注意点?
* 方法申明了具体的返回值类型,内部必须使用return发挥对应类型的数据
* 形参列表可以有多个,也可以没有;如果有多个形参,需要用逗号隔开,且不能初始值
5.使用方法的好处是?
* 提高了代码的复用性,提高了开发效率
* 让代码逻辑更加清晰
完整代码展示:笔者在代码做了详细的代码注释。
public class demo1 {
public static void main(String[] args) {
/**
* 方法如何执行?
* 方法定义后,必须调用才可以跑起来
*/
//如果在代码中仍需要求两个数相加,那么就可以调用整个函数,不需要重复写代码
int sum = sum(1, 2);
System.out.println(sum);
System.out.println(sum(2, 3));
/**
* 方法的注意点:
* 方法申明了具体的返回值类型,内部必须使用return发挥对应类型的数据
* 形参列表可以有多个,也可以没有;如果有多个形参,需要用逗号隔开,且不能初始值。
*
*/
/**
* 使用方法的好处是?
* 提高了代码的复用性,提高了开发效率
* 让代码逻辑更加清晰
*/
}
/**
* public static 修饰符
* int 返回值类型
* sum 方法名称
* int a,int b 形参列表
*
* @param a
* @param b
* @return
*/
public static int sum(int a, int b) {
return a + b;
}
}
6.如何设计方法?
按照实际业务需求,主要需要考虑两个问题:
1.方法时候需要接收数据处理。
2.方法是否需要需要返回值。
注意事项:如果方法不需要返回值,则返回值必须声明void,这个时候,方法内部不可以使用return返回数据。
方法不需要接收数据,则不需要定义形参,则调用方法时也不可以传数据给到方法值,否则会报错。
没有参数,且返回值类型为void的方法,叫做无参数,无返回值的方法,以此类推。
如代码所示:代码中举了一些案例。
public class demo2 {
public static void main(String[] args) {
//如果只是打印三次hello world 这里就不要返回值,也不要参数
printHelloWorld();
System.out.println("*------*");
//如果要自定义打印多少次hello world 这里就不要返回值,需要要参数
printHelloWorld(5);
System.out.println("*------*");
//如果只需要一个固定的值,这里就不需要参数,但是有返回值
System.out.println(add());
System.out.println("*------*");
//如果需要计算两个数的值,这里就需要参数,也需要返回值
int add = add(3, 8);
System.out.println(add);
}
//这类叫做 无参数无返回值方法
public static void printHelloWorld() {
for (int i = 1; i <= 3; i++) {
System.out.println("hello world");
}
}
//这类叫做 有参数无返回值方法
public static void printHelloWorld(int n) {
for (int i = 1; i <= n; i++) {
System.out.println("hello world");
}
}
//这类叫做有返回值,无参数的方法
public static int add() {
return 5;
}
//这类叫做有返回值,有参数的方法
public static int add(int a, int b) {
return a + b;
}
}
7.使用方法可能会出现的问题
1.每个方法的顺序没有要求,但是一个方法不能卸载另一个方法的内部。
-
方法不需要接收数据,则不需要定义形参,则调用方法时也不可以传数据给到方法值,否则会报错。(这个我前面也讲过了)
-
在方法中,return语句下面不能再编写代码了,执行方法整个代码的时候,执行return之后就结束了,后面的代码就是无效代码。
-
方法如果没有调用它就不会执行,就待在那里,等着你去调用它。(这个我前面也讲过了)
-
给方法传参数时,方法中有几个形参或者什么类型的形参,就必须给它几个参数或则什么类型的参数,不要随意传参,会报错。
-
调用有返回值的方法,有三种方法,1)可以定义一个变量接收方法产生的结果。2)直接输出调用。3)也可以直接调用
-
调用无返回值的方法,就直接调用就好了。
在这里笔者就不做代码分析了,如果大家在使用方法时遇到了问题可以对照以上7条进行修改。
8.方法的小例子-代码展示
public class demo4 {
public static void main(String[] args) {
//判断一个整数是奇数还是偶数
isPri(3);
}
public static void isPri(int n) {
if (n % 2 == 0) {
System.out.println(n + "是一个偶数");
} else {
System.out.println(n + "是一个奇数数");
}
}
}
public class demo3 {
public static void main(String[] args) {
//求1-n的和
int add = add(5);
System.out.println("第一种输出方法" + add);
System.out.println("第二种输出方法 " + add(6));
//直接调用,但是没什么多大用处,因为你并没有拿它的返回值做操作。
add(7);
}
public static int add(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
}
9.方法在计算机中的执行原理
方法被调用的时候,是进入到栈内存中运行。
栈的特点:先进后出,用完丢弃。
那么方法为什么要在栈中运行自己呢?
保证一个方法调用完另一个方法后,可以回来。
10. java的参数传递机制
这里讲一下java的参数传递机制,java的参数传递机制都是-值传递
10.1 什么是值传递呢?
其实就是传输实参给方法的形参的时候,传输的是实参变量中存储的值的副本。
10.2 什么是实参?
在方法内部定义的变量。
10.3什么是形参?
在方法定义的时候里面的参数。(这个我在前面的代码中有注释)
public class demo5 {
public static void main(String[] args) {
int a = 10;
change(a);
/**
* 在这里我们会发现a3的值是10 , a1的值是10,a2的值是20
* 为什么呢?
* 也为当我们写change(a)的时候实际上是change(10);
* 也就是说我们把10传给了方法的形参,方法内部没有去改变这个值
*/
System.out.println("a3:" + a);
/**
* 在这里也是一样的
*/
int b =10;
changeNum(b);
System.out.println("b3" + b);
/**
* 那么我们要怎么样才能改变这个值呢
* int c =10;
* 我们需要把方法中放回的值重新赋值给b才可以
* 如代码所示
*/
int c = changeNum(b);
System.out.println("b4" + c);//这里 b的值才改成了20
}
public static void change(int a) {
System.out.println("a1:" + a);
a = 20;
System.out.println("a2:" + a);
}
public static int changeNum(int b) {
System.out.println("b1:" + b);
b = 20;
System.out.println("b2:" + b);
return b;
}
}
10.4引用类型的参数传递
先用代码做个案例。
public class demo6 {
public static void main(String[] args) {
int[] nums = {11, 22, 33, 44, 55};
changeNum(nums);
System.out.println("在main方法中" + nums[1]);
}
public static void changeNum(int[] arr) {
System.out.println("方法一:" + arr[1]);
arr[1] = 222;
System.out.println("方法二:" + arr[1]);
}
/**
方法一:22
方法二:222
在main方法中222
*/
}
那么在这里我们可以看到,这里的结果和上面的基本类型的参数传递。
解释:在数组那一章我解释过,nums存储的是数组的地址值,那么在main方法中在使用
changeNum(nums);的时候会把地址值传给方法的形参,当执行了arr[1] = 222;的时候,方法中的arr存储的和nums的地址值是一样的,所以会改变数组的值。
如果不好理解的话笔者在下面笔者在下面画个图方便大家理解。
11.基本类型和引用类型的参数在传递的时候有什么不同?
1.他们都是值传递
2.基本类型的参数传输的数据值
3.引用类型的参数传输存储的地址值
做一个案例,来加强大家学习。
public class demo7 {
public static void main(String[] args) {
//输出打印一个数组 数组的格式 [11,22,33,44,55]
int[] nums = {11, 22, 33, 44, 55};
printArr(nums);
int[] ages = null;
printArr(ages);
}
public static void printArr(int[] arr) {
/**
* 在讲解数组的时候,笔者讲解过
* 如果数组为null,打印的时候会报错
*/
if (arr == null) {
System.out.println("您传递的数组为null");
return;
}
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
//这里用的是三元运算符
//这里需要注意的是数组的最后一个元素的后面没有逗号
System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ",");
}
System.out.println("]");
}
}
/**
运行结果:
[11,22,33,44,55]
您传递的数组为null
*/
12.方法重载
一个类中,出现多个方法的名称相同,但是它们的形参不同,那么这些方法我们就称为方法重载。
注意事项:
一个类中,只要一些方法的名称相同、形参列表不同,那么它们就是方法重载,其他可以不管(比如修饰符,返回值类型是否一样都无所谓)
形参列表不同包括:形参的个数,类型,顺序不同,不关心形参的名称。
使用场景:
提供多种解决方案。
13. return关键字
return在方法中可以单独使用,书写格式是 return; 它的作用是立即跳出并结束当前方法的执行。
比如这段代码
public static void printArr(int[] arr) {
/**
* 在讲解数组的时候,笔者讲解过
* 如果数组为null,打印的时候会报错
*/
if (arr == null) {
System.out.println("您传递的数组为null");
return;
}
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
//这里用的是三元运算符
//这里需要注意的是数组的最后一个元素的后面没有逗号
System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ",");
}
System.out.println("]");
}
14return break 和continue的区别。
return | 跳出并立即结束所在方法的执行 |
break | 跳出并结束当前所在循环的执行 |
continue | 结束当前所在循环的当次继续,进入下一次执行 |
注意:本篇文章是笔者的学习心得,因为笔者的能力有限,会出现许多没有想到的问题,如果您在浏览或者运行代码的时候出现了问题,还请您能在评论区留言,笔者看到后会在第一时间处理。