Bootstrap

Java入门基础-05方法

Java入门基础-05方法

本章知识点总结于黑马程序员的视频课程:《Java入门基础课程》,是对上课做的笔记

Java入门基础课程视频地址

上一章:Java入门基础-04数组

一、认识方法

方法是什么

  • 方法是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用。

方法的完整格式

/**
         修饰符 返回值类型 方法名 (形参列表){
            方法体代码 // 需要执行功能的代码
            return 返回值;
         }
*/

示例:使用方法对两个整数求和并返回

// 使用方法对两个整数求和并返回
	// 返回值类型(int);方法名称(sum);形参列表:(int a, int b)			
    public static int sum (int a, int b){  
        int c = a + b; // 方法执行体
        return c; // 返回值(也可以理解为我们调用这个方法时想要得到的值)
    }

方法如何执行?

  • 方法定义后,必须调用才可以跑起来,调用格式: 方法名(…)
    int rs = sum(10, 20);
    System.out.println(rs);

代码:

package com.itheima.method;

public class Test {
    public static void main(String[] args) {
        // 调用sum方法
        int rs = sum(10, 20);
        System.out.println(rs);
    }

    // 方法:对两个整数求和并返回
    public static int sum (int a, int b){

        int c = a + b; // 方法执行体
        return c; // 返回值(也可以理解为我们调用这个方法时想要得到的值)
    }
}

方法定义时几个注意的点

  • 方法的修饰符:暂时都是用 public static 修饰。后续会讲两者的使用以及其他修饰符。
  • 方法申明了具体的返回值类型,内部必须使用return返回对应的类型数据!!!
  • 形参列表可以有多个,甚至可以没有;如果有多个形参,多个形参必须用英文符号“ , ” 隔开。且不能给初始化值。

使用方法的好处:

  1. 提高了代码的复用性,提高了开发效率。
  2. 让程序逻辑更清晰。

二、方法的其他形式

方法定义时:需要按照方法解决的实际业务需求,来设计合理的方法形式解决问题。

注意事项:

1、如果方法不需要返回值时,返回值类型必须申明成void(无返回值申明),此时方法内部不可以使用return返回数据。
2、方法如果不需要接收数据,则不需要定义形参,且调用方法时也不可以传递数据给方法;如果需要接收数据,则需要定义形参,且调用方法时必须传递数据给方法。
3、没有参数,且没有返回值类型(void)申明的方法,称为无参数、无返回值方法,依此类推。

示例:

package com.itheima.method;

public class Test2 {
    public static void main(String[] args) {
        // 打印三行Hello Worl!!
        printHelloWorld();

        System.out.println("-------------------");

        // 打印想要行数的hello world

        print(2);
    }

    // 打印三行hello world 的方法 无需返回值 无参数,无返回值方法
    public static void printHelloWorld(){
        for (int i = 0; i < 3; i++) {
            System.out.println("Hello World!!");
        }
    }

    /**
     * 有参数,无返回值方法
     */
    public static void print(int n){
        for (int i = 0; i < n; i++) {
            System.out.println("Hello World!!");
        }
    }
}

运行结果:

在这里插入图片描述

三、方法使用时的常见问题

1.方法在类中的位置放前放后无所谓,但一个方法不能定义在另一个方法里面。

在这里插入图片描述

2.方法的返回值类型写void(无返回申明)时,方法内不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部必须使用return返回对应的类型数据。

方法的返回值类型写void(无返回申明)时,方法内不能使用return返回数据
在这里插入图片描述

3.return语句的下面,不能编写代码,属于无效代码,执行不到那。

在这里插入图片描述

4.方法不调用就不会执行,调用方法时,传递给方法的数据,必须严格匹配方法的参数。

在这里插入图片描述

5.调用有返回值的方法,有三种方式:1.可以定义变量接收结果 。2.或者直接输出调用。3.甚至直接调用。

在这里插入图片描述

6.调用无返回值的方法,只有1种方式:只能直接调用。

在这里插入图片描述

四、方法的案例

设计方法的技巧,主要关注三方面:

  • 方法是否需要接收数据进行处理?
  • 方法是否需要返回数据?
  • 方法要处理的业务(看编程能力)。

1.计算1-n 的和

需求:求1-n的和

分析:

  1. 方法是否需要接收数据进行处理? 需要接收n具体的值,因此形参声明为:int n。
  2. 方法是否需要返回数据? 需要返回1-n的求和结果,因此返回值类型声明为int。
  3. 方法内部的业务:完成求1-n的和并返回。

代码:

package com.itheima.method;

public class Test4 {
    public static void main(String[] args) {
        int rs = sum(100);
        System.out.println(rs);
        
        int rs2 = sum(10);
        System.out.println(rs2);
    }
    
    public static int sum(int n){
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += i;
        }
        return sum;
    }
}

运行结果:
在这里插入图片描述

2.判断一个整数是奇数还是偶数

需求:输入一个整数,判断是偶数还是奇数,并把判断结果输出来。

分析:

  1. 方法是否需要接收数据进行处理? 需要接收一个整数来判断,因此形参声明为:int number.
  2. 方法是否需要返回数据? 方法内部判断完后直接输出结果即可,无需返回,因此返回值类型声明为:void
  3. 方法内部的业务:通过if语句判断number是奇数还是偶数,并输出结果。

代码:

package com.itheima.method;

