概述
一、实参与形参
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_方法_实参和形参)----高级篇所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复