方法是实现一个功能的代码片段,定义的方法只要实现这个功能就可以了。没有仔细想过,既然方法是实现功能的代码那么我在main方法中直接写代码实现这功能就可以呀?
还定义他干什么呢?
方法他的作用就是降低代码的重复,提高复用率的。方法的创建是出于优化代码结构和提高效率,之前我的代码基本就是实现这个功能就可以了,没有考虑到方法的通用性,便捷性,健壮性。
如:
public class Test4 {
public static void main(String[] args) {
test5();
}
public static void test5(){
int[] arr1={1,2,3,4,5};
int[] arr2=new int[arr1.length];
int j=0;
for(int i=arr1.length-1;i>=0;i--){
arr2[j]=arr1[i];
j++;
}
for(int k=0;k
把一个数组逆序输出,我自己定义的这个方法中,直接把数组定义在这个方法内,没有考虑到这个便捷,要调用方法时需要去方法内改数组元素这样就很不方便。
优化:
public class Test4 {
public static void main(String[] args) {
int[] arr1={1,2,3,4,5};
test5(arr1);
}
//逆序输出
public static void test5(int[] arr1){
int[] arr2=new int[arr1.length];//定义新的空数组,用来接收原数组逆序输出的值
int j=0;
for(int i=arr1.length-1;i>=0;i--){
arr2[j]=arr1[i];
j++;
}
for(int k=0;k
System.out.println("逆序输出的数组"+arr2[k]);
}
}
}
现在把数组定义在外面。调用方法时只需要在main方法中把数组改一下就可以,实参就直接把参数传递给形参,这个方法就变得通用和方便了。
2.方法中参数的传递,值的改变问题总结:在定义方法时,要充分考虑到方法调用时的普用性,便捷性,健壮性。
参数的传递有值传递和引用传递,值传递中形参的改变不会影响实参,因为
形参只是把实参的值拷贝一份,之后就不管实参的事了。
引用传递拷贝的是内存地址,实参和形参都是指向同一个地址,所以形参发生改变,实参也会改变。
但之前我想值传递有什么方法让实参发生改变呢?
不就是加个返回值吗?
如:
public class Test3 {
public int fun(int x,int y,int z) {
z = x * x + y * y;
return z;
}
public static void main(String[] args) {
Test3 d = new Test3();
int a = 10;
d.fun(6,2,a);
System.out.println(a);
}
}
输出的值没有变化,我之前给自己的解释是:在栈中所有变量都弹出了,fun()方法也弹出了,他的值业务效率。剩下int a=10,所以最终a的值还是10。
完全不是一回事。既然我把是值return了,那么参数的值应该是改变了的。我发现虽然我调用了方法,传了参数。可是没有把方法中返回来的值用一个变量存储起来。
改进:
public class Test3 {
public int fun(int x,int y,int z) {
z = x * x + y * y;
return z;
}
public static void main(String[] args) {
Test3 d = new Test3();
int a = 10;
a=d.fun(6,2,a);
System.out.println(a);
}
}
总结:在调用方法时,要再对方法操作(打印,运算等)时要把方法用一个变量存储起来。
出现的问题,虽然可能都是一些小问题。但却有时候让我很困惑,并且常出bug的地方。



