重学Java 9 方法(函数)?

发布时间:2024年01月18日

要争气,因为心里憋着太多的不服气

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?——24.1.18

数组重点回顾

? ? ? ? 1.概述:容器,本身属于引用数据类型

? ? ? ? 2.特点:

? ? ? ? ? ? ? ? ①定长

? ? ? ? ? ? ? ? ②既可以存储基本数据类型的数据,还可以存储引用数据类型的数据

? ? ? ? 3.定义:

? ? ? ? ? ? ? ? 动态初始化:数据类型[ ] 数组名 = new 数据类型{数组长度}

? ? ? ? ? ? ? ? 静态初始化:数据类型[ ] 数组名 = new 数据类型{数据1,数据2,……}?

? ? ? ? 4.数组操作:

? ? ? ? ? ? ? ? ①获取数组长度:数组名.length

? ? ? ? ? ? ? ? ②存储数据:数组名[索引值] = 元素 -> 将元素存储到数组指定的索引上

? ? ? ? ? ? ? ? ③获取元素:数组名[索引值]

? ? ? ? ? ? ? ? ④遍历:数组名.fori

? ? ? ? ? ? ? ? ⑤索引:指的是元素在数组中存储的位置

? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? 从0开始,最大索引是数组.length - 1,唯一,不能重复

? ? ? ? 5.操作数组时容易出现的异常:

? ? ? ? ? ? ? ? ①数组索引越界异常:ArrayIndexOutOfBoundsException

? ? ? ? ? ? ? ? ? ? 原因:操作的索引超出了数组索引异常

? ? ? ? ? ? ? ? ②空指针异常:NullPointerException

? ? ? ? ? ? ? ? ? ? 原因:对象为null,然后再去操作此对象

? ? ? ? 6.内存:

? ? ? ? ? ? ? ? ①栈:方法的运行在栈

? ? ? ? ? ? ? ? ②堆:数组、对象都在堆,而且每new一次都会在堆中开辟一个空间,堆内存会为此空间分配一个地址值

? ? ? ? ? ? ? ? ③方法区:代码运行之前的预备区,存储class文件

? ? ? ? ? ? ? ? ④本地方法栈

? ? ? ? ? ? ? ? ⑤寄存器

????????7.二维数组概述:数组中有多个一维数组/二维数组是元素为一维数组的一维数组

? ? ? ? ? ? ? ? ①动态初始化定义:数据类型[ ][ ] 数组名 = new 数据类型[m][n]

? ? ? ? ? ? ? ? ? ? ? ? m:代表的是二维数组的长度

? ? ? ? ? ? ? ? ? ? ? ? n:代表的是每一个一维数组的长度

? ? ? ? ? ? ? ? ②静态初始化定义(简化形式):

? ? ? ? ? ? ? ? ? ? ? ? 数据类型[ ] 数组名 = {{元素1,元素2,…},{元素1,元素2,…},{元素1,元素2,…}…}

? ? ? ? 8.二维数组操作:

? ? ? ? ? ? ? ? ①获取长度:数组名.length

? ? ? ? ? ? ? ? ②存元素:数组名[i][j] = 值

? ? ? ? ? ? ? ? ? ? ? ? i:代表的是一维数组在二维数组中的索引位置

? ? ? ? ? ? ? ? ? ? ? ? j:代表的是元素在一维数组中的索引位置

? ? ? ? ? ? ? ? ③获取元素:数组名[i][j]

? ? ? ? ? ? ? ? ④遍历:嵌套for 先将一维数组从二维数组中遍历出来,再遍历每一个一维数组

一、方法的使用

1.方法介绍

若所有的代码都在main方法中,会显得main方法代码太多,太乱,太臃肿 -> 不好维护

将代码块分为三个区域,每个区域存该区域模块相应的代码

分好模块后,直接调用功能名称就好了

将不同功能的方法放到不同的方法中,想执行某个功能,直接调用方法名就好,对应的代码被自动执行起来,将来维护的时候,直接找到对应的方法,就可以对其直接进行修改维护

方法:

? ? ? ? 拥有功能性代码的代码块

? ? ? ? 将不同的功能放在不同的方法中,给每个方法取个名字,直接调用方法名,对应的方法就被执行起来了,便于维护。

通用定义格式:

? ? ? ? 修饰符 返回值类型 方法名(参数){

? ? ? ? ? ? ? ? 方法体

? ? ? ? ? ? ? ? return 结果

? ? ? ? }

? ? ? ? ①无参无返回值方法

? ? ? ? ②有参无返回值方法

? ? ? ? ③无参有返回值方法

????????④有参有返回值方法

2.简单方法定义(无参无返回值)

1.无参无返回值方法的定义:

? ? ? ? public static void 方法名(){

?? ? ? ? ? ? ? ?方法体 -> 实现此方法的具体代码

????? ? }

2.调用:

? ? ? ? 在其它方法中:方法名()

3.注意事项:

? ? ? ? ①void关键字代表无返回值,写了void,就不要在方法中写return了

