Java方法

1269-郑同学

发表文章数:16

首页 » Java » 正文

方法

方法概述

方法:就是完成特定功能的代码块

定义格式:

修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2, ...) {
	方法体;
	return 返回值;
}

格式解释:
修饰符:目前记住这里使用public static即可
返回值类型: 用于限定返回值的数据类型
方法名: 方便我们调用方法
参数类型:用于限定调用方法时传入的数据的数据类型
参数名: 用于接受调用方法时传入的数据的变量
方法体: 完成特定功能的代码
return 返回值: 结束方法,并且把返回值带给调用者

方法案例

需求:求两个数据之和

两个明确:

public static 返回值类型 sum(参数类型 参数名1, 参数类型 参数名2, ...)  {...}

返回值类型:明确方法结果的数据类型
					int
参数列表:明确有几个参数参加,每个参数都是什么数据类型
					int a, int b

注意事项:方法与方法是平级关系,不能嵌套定义

    public static int sum(int a, int b) {
        int c = a + b;
        return c;
    }

有明确返回值的方法调用

方法调用:(有明确返回值的方法的调用)

  1. 单独调用,没有意义
  2. 赋值调用(我们推荐的方式)
  3. 输出调用
    public static void main(String[] args) {
        //根据方法名来调用
        //sum();
        //调用方法不仅仅看方法名,还要看方法的参数(个数和类型)
        //sum(10,20); (单独调用,无意义)

        //该方法返回了一个int类型的值,所以我们应该用已int类型的变量接受
        int result  = sum(10,20);
        System.out.println("result:"+result);

        //输出调用
        System.out.println(sum(10,20));
    }

    public static int sum(int a, int b) {
        int c = a + b;
        return c;
    }

练习

练习1

需求:键盘录入两个数据,返回两个数中的较大值

思考:键盘录入两个数据的动作放在哪里比较合适?
假如键盘录入数据的动作放在了返回两个数中较大值的方法里面,那么我如果不想返回键盘录入的数据的较大值,我只想返回两个固定值的较大值,我们又得修改代码了。这个时候发现是不合理的,所以我们应该把键盘录入数据的动作放在main方法中。

命名习惯:

  • 类:
    如果是一个单词,首字母大写。Student
    如果是多个单词,每个单词的首字母大写。HelloWorld
  • 方法
    和变量命名是一样的规则。
    如果是一个单词,首字母小写。sum()
    如果是多个单词,从第二个单词开始,每个单词首字母大写。getMax()
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入第一个数据");
        int a = sc.nextInt();

        System.out.println("请输入第二个数据");
        int b = sc.nextInt();

        int max = getMax(a,b);

        System.out.println("max:"+max);


    }

    public static int getMax(int a, int b) {
        if(a > b) {
            return a;
        }else {
            return b;
        }
    }

练习2

需求:键盘录入两个数据,比较两个数据是否相等

两个明确:
返回值类型:boolean
参数列表:int a, int b

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入第一个数字");
        int a = sc.nextInt();

        System.out.println("请输入第二个数字");
        int b = sc.nextInt();

        //调用方法(返回什么数据类型就用什么数据类型接收)
        boolean c = compare(a,b);

        System.out.println(c);
    }

    public static boolean compare(int a, int b) {
        if(a == b) {
            return true;
        }else {
            return false;
        }
    }

void修饰的方法调用

需求:写一个方法,在控制台输出10次HelloWorld案例

两个明确:

  • 返回值类型:void
  • 参数列表:没有参数

如果一个方法没有明确的返回值类型,也不能把返回值类型空出来。这里应该写void表示该方法无返回值类型。

    public static void main(String[] args) {
        //单独调用
        printHelloWorld();

        //输出调用
        //System.out.println(printHelloWorld());

        //赋值调用
        //void v = printHelloWorld();
    }

    public static void printHelloWorld() {
        for(int x=1; x<=10; x++) {
            System.out.println("HelloWorld");
        }
    }

void修饰的方法只能单独调用

练习

练习1

需求:写一个方法,把所有水仙花数打印在控制台

两个明确:

  • 返回值类型:void
  • 参数列表:
    public static void main(String[] args) {
        //调用方法
        printFlower();
    }

    public static void printFlower() {
        for(int x=100; x<1000; x++) {
            int ge = x%10;
            int shi = x/10%10;
            int bai = x/10/10%10;

            if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
                System.out.println(x);
            }
        }
    }

练习2

需求:写一个方法,打印1到n之间的数据(n是调用的时候传递过来的)
隐含:n>=1

两个明确:

  • 返回值类型:void
  • 参数列表:int
    public static void main(String[] args) {
        printNumber(3);
        printNumber(5);
    }

    public static void printNumber(int n) {
        for(int x=1; x<=n; x++) {
            System.out.println(x);
        }
    }

