一篇文章带您了解方法(java)

1.什么是方法

说白了,方法就是把功能相同的代码,封装起来,以供重复使用。

2.方法的书写格式

修饰符 返回值类型 方法名(形参列表) {

		需要执行的代码;

		return 返回值;

}
  /**
     * public static 修饰符
     * int 返回值类型
     * sum 方法名称
     * int a,int b 形参列表
     *
     * @param a
     * @param b
     * @return
     */
    public static int sum(int a, int b) {
        return a + b;
    }

3.方法要怎么调用?

方法定义后,必须调用才可以跑起来

4.方法的注意点?

* 方法申明了具体的返回值类型,内部必须使用return发挥对应类型的数据
* 形参列表可以有多个,也可以没有;如果有多个形参,需要用逗号隔开,且不能初始值

5.使用方法的好处是?

* 提高了代码的复用性,提高了开发效率
* 让代码逻辑更加清晰

完整代码展示:笔者在代码做了详细的代码注释。

public class demo1 {
    public static void main(String[] args) {

        /**
         * 方法如何执行?
         * 方法定义后,必须调用才可以跑起来
         */
        //如果在代码中仍需要求两个数相加,那么就可以调用整个函数,不需要重复写代码
        int sum = sum(1, 2);
        System.out.println(sum);
        System.out.println(sum(2, 3));
        /**
         * 方法的注意点:
         * 方法申明了具体的返回值类型,内部必须使用return发挥对应类型的数据
         * 形参列表可以有多个,也可以没有;如果有多个形参,需要用逗号隔开,且不能初始值。
         *
         */
        /**
         * 使用方法的好处是?
         * 提高了代码的复用性,提高了开发效率
         * 让代码逻辑更加清晰
         */
    }

    /**
     * public static 修饰符
     * int 返回值类型
     * sum 方法名称
     * int a,int b 形参列表
     *
     * @param a
     * @param b
     * @return
     */
    public static int sum(int a, int b) {
        return a + b;
    }
}

6.如何设计方法?

按照实际业务需求,主要需要考虑两个问题:

1.方法时候需要接收数据处理。

2.方法是否需要需要返回值。

注意事项:如果方法不需要返回值,则返回值必须声明void,这个时候,方法内部不可以使用return返回数据。

方法不需要接收数据,则不需要定义形参,则调用方法时也不可以传数据给到方法值,否则会报错。

没有参数,且返回值类型为void的方法,叫做无参数,无返回值的方法,以此类推。

如代码所示:代码中举了一些案例。

public class demo2 {
    public static void main(String[] args) {

        //如果只是打印三次hello world 这里就不要返回值,也不要参数
        printHelloWorld();
        System.out.println("*------*");
        //如果要自定义打印多少次hello world 这里就不要返回值,需要要参数
        printHelloWorld(5);
         System.out.println("*------*");
        //如果只需要一个固定的值,这里就不需要参数,但是有返回值
        System.out.println(add());
         System.out.println("*------*");
        //如果需要计算两个数的值,这里就需要参数,也需要返回值
        int add = add(3, 8);
        System.out.println(add);

    }

    //这类叫做 无参数无返回值方法
    public static void printHelloWorld() {
        for (int i = 1; i <= 3; i++) {
            System.out.println("hello world");

        }
    }

    //这类叫做 有参数无返回值方法
    public static void printHelloWorld(int n) {
        for (int i = 1; i <= n; i++) {
            System.out.println("hello world");
        }
    }

    //这类叫做有返回值,无参数的方法
    public static int add() {
        return 5;
    }

    //这类叫做有返回值,有参数的方法
    public static int add(int a, int b) {
        return a + b;
    }

}

7.使用方法可能会出现的问题

1.每个方法的顺序没有要求,但是一个方法不能卸载另一个方法的内部。

  1. 方法不需要接收数据,则不需要定义形参,则调用方法时也不可以传数据给到方法值,否则会报错。(这个我前面也讲过了)

  2. 在方法中,return语句下面不能再编写代码了,执行方法整个代码的时候,执行return之后就结束了,后面的代码就是无效代码。

  3. 方法如果没有调用它就不会执行,就待在那里,等着你去调用它。(这个我前面也讲过了)

  4. 给方法传参数时,方法中有几个形参或者什么类型的形参,就必须给它几个参数或则什么类型的参数,不要随意传参,会报错。

  5. 调用有返回值的方法,有三种方法,1)可以定义一个变量接收方法产生的结果。2)直接输出调用。3)也可以直接调用

  6. 调用无返回值的方法,就直接调用就好了。

在这里笔者就不做代码分析了,如果大家在使用方法时遇到了问题可以对照以上7条进行修改。

8.方法的小例子-代码展示

public class demo4 {
    public static void main(String[] args) {
        //判断一个整数是奇数还是偶数
        isPri(3);
    }

    public static void isPri(int n) {
        if (n % 2 == 0) {
            System.out.println(n + "是一个偶数");
        } else {
            System.out.println(n + "是一个奇数数");
        }
    }
}

public class demo3 {
    public static void main(String[] args) {
        //求1-n的和
        int add = add(5);
        System.out.println("第一种输出方法" + add);

        System.out.println("第二种输出方法 " + add(6));

        //直接调用,但是没什么多大用处,因为你并没有拿它的返回值做操作。
        add(7);

    }