? ? ? ? ②方法不调用,不执行,main方法是jvm自动调用的

? ? ? ? ③方法之间是平级关系,不能嵌套调用

? ? ? ? ④方法的执行顺序和定义顺序无关,只和调用的顺序有关

    public static void main(String[] args) {
        farmer();
        cooker();
        personal();
    }

    //农民伯伯
    public static void farmer(){
        System.out.println("播种");
        System.out.println("施肥");
        System.out.println("拔草");
        System.out.println("浇水");
        System.out.println("除虫");
        System.out.println("收割");
    }

    //厨师
    public static void cooker(){
        System.out.println("洗菜");
        System.out.println("切菜");
        System.out.println("炒菜");
        System.out.println("装盘");
    }

    //自己个人
    public static void personal(){
        System.out.println("洗手");
        System.out.println("吃菜");
    }

?案例

定义一个方法,实现两个整数相加

    public static void main(String[] args) {
        Add();
        System.out.println("调用了Add方法");
    }

    public static void Add(){
        int a = 20;
        int b = 55;
        int sum = a+b;
        System.out.println("sum = " + sum);
    }

settings勾选,使得每个方法之间被隔开

3.方法定义各部分解释

①修饰符:public static

②返回值类型:

? ? ? ? 该方法最终返回结果的数据类型

? ? ? ? ????????比如:return 1 -> 方法上的返回值类型写int

? ? ? ? ? ? ? ? ? ? ? ? ? ?return 2.5 -> 方法上的返回值类型写double

? ? ? ? ? ? ? ? ? ? ? ? ? ?return "" -> 方法上的返回值类型写String

? ? ? ? ? ? ? ? 如果没有返回值,不要写具体的返回值类型,要写void

③方法名:见名知意(小驼峰原则)

④参数:进入到方法内部参与执行的数据(数据类型 变量名,数据类型 变量名)

⑤方法体:实现该方法的具体代码

4.有参数无返回值方法

1.格式:

public static void 方法名(数据类型 变量名){

? ? ? ? 方法体

}

定义一个方法,实现两个整数相加

    public static void main(String[] args) {
        sum(10,20);
    }

    public static void sum(int a,int b){
        int sum = a+b;
        System.out.println("sum = " + sum);
    }

5.无参数有返回值方法

1.格式:

public static void 方法名(数据类型 变量名){

? ? ? ? 方法体

}

定义一个方法,实现两个整数相加,将结果返回

    public static void main(String[] args) {
        int sum=sum();
        System.out.println("sum = " + sum);
    }

    public static int sum(){
        int a = 10;
        int b = 20;
        return a+b;
    }

6.有参数有返回值方法

1.格式:

public static void 方法名(数据类型 变量名){

? ? ? ? 方法体

}

2.调用:

? ? ? ? ①打印调用:

? ? ? ? ? ? ? ? sout(方法名(具体的值))

? ? ? ? ②赋值调用:(推荐)

? ? ? ? ? ? ? ? 数据类型 变量名 = 方法名(具体的值)

定义一个方法,实现两个整数相加,将结果返回

    public static void main(String[] args) {
        int sum=sum();
        System.out.println("sum = " + sum);
    }

    public static int sum(){
        int a = 10;
        int b = 20;
        return a+b;
    }

二、方法的参数和返回值

1.形参和实参

1.形式参数(形参):在定义方法的时候形式上定义的参数,此参数还没有值

2.实际参数(实参):在调用方法的时候给形参赋予具体的值

2.参数和返回值使用的时机

1.参数:

? ? ? ? 当想将方法A的数据传递到方法B时,那么定义方法B时就需要带两个参数,在方法A中调用方法B时,可以将方法A中的数据通过参数传递到方法B中

2.返回值:

????????调用方法A时,想要方法A的结果,去参与其他的操作,那么方法A就需要将自己的结果返回

    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        method(a,b);
        int result = sum(a,b);
        System.out.println("result = " + result);
    }

    public static void method(int a,int b){
        System.out.println(a+" "+b);
    }

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

框架、返回值的三体架构思想

1.Controller(表现层)接受的请求参数需要一层一层传递到service(业务层),service层需要将请求参数再传递到dao(持久层),此时service以及dao的方法都需要参数接收

2.dao层的结果需要传递给service,service再传递给controller层,此时dao层和service方法需要返回值

3.变量作为实参使用

案例

定义一个方法,比较两个整数的大小,如果第一个大于第二个,返回true,否则返回false

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        boolean Pare = Compare(a,b);//传递的是a和b代表的数据,不是变量本身
        System.out.println("Pare = " + Pare);
    }

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

二、方法的注意事项

1.方法不调用不执行

2.方法的执行顺序只和调用顺序有关

3.方法之间不能互相嵌套

4.void不能和return结果共存,但是 void能和return共存

? ? ? ? ①void:代表没有返回值

? ? ? ? ②return 结果:就代表有返回值,先将结果返回,然后结束方法

? ? ? ? ③return:仅仅代表结束方法,不代表有返回值

