方法的使用

1.使用方法的好处
1)把代码写成方法,可以多次调用使用
2)一个方法只完成一个问题,不容易出错
2.方法的定义和使用
方法的定义和使用很明显是两个不同的阶段,使用又称为执行、调用。
以盖房子为例,定义一个方法,首先为盖某个公寓制作了一份图纸,这是定义方法,而调用方法则是按照之前的图纸,来盖公寓。
2.1方法的定义
在定义一个方法的时候,有以下几个元素:
1)方法的名称
2)方法的指令:即要求该方法实现的操作(比如说实现两个数相加,比较两个数求最大值)
3)方法的形参
4)方法中可能出现的返回值类型,如果没有返回值的时候,可以使用void类型
5)其他的修饰信息(比如说public static)
java方法定义的标准格式如下:

public static 方法返回值类型(如void int)方法名称
(形参列表){
     
方法的指令
return 返回值
}

//实现两个数相加
public static int add(int x,int y){
     
int sum=a+b;
return sum;
}
方法名称:add
形参列表(int x,int y)
返回值类型:int
方法的指令:实现两个数相加 sum=a+b;

2.2方法的调用
方法的调用中,也有几个重要的元素:
1)调用哪个方法(方法名称)
2)使用哪些具体的值,进行本次的方法调用,调用时用到的实参
3)调用方法后可能得到的返回值的后续处理,保存或者直接再次使用。
java中规定了方法调用的标准格式如下:

//不关心返回值
方法名称(实参列表)

//将返回值保存在变量中
变量=方法名称(实参列表)

//直接使用返回值参与运算
方法名称(实参列表)+方法名称(实参列表)

//调用两个数相加
add(10,20)
//调用方法,10和20是实参,不关心返回值

3.使用方法编写猜数字游戏

import java.util.Random;
import java.util.Scanner;
public class Test1218 {
     
    public static void main(String[] args) {
     
     guessNumberGame();
    }

    public  static void guessNumberGame() {
     
        while(true){
     
            //menu用于与玩家交互
            //返回值表示玩家输入的选项
            //玩家输入1表示开始一局猜数字游戏
            //玩家输入0表示结束整个程序
            int choice=menu();
            if(choice==1){
     
                game();
            }else if(choice==0){
     
                System.out.println("goodbye");
                break;
            }else{
     
                System.out.println("您的输入有误,请重新输入");
            }
        }
    }

    private static void game(){
     
//        1.先生成一个1-100之间的随机整数
        Random random=new Random();
        int toGauss=random.nextInt(100);
        Scanner scanner=new Scanner(System.in);
        while(true){
     
            System.out.println("请输入要猜的整数");
            int num=scanner.nextInt();
            //3.进行判断
            if(num<toGauss){
     
                System.out.println("低了");
            }else if(num>toGauss){
     
                System.out.println("高了");
            }else{
     
                System.out.println("猜对了");
             break;
            }
        }

4.方法的执行过程
4.1栈、栈帧的相关概念:
栈:Java里为了让内存的管理更加方便,会在JVM进程启动的时候,直接从操作系统这里申请一大块内存,自己再进行管理,JVM会对申请到的一大块内存进行进一步的划分,其中的一块区域就称为栈。
栈里面存的是一些特定的内容,核心是方法与方法之间的调用关系。
入栈:调用某个方法,就会把该方法对应的一些信息,放到栈里面;
出栈:当某个方法执行完毕,就会把对应的信息删除掉。
栈帧(frame)
栈帧中就包含了被调用方法的一些信息:
1.该方法的地址是啥
2.该方法的参数有哪些
3.该方法的内部的局部变量
4.该方法的返回地址
5.该方法的返回值
4.2执行图示
以上述代码为例,栈中的形式如下图:
方法的使用_第1张图片

5.方法重载
5.1构成方法重载的规则
1)方法名相同,但是方法的参数类型不同。(编译器会根据实参的类型来匹配哪个版本的方法进行执行)
2)方法名相同,但是方法的参数个数不同。(编译器会根据实参的个数来匹配哪个版本)
5.2重载的例子

package java41_0120;

public class Test {
     
    public static void main(String[] args) {
     
        int a=10;
        int b=20;
        int S=add(a,b);
        System.out.println("S="+S);
        double a2=10.2;
        double b2=12.3;
        double S2=add(a2,b2);
        System.out.println("S2="+S2);
        double a3=10.4;
        double b3=10.3;
        double c3=1.2;
        double S3=add(a3,b3,c3);
        System.out.println("S3="+S3);
    }
    public static int add(int a, int b) {
     
        return a + b;
    }
    public static double add(double a, double b) {
     
        return a + b;
    }
        public static double add(double a, double b, double c) {
     
        return a+b+c; 
    }

}

方法的名字叫做add,但是第一个add和第二个add的方法名相同,参数类型不同,第二个和第三个,方法名相同,参数的个数不同,因此为方法重载。
方法重载注意事项:
1)重载和返回值类型无关,如果两个方法,参数一样(指的是参数个数和参数类型),方法名一样,但是返回值不一样,这样不构成方法重载,会编译出错。
2)构成重载的两个方法,得在同一个作用域中。

你可能感兴趣的:(java)