7 方法
7.1方法的使用
7.1.1方法引入
public class MethodDemo {
public static void main(String[] args) {
//种菜人
System.out.println("播种");
System.out.println("施肥");
System.out.println("拔草");
System.out.println("浇水");
System.out.println("除虫");
System.out.println("收割");
//厨师
System.out.println("洗菜");
System.out.println("切菜");
System.out.println("炒菜");
System.out.println("装盘");
System.out.println("上桌");
//咱们
System.out.println("洗手");
System.out.println("吃菜");
}
}
上述问题:把所有功能都放到main()方法里,如果改某一个功能,显得main()太臃肿,不好维护,因此需要把这些功能分开,需要用到该功能,调用就可以了,方便维护,如下:
public class MethodDemo {
public static void main(String[] args) {
//种菜人
种菜人()
//厨师
厨师()
//咱们
咱们()
}
}
7.1.2方法介绍
1、问题
所有功能的代码都放在main()方法中写,会显得main()方法太乱,代码多,太臃肿->不好维护
解决:
将不同功能的代码放到不同方法中,想执行某个功能,直接调用方法名就可以了,对应的代码就执行起来,将来维护的时候,直接找到对应的方法,就可以对其进行修改维护。
2、方法:
拥有功能性代码的代码块
将不同的功能放在不同的方法中,给每个方法取名,直接调用方法名,对应的方法执行起来,好维护
3、通用定义格式:
修饰符 返回值类型 方法名(参数){
方法体
return 结果
}
4、通过通用格式,分为四种类型,如下:
a、无参无返回值
b、有参无返回值
c、无参有返回值
d、有参有返回值
7.1.3 无参无返回值
1、无参无返回值方法定义
public static void 方法名(){
方法体->实现此方法的具体代码
}
2、调用:直接调用
在其他方法中:方法名()
3、注意事项:
a、void关键字代表无返回值,写了void,就不要在方法中写return
b、方法不调用不执行,main()方法是jvm调用的
c、方法之间不能互相嵌套,方法是平级关系
d、方法的执行顺序只和调用顺序有关,谁先调用谁先执行。
4、各部分解释:
a、修饰符:public static
b、返回值类型:
该方法返回结果的数据类型,eg:return 1 -->返回结果为int类型
如果没有写返回值,就不要写具体的返回值类型了
c、方法名
d、参数:进入到方法内部参与执行的数据(数据类型 变量名)
e、方法体
实现该方法具体代码
f、return 结果,如果有返回值,可以利用return奖结果返回
public class MethodDemo {
public static void main(String[] args) {
zhongcai_people();
cook();
Me();
}
public static void zhongcai_people() {
System.out.println("播种");
System.out.println("施肥");
System.out.println("拔草");
System.out.println("浇水");
System.out.println("除虫");
System.out.println("收割");
}
public static void cook() {
System.out.println("洗菜");
System.out.println("切菜");
System.out.println("炒菜");
System.out.println("装盘");
System.out.println("上桌");
}
public static void Me() {
System.out.println("洗手");
System.out.println("吃菜");
}
}
7.1.4 有参无返回值
1、格式:
public static void 方法名(数据类型 变量名){
方法体
}
2、调用:直接调用
方法名(具体值)->调用的时候要给参数赋值
public class MethodDemo02 {
public static void main(String[] args) {
add(23, 5);
}
public static void add(int a,int b) {
int sum=a+b;
System.out.println("sum="+sum);
}
}
3、执行流程
7.1.5 无参有返回值
1、格式:
public static 返回值类型 方法名(){
方法体
return 结果
}
2、调用:返回值返回给谁?哪里调用返回给哪里。
a、打印调用:sout(方法名())--->不推荐使用
b、赋值调用:调用完之后用一个变量接收返回值结果---->推荐
数据类型 变量名=方法名()
public class MethodDemo3 {
public static void main(String[] args) {
//1、打印调用--->不推荐
System.out.println(add());
//2、还要使用sum方法结果,怎么办,使用赋值语句
int result=add();
System.out.println("result="+result);
}
public static int add() {
int a=23;
int b=5;
int sum=a+b;
return sum;
}
}
7.1.6 有参有返回值
1、格式:
public static 返回值类型 方法名(数据类型 变量名){
方法体
return 结果
}
2、调用:
赋值调用:调用完之后用一个变量接收返回值结果---->推荐
数据类型 变量名=方法名()
public class MethodDemo04 {
public static void main(String[] args) {
int result=add(23,5);
System.out.println("result="+result);
}
public static int add(int a,int b) {
int sum=a+b;
return sum;
}
}
3、形式参数和实际参数的区别
1.形式参数(形参):在定义方法的时候形式上定义的参数,此参数没有值
2.实际参数(实参):在调用方法的时候给形参赋具体的值
4、参数和返回值的使用时机
1.参数:当想将方法A的数据传递到方法B时,定义方法B时就需要带个参数,在方法A中调用方法B时,可以将方法A的数据通过参数传到方法B中
2.返回值:
调用方法A时,想要方法A的结果,去参与其他的操作,那么方法A 就需要将自己的结果返回
public class MethodDemo05 {
public static void main(String[] args) {
int i=34;
int j=56;
boolean result =compare(i,j);
System.out.println("result="+result);
}
public static boolean compare(int a,int b) {
if(a>b) {
return true;
}else {
return false;
}
}
}
运行结果:
result=false
7.1.7 方法注意事项
1、方法不调用不执行
2、方法的执行顺序只和调用顺序有关
3、方法之间不能嵌套
4、void不能和[return 结果]共存,但是void能和[return]共存
void:代表没有返回值
return 结果:代表有返回值
先将结果返回,然后结束方法
return:仅仅代表结束方法,不代表有返回值
public class MethodDemo06 {
public static void main(String[] args) {
method();
}
public static void method() {
return;
}
}
5、一个方法中不能连续写多个return
6、调用方法的时候看下面有没有这个方法,没有直接调用会报错。
7.1.8 方法练习
1)、判断奇偶性
需求:键盘录入一个整数,将整数传递到另外一个方法中,在此方法中判断这个整数的奇偶性
import java.util.Scanner;
public class MethodDemo07 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入一个整数:");
int a=sc.nextInt();
String s=jiouxing(a);
System.out.println(s);
}
public static String jiouxing(int a) {
if(a%2==0) {
return "偶数";
}else {
return "奇数";
}
}
}
2、求1-100的和,并将结果返回
public class MethodDemo08 {
public static void main(String[] args) {
int result=add_100();
System.out.println("result="+result);
}
public static int add_100() {
int sum=0;
for(int i=0;i<=100;i++) {
sum=sum+i;
}
return sum;
}
}
3、打印三次java is beautiful!
public class MethodDemo09 {
public static void main(String[] args) {
printThree(3);
}
public static void printThree(int n) {
for (int i = 0; i < n; i++) {
System.out.println("java is beautiful!");
}
}
}
4、数组作为方法参数传递参数,并实现遍历数组
public class MethodDemo10 {
public static void main(String[] args) {
int [] arr = {1,4,6,3,9,32,67,9};
printarray(arr);
}
public static void printarray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
5、数组作为方法返回值返回
public class MethodDemo10 {
public static void main(String[] args) {
int [] arrs=printarray();
for (int i = 0; i < arrs.length; i++) {
System.out.println(arrs[i]);
}
}
public static int[] printarray() {
int [] arr = {11,24,6,9};
return arr;
}
}
6、需求:定义一个方法,找到数组中最大值的索引
public class TestMaxIndex {
public static void main(String[] args) {
int[] arr1 = {12, 65, 23, 64, 167, 71, 37, 80, 60, 3};
int count = max(arr1);
System.out.println(count);
}
//定义最大值方法
public static int max(int[] arr) {
int max = arr[0]; //定义第一个元素为最大往后面比较
int index = 0; //记录索引的编号
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
index = i;
}
}
//返回值
return index;
}
}
7.2方法重载
1、概述:方法名相同,参数列表不同的方法
2、什么叫参数列表不同:
a、参数个数不同
b、参数类型不同
c、参数类型顺序不同
3、判断两个方法是否为重载方法,和什么无关:
a、和参数名无关
b、和返回值无关
需求:定义三个方法,分别求2个整数相加,3个整数相加,4个整数相加
public class Methodoverload {
public static void main(String[] args) {
sum(3,5);
sum(3,5,6);
sum(3,5,6,7);
sum(3.5, 5);
sum(3, 5.3);
}
public static void sum(int a,int b) {
System.out.println(a+b);
}
public static void sum(int a,int b,int c) {
System.out.println(a+b+c);
}
public static void sum(int a,int b,int c,int d) {
System.out.println(a+b+c+d);
}
public static void sum(double a,int b) {
System.out.println(a+b);
}
public static void sum(int a,double b) {
System.out.println(a+b);
}
}