5.一个方法中不能连续写多个return,也就是说,一个方法不能有多个返回值

6.调用方法时,先看一下方法有没有被定义,如果没有被定义将会直接报错

初学者如何使用方法:

? ? ? ? 1.先定义在调用

? ? ? ? 2.如果是没有返回值的方法,直接再被调用的方法内部输出结果

? ? ? ? 3.如果是带返回值的方法,在调用完毕后,用一个变量去接受结果,输出这个变量

? ? ? ? 4.调用方法:

? ? ? ? ? ? ? ? 直接调用:方法名()或 方法名(实参) -> 只针对于无返回值的方法

? ? ? ? ? ? ? ? 打印调用:sout(方法名())或者 sout(方法名(实参)) -> 针对有返回值的方法,不推荐使用

? ? ? ? ? ? ? ? 赋值调用:数据类型 变量名 = 方法名() 或者 数据类型 变量名 = 方法名(实参) -> 针对于有返回值的方法,推荐使用

??????

??????????5.练习:

? ? ? ? ? ? ? ? ①如果定义的方法没有返回值,写个void,不要写renturn结果

? ? ? ? ? ? ? ? ②如果定义的方法有返回值,将void改为具体的返回值类型,在方法体中最后写一个return结果,将结果返回

? ? ? ? ? ? ? ? ③如果方法有返回值,调用的时候推荐使用赋值调用,如果没有返回值,使用直接调用

? ? ? ? ? ? ? ? ④练习的时候,完成一个简单的需求,针对这个需求,定义四种方法,并成功调用

三、方法练习

1.方法练习1(判断奇偶性)

键盘录入一个整数,将整数传递到另外一个方法中,在此方法中判断这个整数的奇偶性

如果是偶数,方法返回“偶数”,否则返回“奇数”

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入一个整数");
        int num = sc.nextInt();
        String result = Judge(num);
        System.out.println("result = " + result);
    }

    public static String Judge(int a){
        if(a%2==0){
            return "偶数";
        }else{
            return "奇数";
        }
    }

2.方法练习2(1-100的和)

求出1-100的和,并将结果返回

    public static void main(String[] args) {
        int num = Sum();
        System.out.println("num = " + num);
    }

    public static int Sum()
    {
        int sum = 0;
        for (int i = 0; i <= 100; i++) {
            sum += i;
        }
        return sum;
    }

3.方法练习3(不定次数打印)

定义一个方法,给这个方法传几,就让这个方法循环打印几次“一切都会好的”

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入一个数,选择打印次数");
        int num = sc.nextInt();
        Print(num);
    }
    public static void Print(int a){
        for (int i = 0; i < a; i++) {
            System.out.println("一切都会好的");
        }
    }

4.方法练习4(遍历数组)

在main方法中定义一个数组,将数组传递到方法中去,在此方法中遍历数组

    public static void main(String[] args) {
        int[] arr = new int[9];
        Scanner sc = new Scanner(System.in);
        System.out.println("请您给数组赋值");
        int i = 0;
        for (i = 0; i < 9; i++) {
            arr[i] = sc.nextInt();
        }
        Print(arr);
    }

    public static void Print(int arr[]){
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        return;
    }

5.方法练习5

数组作为返回值返回

数组本身是引用数据类型,引用数据类型做方法参数传递,传递的是地址值

    public static void main(String[] args) {
        int[] arr=method();//用和方法类型相同类型的变量接收
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    public static int[] method(){
        int a = 10;
        int b = 20;
        int sum = a+b;
        int sub = a-b;
        int[] arr1 = {sum,sub};
        return arr1;//返回的是一个int[],那么返回值类型也应该是int[]
    }

四、方法的重载

1.定义

方法名相同 参数列表不同的方法

参数列表不同:

? ? ? ? ①参数个数不同

? ? ? ? ②参数类型不同

? ? ? ? ③参数类型顺序不同

2.引例

定义一个方法,分别求2个整数相加,3个整数相加,4个整数相加

    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c = 3;
        int d = 4;
        sum(a,b);
        sum(a,b,c);
        sum(a,b,c,d);
    }

    //两个整数相加
    public static void sum(int a,int b)
    {
        System.out.println("(a+b) = " + (a + b));
    }

    //三个整数相加
    public static void sum(int a,int b,int c){
        System.out.println("(a+b+c) = " + (a + b + c));
    }

    //四个整数相加
    public static void sum(int a,int b,int c,int d){
        System.out.println("(a+b+c+d) = " + (a + b + c + d));
    }

3.方法重载的注意事项

1.判断两个方法是否为重载方法,与什么无关?

? ? ? ? ①和方法的参数名无关

? ? ? ? ②和方法的返回值无关

????????方法名严格区分大小写

2.什么时候用到方法的重载?

? ? ? ? 如果定义方法的功能一样,只不过实现细节不一样,就可以考虑定义成重载的方法

五、总结

文章来源:https://blog.csdn.net/m0_73983707/article/details/135660404
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。