    public static int add(int n) {
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += i;
        }
        return sum;
    }
}

9.方法在计算机中的执行原理

方法被调用的时候,是进入到栈内存中运行。

栈的特点:先进后出,用完丢弃。

那么方法为什么要在栈中运行自己呢?

保证一个方法调用完另一个方法后,可以回来。

10. java的参数传递机制

这里讲一下java的参数传递机制,java的参数传递机制都是-值传递

10.1 什么是值传递呢?

其实就是传输实参给方法的形参的时候,传输的是实参变量中存储的值的副本

10.2 什么是实参?

在方法内部定义的变量。

10.3什么是形参?

在方法定义的时候里面的参数。(这个我在前面的代码中有注释)

public class demo5 {
    public static void main(String[] args) {

        int a = 10;
        change(a);
        /**
         * 在这里我们会发现a3的值是10 , a1的值是10,a2的值是20
         * 为什么呢?
         * 也为当我们写change(a)的时候实际上是change(10);
         * 也就是说我们把10传给了方法的形参,方法内部没有去改变这个值
         */
        System.out.println("a3:" + a);

        /**
         * 在这里也是一样的
         */
        int b =10;
        changeNum(b);
        System.out.println("b3" + b);
        /**
         * 那么我们要怎么样才能改变这个值呢
         * int c =10;
         * 我们需要把方法中放回的值重新赋值给b才可以
         * 如代码所示
         */

        int c = changeNum(b);
        System.out.println("b4" + c);//这里 b的值才改成了20

    }

    public static void change(int a) {
        System.out.println("a1:" + a);
        a = 20;
        System.out.println("a2:" + a);
    }

    public static int changeNum(int b) {
        System.out.println("b1:" + b);
        b = 20;
        System.out.println("b2:" + b);
        return b;
    }
}

10.4引用类型的参数传递

先用代码做个案例。

public class demo6 {
    public static void main(String[] args) {
        int[] nums = {11, 22, 33, 44, 55};
        changeNum(nums);
        System.out.println("在main方法中" + nums[1]);
    }

    public static void changeNum(int[] arr) {
        System.out.println("方法一:" + arr[1]);
        arr[1] = 222;
        System.out.println("方法二:" + arr[1]);
    }
/**
方法一:22
方法二:222
在main方法中222
*/
}

那么在这里我们可以看到,这里的结果和上面的基本类型的参数传递。

解释:在数组那一章我解释过,nums存储的是数组的地址值,那么在main方法中在使用

changeNum(nums);的时候会把地址值传给方法的形参,当执行了arr[1] = 222;的时候,方法中的arr存储的和nums的地址值是一样的,所以会改变数组的值。

如果不好理解的话笔者在下面笔者在下面画个图方便大家理解。

11.基本类型和引用类型的参数在传递的时候有什么不同?

1.他们都是值传递

2.基本类型的参数传输的数据值

3.引用类型的参数传输存储的地址值

做一个案例,来加强大家学习。

public class demo7 {
    public static void main(String[] args) {
        //输出打印一个数组 数组的格式 [11,22,33,44,55]
        int[] nums = {11, 22, 33, 44, 55};
        printArr(nums);
        int[] ages = null;
        printArr(ages);
    }

    public static void printArr(int[] arr) {
        /**
         * 在讲解数组的时候,笔者讲解过
         * 如果数组为null,打印的时候会报错
         */
        if (arr == null) {
            System.out.println("您传递的数组为null");
            return;
        }
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            //这里用的是三元运算符
            //这里需要注意的是数组的最后一个元素的后面没有逗号
            System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ",");
        }
        System.out.println("]");
    }
}

/**
运行结果:
[11,22,33,44,55]
您传递的数组为null
*/

12.方法重载

一个类中,出现多个方法的名称相同,但是它们的形参不同,那么这些方法我们就称为方法重载。

注意事项:

一个类中,只要一些方法的名称相同、形参列表不同,那么它们就是方法重载,其他可以不管(比如修饰符,返回值类型是否一样都无所谓)

形参列表不同包括:形参的个数,类型,顺序不同,不关心形参的名称。

使用场景:

提供多种解决方案。

13. return关键字

return在方法中可以单独使用,书写格式是 return; 它的作用是立即跳出并结束当前方法的执行。

比如这段代码

public static void printArr(int[] arr) {
        /**
         * 在讲解数组的时候,笔者讲解过
         * 如果数组为null,打印的时候会报错
         */
        if (arr == null) {
            System.out.println("您传递的数组为null");
            return;
        }
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            //这里用的是三元运算符
            //这里需要注意的是数组的最后一个元素的后面没有逗号
            System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ",");
        }
        System.out.println("]");
    }

14return break 和continue的区别。

return跳出并立即结束所在方法的执行
break跳出并结束当前所在循环的执行
continue结束当前所在循环的当次继续,进入下一次执行

注意:本篇文章是笔者的学习心得,因为笔者的能力有限,会出现许多没有想到的问题,如果您在浏览或者运行代码的时候出现了问题,还请您能在评论区留言,笔者看到后会在第一时间处理。

  • 57
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与风过山岗

您的鼓励是我莫大的荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值