Java学习(方法)

本文详细讲解了Java中的方法概念,包括其定义、内存原理、调用流程,以及参数传递机制(值传递)。还介绍了方法重载的概念和示例,以及如何在模拟双色球系统中运用这些知识。
摘要由CSDN通过智能技术生成

定义&格式

  • 定义:方法是一种语法结构,它可以把一段代码封装成一个功能,方便重复调用(可以理解为C语言里的函数)
  • 作用:提高了代码的复用性,让程序的逻辑更清晰.
  • 方法的调用格式:方法名(传递的形参)

注意事项:
1.方法申明了数据的返回类型,内部必须使return返回对应类型的数据.
2.使用void作为返回值类型的时候不需要return

方法的内存原理

方法的调用流程:

方法在不同的调用情况下会存在不同的内存

图解:

public class MethodDemo1 {
    public static void main(String[] args) {
    int c = add(10,20);
    System.out.println(c);
    }
    public static int add(int a, int b){
        int c = a + b;
        return c;
    }
}

以上面代码为例:
image.png
首先,把class文件提到方法区中,然后启动main方法,放入栈内存中运行,直到需要调用add方法。
之后,add运行,main将数据传递给add进行运算,将答案返回给main,add退出栈内存,main继续运行剩余代码。
最后,main方法运行完,main方法都退出栈内存。

方法的参数传递机制

Java的参数传递机制:值传递
在传递实参给方法的形参的时候,传递的是实参变量中存储的值,这就是值传递。
不同数据类型的参数传递
基本数据类型和引用数据类型的参数传递机制都是值传递,只是前者传递的是数据值,传递后改变也不会影响原方法;而后者传递的是地址值,传递后的改变会影响原方法。

方法重载

定义:在同一个类中,出现多个方法名称相同,但是形参列表是不用的
案例

tips
开发武器系统,功能需求如下:
1.可以默认发一枚导弹
2.可以指定地区发一枚导弹
3.可以指定地区发射多枚导弹

分析:在此功能中,都有发射的需求,都可以以命名为fire,因为调用方法的时候,会根据参数的不同来区分调用的是哪个方法。

 public static void fire(){
    System.out.println("默认发射一枚导弹");
}
public static void fire(String location){
    System.out.println("向"+location+"发射一枚导弹");
}
public static void fire(String location,int nums){
    System.out.println("向"+location+"发射"+nums+"枚导弹");
}

还可以在方法里面再次进行方法重载,使代码更简洁

public static void fire(String location){
    fire(location,1);
}
public static void fire(String location,int nums){
    System.out.println("向"+location+"发射"+nums+"枚导弹");
}

方法重载的识别技巧

同一个类中,方法名称相同,形参列表不同,就可以认为是重载的方法。
形参列表不同指的是形参的个数、类型、顺序不同,与名称无关。

public static void open(){}
public static void open(int a){}
public static void open(int a,int b){}
public static void open(double a,int b){}
public static void open(int a,double b){}
//下面的就是重复方法(顺序,类型,个数都相同,名字不同)
public static void open(int i,double a){}
//下面的是新方法(方法名称不同)
public static void OPEN(){}

return关键字单独使用

return可以立即跳出并结束当前方法的执行,可以放在任何方法中。

public static void chu(int a,int b){
    if(b==0)
        return ;
    int c=a/b;
    System.out.println(c);
}

这属于无返回数据类型的,要用void,否则会报错:不兼容的类型。

每日一练 模拟双色球系统

:::tips
开发一个模拟双色球系统,需求如下:
投注号码由6个红色球号码和1个蓝色球号码,红色球号码从133中选择,蓝色球号码从116中选择
:::

分析:
1.随机生成一个中奖号码(号码不能重复)
2.用户输入一组中奖号码
3.比对中奖情况

import java.util.Random;
import java.util.Scanner;

public class DoubleColorBall {
    public static void main(String[] args) {
        //1.随机生成中奖号码
        int[] LuckNumbers = CreateLuckNumbers();
        //2.用户输入号码
        int[] HomeNumbers = InputHomenNumbers();
        //3.中奖情况判断
        judge(LuckNumbers,HomeNumbers);
    }
    public static int[] InputHomenNumbers(){
        int[] numbers = new int[7];
        Scanner sc = new Scanner(System.in);
        //用户输入前六个号码
        for (int i = 0; i < numbers.length-1; i++) {
            System.out.print("请您输入第"+(i+1)+"个红球号码(1~33):");
            int data = sc.nextInt();//默认此处不输入重复数字
            numbers[i] = data;
        }
        System.out.print("请您输入蓝球号码(1~16):");
        numbers[6]=sc.nextInt();
        return numbers;
    }
    public static int[] CreateLuckNumbers(){
        int[] numbers = new int[7];//[0,0,0,0,0,0,0]
        Random r = new Random();
        //生成前六个红色球的数字(1~33)
        for (int i = 0; i < numbers.length-1; i++) {
            while(true){
                int data = r.nextInt(33)+1;
                boolean flag = true;
                for (int j = 0; j < i; j++) {
                    if(numbers[j]==data){
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    numbers[i]=data;
                    break;
                }
            }
        }
        //生成第七个球的数字(1~16)
        numbers[numbers.length-1]=r.nextInt(16)+1;
        return numbers;
    }
    public static void judge(int[] LuckNumbers,int[] HomeNumbers){
    //判断是否中奖
    //LuckNumbers = {12,23,8,16,15,32,  9}
    //HomeNumbers = {23,13,18,6,8,33,   10}
    //1.定义两个变量存储命中个数
        int redHit = 0;
        int blueHit = 0;
    //2.判断红球命中几个
            for (int i = 0; i < HomeNumbers.length-1; i++) {
                for (int j = 0; j < LuckNumbers.length-1; j++) {
                    //找到重复即为命中
                    if(HomeNumbers[i]==LuckNumbers[j]){
                        redHit++;
                        break;
                    }
                }
            }
    //判断篮球是否命中
        blueHit = LuckNumbers[LuckNumbers.length-1]==HomeNumbers[HomeNumbers.length-1]? 1: 0;
    //揭示中奖号码和用户号码
        System.out.print("中奖号码是:");
        for (int i = 0; i < LuckNumbers.length; i++) {
            System.out.print(LuckNumbers[i]+" ");
        }
        System.out.print("\n");
        System.out.print("您的号码是:");
        for (int i = 0; i < HomeNumbers.length; i++) {
            System.out.print(HomeNumbers[i]+" ");
        }
        System.out.print("\n");
    //判断几等奖
        if(blueHit==1 && redHit < 3){
            System.out.println("恭喜你!中了六等奖!");
        }else if (blueHit == 1 && redHit == 3 || blueHit == 0 && redHit == 4) {
            System.out.println("恭喜你!中了五等奖!");
        }else if (blueHit == 1 && redHit == 4 || redHit == 5 && blueHit == 0) {
            System.out.println("恭喜你!中了四等奖!");
        }else if (blueHit == 1 && redHit == 5 ) {
            System.out.println("恭喜你!中了三等奖!");
        }else if (redHit == 6 && blueHit == 0) {
            System.out.println("恭喜你!中了二等奖!");
        }else if (blueHit == 1 && redHit == 6 ) {
            for (int i = 0; i < 3; i++) {
                System.out.println("恭喜你!中了一等奖!");
            }
        } else {
            System.out.println("很遗憾,您未中奖,感谢您的参与");
        }
    }
}

image.png
image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值