我是靠谱客的博主 默默保温杯,最近开发中收集的这篇文章主要介绍Java学习的第十天(JavaSE基础06_方法_实参和形参)----高级篇,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、实参与形参

1.代码引入01
package com.yingcan_and_shican;

public class Demo_JiBenShuJu {
    public static void main(String[] args) {
        int a=10;
        System.out.println("打印主方法中的a="+a);
        print(a);
        System.out.println("print方法调用完之后的a="+a);
    }
    public static void print(int a){
        a=15;
        System.out.println("打印print方法中的a="+a);
    }
    //如果形参是基本数据类型,形参的改变不影响实参(实参和形参分别在两个不同的栈帧中,没有直接的关联)
}

运行结果:

2.为什么print方法调用完之后的a的值还是10??

通过下面的图来理解为什么自定义方法中明明更改了a的值为20,但是调用完之后打印a还是10

总结1:如果形参是基本数据类型(byte/short/int/long/float/double/char/boolean),形参的改变不影响实参(形参和实参分别在两个不同的栈帧里面,没有直接的关联)

3.代码引入02
package com.yingcan_and_shican;

public class Demo_YinyongShuJu {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7};
        System.out.println("打印main方法中的arr");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"t");
        }
        System.out.println();
        printArr(arr);
        System.out.println();
        System.out.println("打印printArr方法执行完之后的arr");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"t");
        }
        System.out.println();
    }
    public static void printArr(int[] arr){
        arr[0]=8;
        System.out.println("打印printArr方法中的arr");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"t");
        }
    }
    //如果形参是引用数据类型,那么形参的改变会影响实参
}

运行结果:

4.为什么printArr方法调用完之后,数组竟然改变了 ??

通过下面的图来理解为什么自定义方法中更改了数组的值,但是调用完之后主方法打印数组竟然改变了

总结2:如果形参是引用数据类型(数组),形参的改变会影响实参

5.代码引入03(String类型:比较特殊)
package com.yingcan_and_shican;

public class Demo_String {
    public static void main(String[] args) {
        String a="hello";
        System.out.println("打印main方法中的arr"+"t"+a);
        printString(a);
        System.out.println("print完之后"+"t"+a);
    }
    public static void printString(String a){
        a="world";
        System.out.println("print"+"t"+a);
    }
    //以变量的形式定义的字符串存储在方法区里面的常量池中
}

运行结果:

6.为什么printString方法调用完之后,竟然没有改变 ??

String类型是引用类型,通过下面的图来理解为什么自定义方法中更改了String的值,但是调用完之后主方法打印内容竟然没改变

总结3:以变量的形式定义的字符串存储在方法区里面的常量池中

7.代码引入04(String类型:比较特殊)
package com.yingcan_and_shican;

public class Demo_String {
    public static void main(String[] args) {
        String a=new String("hello");
        System.out.println("打印main方法中的arr"+"t"+a);
        printString(a);
        System.out.println("print完之后"+"t"+a);
    }
    public static void printString(String a){
        a="world";
        System.out.println("print"+"t"+a);
    }
    //如果以new的形式定义String的值,那么hello会在堆内存中,而world在方法区的常量池中,两者更无交际,所以也就不会更改
}

运行结果:

6.为什么printString方法调用完之后,还是没有改变 ??

String类型是引用类型,通过下面的图来理解为什么自定义方法中更改了String的值,但是调用完之后主方法打印内容竟然没改变

总结4:如果以new的形式定义String的值,那么hello会在堆内存中,而world在方法区的常量池中,两者更无交际,所以也就不会更改

课后作业

package com.Homework;

import java.util.Scanner;

/* 定义一个方法,给数组排序(冒泡排序)*/
public class Hw1 {
    public static void main(String[] args) {
        int[] arr=new int[5];
        Scanner sc=new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第"+(i+1)+"个数");
            arr[i]=sc.nextInt();
        }
        sort(arr);
    }
    public static void sort(int[] arr){
        for (int i = 1; i < arr.length; i++) {
            for (int j = 0; j < arr.length-1; j++) {
                if(arr[j]>arr[j+1]){
                    int c=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=c;
                }
            }
        }
        System.out.println("冒泡排序完成,排序如下所示");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"t");
        }
    }
}
package com.Homework;

import java.util.Scanner;

/*定义一个方法,求三个数的最大值和最小值(要求有返回值)*/
public class Hw2 {
    public static void main(String[] args) {
        int[] arr=new int[3];
        Scanner sc=new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第"+(i+1)+"个数");
            arr[i]=sc.nextInt();
        }
        int[] arr1=new int[2];
        arr1=getMaxAndMin(arr);
        System.out.println("最大值为"+arr1[0]);
        System.out.println("最小值为"+arr1[1]);
    }
    public static int[] getMaxAndMin(int[] arr){
        int max=arr[0];
        int min=arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(max<arr[i]){
                max=arr[i];
            }
            if(min>arr[i]){
                min=arr[i];
            }
        }
        int[] arr1=new int[2];
        arr1[0]=max;
        arr1[1]=min;
        return arr1;
    }
}
package com.Homework;

import java.util.Scanner;

/*定义一个方法,求数组的和(要求有返回值)*/
public class Hw3 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入数组的长度");
        int num=sc.nextInt();
        int[] arr=new int[num];
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第"+(i+1)+"个数");
            arr[i]=sc.nextInt();
        }
        int sum=getSum(arr);
        System.out.println("它们的和为"+sum);
    }
    public static int getSum(int[] arr){
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            sum=sum+arr[i];
        }
        return sum;
    }
}
package com.Homework;

import java.util.Scanner;

/*定义一个方法进行数组的复制*/
public class Hw4 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入数组的长度");
        int num=sc.nextInt();
        int[] arr=new int[num];
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第"+(i+1)+"个数");
            arr[i]=sc.nextInt();
        }
        getCopy(arr,num);
    }
    public static void getCopy(int[] arr,int num){
        int[] arr1=new int[num];
        for (int i = 0; i < arr.length; i++) {
            arr1[i]=arr[i];
        }
        System.out.println("打印复制完之后的数组");
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i]+"t");
        }
    }
}

最后

以上就是默默保温杯为你收集整理的Java学习的第十天(JavaSE基础06_方法_实参和形参)----高级篇的全部内容,希望文章能够帮你解决Java学习的第十天(JavaSE基础06_方法_实参和形参)----高级篇所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部