文章目录
一、体验一下方法
这里我们先来体验一下方法,先不了解其怎么使用。
1. 不使用方法
publicclassTest1{publicstaticvoidmain(String[] args){int a =10;int b =20;int c =30;int d =40;int sum1 = a + b;int sum2 = b + c;int sum3 = c + d;
System.out.println(sum1);
System.out.println(sum2);
System.out.println(sum3);}}
结果为:
在我们没有学习方法时,当重复实现一个加法(功能),总是要把其解题方法重新写一遍,这样麻烦了。
2. 使用方法
publicclassTest2{publicstaticintadd(int a,int b){return a + b;}publicstaticvoidmain(String[] args){int a =10;int b =20;int c =30;int d =40;int sum1 =add(a, b);int sum2 =add(b, c);int sum3 =add(c, d);
System.out.println(sum1);
System.out.println(sum2);
System.out.println(sum3);}}
我们可以看到其结果和不使用方法时一样:
那有人就会说,哎呀这使用方法明明比不使用的时候更加麻烦呀,这么认为是错误的,我们这里实现加法时,比较容易写,代码量少,当到后面时,一个解题方法会有十几二十行甚至更多,这时候不使用方法会显得很麻烦和凌乱。同时使用方法时可增加代码的可读性,是代码更加简洁。
二、方法的定义及调用
1. 方法的定义
可以认为方法是一段可以重复利用的代码片段,是可以解决某一问题的。
注:方法必须定义在类体内,可以放在类体前,也可以放在类体最后或其他位置,不像 C 放在后面的话需要在开头声明,因为当执行到调用语句时,它就会在相应类体内寻找该方法。
[修饰符列表] 返回值类型 方法名(形式参数列表) {
方法体;
}
注:
方法体由 Java 语句构成。
方法定义之后需要调用,不调用则不会执行。
- 修饰符列表: 目前统一写成
public static
,后面再去了解。- 返回值类型: 返回值类型可以为 Java 中所有合法的数据类型,Java 中的数据类型包括基本数据类型和引用数据类型,所以可以使用的类型有:
byte、short char、int、long、double、float、boolean、String
…等等。- 有返回值: 当有返回值时,就必须使用
"return 值";
返回一个于返回值类型相对应的类型,否则会报错,如:返回值类型为 int , 我们就必须返回一个 int 类型,return 10;
(int类型)- 无返回值: 当不返回值时,不能空在哪里,需要使用关键字 void 表示无返回值, 如果返回值类型是void,那么在方法体当中不能有
“return 值;”
这样的语句。但是可以有“return;
”语句。这个语句“return;”的作用就是用来终止当前方法的- 除了 void 外 剩下的都需要使用
"return 值";
语句返回一个与返回值类型相对应的值。- 方法名: 方法名应遵守驼峰式命名,见名知意,开头首单词字母小写,后面单词首字母大写。
- 形式参数列表: 形式参数列表中的每一个参数都是“局部变量”,方法结束之后内存释放。 形参可以是 0~n 个,主要看实参传什么类型就用什么类型接收。 使用:
public static int add(int a, String str) {}
,形参之间用逗号隔开。
2. 方法的调用
调用方法:方法名(实数参数列表);
注意:
- 实参的类型和形参的类型必须一一对应(注意自动转化类型),同时个数也必须相同,可以是0~n个。并且实参是有数据的。例:
publicclassTest3{publicstaticvoidtest(int a, String b){
System.out.println(str);}publicstaticvoidmain(String[] args){int len =10;
String str ="abc";test(len, str);}}
我们来看看这段代码能不能执行:
publicclassTest2{publicstaticintadd(int x,int y){return x + y;}publicstaticvoidmain(String[] args){byte a =10;byte b =20;int ret =add(a, b);
System.out.println(ret);}}
这段代码并没有报错,因为 byte 会自动转化为 int 类型
- 当有返回值时,可以用对应的类型进行接收返回值,如:“return 10;” 则可以用 “int ret = 方法名(实数参数类型);” 这样的语句进行接收。
publicclassTest3{publicstaticintadd(int a,int b){return a + b;}publicstaticvoidmain(String[] args){int c =10;int d =20;int ret =add(c, d);//用ret接收add的返回值即a+b的值
System.out.println(ret);}}
如果有返回值,无论返回值是什么类型,其返回值只有一个。
在 Java 中,实参和形参是在两块不同的局部变量,即相当于我们的赋值,如"int a = 10; int b = a;" 即将 a 的值复制一份给 b 并不会改变 a 的值。即实参只是复制一份数据给形参,这种叫做传值调用。
例:
publicclassTest3{publicstaticvoidswap(int x,int y){int tmp = x;
x = y;
y = tmp;
System.out.println("x="+ x +" "+"y="+ y);}publicstaticvoidmain(String[] args){int a =10;int b =20;swap(a, b);
System.out.println("a="+a +" "+"b="+ b);}}
其运行结果为:
交换 x、y的值并不会改变 a、b的值。
- 因为实参和形参在不同的方法内,所以其局部变量的名字可以相同。
publicclassTest4{publicstaticintadd(int a,int b){return a + b;}publicstaticvoidmain(String[] args){int a =5;int b =10;int ret =add(a, b);
System.out.println(ret);}}
其结果为:
我们可以看到并没有报错。
- 当调用方法时,此方法不在调用的类中,而在另一个类中,需要这样调用:类名.方法名(实参);
publicclassTest4{publicstaticvoidmain(String[] args){int a =5;int b =10;int ret = One.add(a, b);
System.out.println(ret);}}classOne{publicstaticintadd(int a,int b){return a + b;}}
其结果为:
三、练习
学完方法我们则写一些练习加深对方法的理解。
1. 写一个判断是否为素数的方法。
素数一般指质数,质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
publicclassTest5{publicstaticbooleanisPrimeNumber(int n){for(int i =2; i <= Math.sqrt(n); i++){if(n % i ==0){//不是素数返回falsereturnfalse;}}returntrue;//是素数返回true}publicstaticvoidmain(String[] args){for(int i =2; i <=100; i++){if(isPrimeNumber(i)){//是素数则打印
System.out.print(i +" ");}}}}
Math.sqrt() 是求根号的意思。假如一个数N是合数,它有一个约数a,a×b=N 如果 a < b ,则 b 大于或等于根号N,a 小于或等于根号N。如果取a ==2开始用 n % a != 0,一直到 a 小于等于 n 的根号即说明 n 是素数。
其结果为:
2. 写一个方法打印乘法表,可以为9 * 9也可以为10*10…
import java.util.Scanner;publicclassTest6{publicstaticvoidmulTable(int n){for(int i =1; i <= n; i++){//行for(int j =1; j <= i; j++){//列
System.out.print(j +"*"+ i +"="+ j*i +" ");}
System.out.println();}}publicstaticvoidmain(String[] args){
Scanner num =newScanner(System.in);int n = num.nextInt();mulTable(n);}}
当 n == 9 时其结果为:
当 n == 10 时其结果为:
3. 写一个方法判断是不是闰年
publicclassTest7{publicstaticbooleanisLeapYear(int n){if((n %4==0&& n %100!=0)|| n %400==0){returntrue;}returnfalse;}publicstaticvoidmain(String[] args){for(int i =1000; i <=2000; i++){if(isLeapYear(i)){
System.out.print(i +" ");}}}}
其结果为:
当然后面还有这里显示不完。
好了,本章节方法的使用讲完了,因博主能力有限,如有发现不足和错误,请提出,谢谢各位大佬。
版权归原作者 没完没了的麦当 所有, 如有侵权,请联系我们删除。