栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习Java方法遇到的问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习Java方法遇到的问题

1.对方法的作用没有清晰的认识

方法是实现一个功能的代码片段,定义的方法只要实现这个功能就可以了。没有仔细想过,既然方法是实现功能的代码那么我在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的地方。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007610.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号