public class Test5 {
    public static void main(String[] args) {
        judge(24);
        judge(35);
    }

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

运行结果:

在这里插入图片描述

五、方法在计算机中的执行原理

  • 方法被调用的时候,是进入到栈内存中运行。
  • 方法进出栈中的方式是:先进后出。
  • 方法在栈中执行完会从栈中清理掉。

在这里插入图片描述

  • 栈的特点:先进后出
    方法为什么要在栈中运行自己? 保证一个方法调用完另一个方法后可以回来。

六、Java的参数传递机制

Java的参数传递机制都是:值传递

  • 所谓值传递:指的是在传输实参给方法的形参的时候,传输的是实参变量中存储的值的副本。
  • 实参:在方法内部定义的变量。
  • 形参:定义方法时 “(…)” 中所声明的参数。

在这里插入图片描述

基本类型的参数传递

传递的是参数的值,而非参数的地址。

在这里插入图片描述

引用类型的参数传递

此时传递的是参数的地址。

示例:

package com.itheima.method;

public class Test6 {
    public static void main(String[] args) {
        int[] arrs = {10, 20, 30};
        chage(arrs); // 此时传递的是arrs的地址。
        System.out.println("main: " + arrs[1]);
    }
    public static void chage(int[] arrs){
        System.out.println("方法内1: " + arrs[1]);
        arrs[1] = 222; // 是在arrs地址内进行更改,所以arrs[1]的值也进行了更改
        System.out.println("方法内2: " + arrs[1]);
    }
}

运行结果:
在这里插入图片描述

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

  • 都是值传递。
  • 基本类型的参数传输存储的数据值。
  • 引用类型的参数传输存储的地址值。

引用类型函数传递的相关案例

1.打印int类型的数组类容

需求:输出一个int类型的数组类容,要求输出的格式为:[11, 22, 33, 44, 55]

代码:

package com.itheima.method;

public class Test7 {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30, 40, 50};
        printArray(arr);

        int[] arr2 = null;
        printArray(arr2);

        int[] arr3 = {};
        printArray(arr3);
    }

    public static void printArray(int[] arr){

        // 判断数组是否为空
        if (arr == null){
            System.out.println(arr); // null
            return; // 跳出当前方法
        }

        System.out.print("["); // 因为是在同一行,所以用print
        for (int i = 0; i < arr.length; i++) {
            // 方法一:
            // System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ", ");

            // 方法二:
            if (i == arr.length - 1){
                System.out.print(arr[i]);
            }else {
                System.out.print(arr[i] + ", ");
            }
        }
        System.out.println("]");
    }
}

运行结果:

在这里插入图片描述

2.比较两个数组

需求:比较两个int类型的数组是否一样,返回true或false。

代码:

package com.itheima.method;

public class Test8 {
    public static void main(String[] args) {
        int[] arr1 = null;
        int[] arr2 = null;
        System.out.println(equals(arr1, arr2));
        System.out.println("-----------");

        int[] arr3 = null;
        int[] arr4 = {12, 14};
        System.out.println(equals(arr3, arr4));
        System.out.println("-----------");

        int[] arr5 = {12, 13, 15};
        int[] arr6 = {12, 13, 78};
        System.out.println(equals(arr5, arr6));
        System.out.println("-----------");

        int[] arr7 = {12, 23, 15};
        int[] arr8 = {12, 23, 15};
        System.out.println(equals(arr7, arr8));
        System.out.println("-----------");
    }

    public static boolean equals(int[] arr1, int[] arr2){
        // 1.判断两个数组是否都为null
        if (arr1 == null && arr2 == null){
            return true;
        }

        // 2. 判断arr1 是null或者arr2是null
        if (arr1 == null || arr2 == null){
            return false;
        }

        // 3. 判断两个数组的长度是否相等,如果不一样,直接返回false
        if (arr1.length != arr2.length){
            return false;
        }

        // 4. 两个数组的长度一样,接着比较它们的内容是否一样
        for (int i = 0; i < arr1.length; i++) {
            // 判断当前位置2个数组的元素是否不一样,不一样直接返回false
            if (arr1[i] != arr2[i]){
                return false;
            }
        }
        return true;
    }
}

运行结果:

在这里插入图片描述

七、方法重载

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

方法重载的注意事项:

  • 一个类中,只要一些方法的名称相同、形参列表不同,那么它们就是方法重载了,其它的都不管(如:修饰符,返回值类型是否一样都无所谓)。
  • 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。

方法重载的应用场景:

  • 开发中我们经常需要为处理一类业务,提供多种解决方案,此时用方法重载来设计是很专业的。

在这里插入图片描述

补充知识:方法中单独使用return关键字

  • return:可以用在无返回值的方法中,作用是:立即跳出并结束当前方法的执行。
  • break:跳出并结束当前所在循环的执行。
  • continue:结束当前所在循环的当次继续,进入下一次执行。

总结

方法到这里就结束啦,本章知识点有:认识方法,方法的书写格式以及执行;方法的其他形式,包括无返回值方法,方法大的名称;方法使用时常见的六个问题;方法的案例,有计算1-n的和、判断一个整数是奇数还是偶数;方法在计算机中的执行原理,方法在栈中运行;Java的参数传递机制,包括基本类型的参数传递,引用类型的参数传递,引用类型函数传递的相关案例有打印int类型的数组类容和比较两个数组;方法重载;return在方法中单独使用。

下一章:Java入门基础-06编程思维训练

;