方法重载

方法重载:在同一个类中,出现了方法名相同的情况。

方法重载的特点:

  • 方法名相同,参数列表不同。(参数的个数不同;参数对应的数据类型不同)
  • 方法重载与返回值无关

注意事项:在调用方法的时候,java虚拟机会根据方法名及参数列表的不同来区分方法。

    public static void main(String[] args) {
        //定义两个变量
        int a = 10;
        int b = 20;

        //求和
        int result = sum(a, b);
        System.out.println("result:"+result);

        //定义变量
        int c = 30;
        //int result2 = sum2(a,b,c);
        int result2 = sum(a,b,c);
        System.out.println("result2:"+result2);


    }

    /*
    //求三个数据的和
    public static int sum2(int a, int b, int c) {
        return a + b + c;
    }
     */
    public static float sum(float a, float b) {
        return a + b;
    }

    public static int sum(int a, int b, int c) {
        return a + b + c;
    }

    public static int sum(int a, int b) {
        return a + b;
    }

练习

需求:比较两个数据是否相等。参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型,并在main方法中进行测试。

    public static void main(String[] args) {
        System.out.println(compare(10,20));
        System.out.println(compare((byte)10,(byte)20));
        System.out.println(compare((short)10,(short)20));
        System.out.println(compare(10L,20L));
    }

    public static boolean compare(byte a, byte b) {
        /*
        if(a == b) {
            return true;
        }else {
            return false;
        }
         */
        System.out.println("byte");
        return a == b;
    }

    public static boolean compare(short a, short b) {
        System.out.println("short");
        return a == b;
    }

    public static boolean compare(int a, int b) {
        System.out.println("int");
        return a == b;
    }

    public static boolean compare(long a, long b) {
        System.out.println("long");
        return a == b;
    }

方法参数传递问题

基本数据类型作为方法的参数传递,形式参数的改变不影响实际参数。
引用数据类型作为方法的参数传递,形式参数的改变直接影响实际参数。

  • 形式参数:用于接收实际参数的变量
  • 实际参数:实际参与运算的数据
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("a:" + a + ",b:" + b);//a:10,b:20
        change(a, b);
        System.out.println("a:" + a + ",b:" + b);//???
        //输出结果a:10,b:20
    }


    public static void change(int a, int b) {//a=10,b=20
        System.out.println("a:" + a + ",b:" + b);//a:10,b:20
        a = b;//a=20;
        b = a + b;//b=40;
        System.out.println("a:" + a + ",b:" + b);//a:20,b:40
    }
    public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        for (int x = 0; x < arr.length; x++) {
            System.out.println(arr[x]);//1,2,3,4,5
        }
        change(arr);
        for (int x = 0; x < arr.length; x++) {
            System.out.println(arr[x]);//1,4,3,8,5
        }
    }

    public static void change(int[] arr) {
        for (int x = 0; x < arr.length; x++) {
            //如果数组的元素是偶数,值就变成了以前的2倍
            if (arr[x] % 2 == 0) {
                arr[x] *= 2;
            }
        }
    }

练习

练习1

需求:把遍历数组改进为方法实现,并调用方法

两个明确:

  • 返回值类型:void
  • 参数列表:int[] arr
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};

        //调用方法
        //printArray(arr);

        //我们已经实现了需求,但是我们想要如下的效果
        //[元素1, 元素2, 元素3, ...]
        //我们的结果应该是这样的:[11, 22, 33, 44, 55]

        printArray(arr);

    }

    /*
    public static void printArray(int[] arr) {
        for(int x=0; x<arr.length; x++) {
            System.out.println(arr[x]);
        }
    }

     */

    public static void printArray(int[] arr) {
        System.out.print("[");
        for(int x=0; x<arr.length; x++) {
            //判断是否是最后一个元素
            if(x == arr.length) {
                System.out.print(arr[x]);
            }else {
                System.out.print(arr[x]+", ");
            }
        }
        System.out.println("]");
    }

练习2

需求:把获取数组最值改进为方法实现,并调用方法

两个明确:

  • 返回值类型:int
  • 参数列表:int[] arr
    public static void main(String[] args) {
        int[] arr = {24,36,90,75,81};

        //调用方法
        int max = getMax(arr);

        System.out.println("max:"+max);
    }

    public static int getMax(int[] arr) {
        int max = arr[0];
        for (int x=1; x<arr.length; x++) {
            if(arr[x] > max) {
                max = arr[x];
            }
        }
        return max;
    }

拜师教育学员文章:作者:1269-郑同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Java方法》 发布于2020-09-06

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录