方法的参数传递

  • Post author:
  • Post category:其他



目录


方法的参数传递(基本类型)


方法的参数传递(引用类型)


命令行传参


可变参数


方法的参数传递(基本类型)

  • 对于基本数据类型的参数,形式参数的改变,不影响实际参数的值

  • 代码实现

    package com.csc;
    public class Test01 {
        public static void main(String[] args) {
            int number = 100;
            System.out.println("调用change前:"+number);
            change(number);
            System.out.println("调用change后:"+number);
        }
        public  static  void change(int number1){
            number1 = 200;
            return number1;
        }
    }
  • 代码解析

      public static void main(String[] args) {    //把main方法加载到栈内存
        int number = 100;                        //在main方法中加载一个 int number   100;
        System.out.println("调用change前:"+number); //将number的值输出
        change(number);                         //调用change方法:把change方法加载到栈内存
        public  static  void change(int number1){ //在chenge方法中,加载一个 int nember1  100 
                                        //  number1 是形参,它的初始值是实参number给它的。实参number的初始值:100
            number1 = 200;              //   number1的值从100 变为了200
            return number1;             //  将number1的值返回到main方法中,暂时main方法中没人接收
            }                           //chenge方法结束 int number1 = 200 和change方法一起随着changg方法的结束而在                                       栈内存中消失
         System.out.println("调用change后:"+number);//再次输出number的值,这次number的值在main方法中,值为100
      }                                 //main方法结束,int number = 100 和main方法一起随着mian方法的结束在                                               栈内存中消失

方法的参数传递(引用类型)

  • 对于引用类型的参数,形式参数的改变,影响实际参数的值。

  • 代码实现

    package com.csc;
    public class Test01 {
        public static void main(String[] args) {
            int[] arr = {10,20,30};
            System.out.println("调用change前:"+arr[1]);
            change(arr);
            System.out.println("调用change后:"+arr[1]);
        }
        public  static  void change(int[] arr1){
            arr1[1] = 200;
        }
    }
  • 代码分析

     public static void main(String[] args) {     //把main方法加载到栈内存
         int[] arr = {10,20,30};    //int[] arr 出现在栈内存main方法中   {10,20,30}会出现在堆内存里面,形成2行2列的表格
                                                                    //表格上方会出现地址值001 
                                    //会将地址值001 赋值给栈内存的 arr
         System.out.println("调用change前:"+arr[1]);//输出arr[1]的值--->20
         change(arr);               //调用change方法:把change方法加载到栈内存
          public  static  void change(int[] arr1){在chenge方法中,加载一个 int[] arr1  001 
                                        //  arr1是arr 传递过来的 也是堆内存中地址值是001的数据
              arr1[1] = 200;        //通过arr1--->001--->索引1--->20   ===>20变成200 堆内存的数据发生改变
           }            //chenge方法结束 int number1  001 和change方法一起随着changg方法的结束而在栈内存中消失 
         System.out.println("调用change后:"+arr[1]);//再次输出arr[1]的值,堆内存的数据发生了改变 但是没有消失
           }                        //main方法结束,int[] arr  001 和main方法一起随着mian方法的结束在栈内存中消失

命令行传参

  • 有时候你希望运行一个程序的时候再传递给它消息。这需靠传递命令行参数给main()函数实现。

 package com.chang.method;
   
   public class Method0401 {
       public static void main(String[] args) {
           //args.length   数组长度
           for (int i = 0; i <args.length ; i++) {
               System.out.println("args["+i+"]:"+args[i]);
           }
       }
   }
  • 打开文件所在位置,进入命令行

    • 找不到或无法加载主类原因:代码中引用了包机制 因此需要用cd..退到包机制上面的文件夹中:eg:src

    • 第一运行java出没有变化 是因为没给传参

可变参数

  • 在JDK1.5开始,Java支持传递同类型的可变参数的一个方法

  • 在方法声明中,在制定参数类型后加一个省略号(…)

  • 一个方法中只能制定一个可变参数,他必须是方法的最后一个参数。任何普通的参数必须在它之前声明

  • 格式:

      public void add(int...i)//main方法传参    add(1,2,3,4,5); 相当于i是个数组 int i[] = {1,2,3,4,5} 
      public void add(int a,int...i)//main方法传参  add(1,2,3,4,5); 1 传a    2,3,4,5 传i

  • 代码实现

    package com.chang.method;
    ​
    public class Method0501 {
        public static void main(String[] args) {
            Method0501 method0501 = new Method0501();
            method0501.add(1,2,3,4,5);//必须是相同的类型
        }
        public void add(int...i){
            System.out.println(i[0]);
        }
    }
    package com.chang.method;
    ​
    public class Method0502 {
    ​
        public static void main(String[] args) {
            Method0502 method0502 = new Method0502();
            method0502.printMax(10,20,30,21,29);
        }
        public void printMax(double...i){
                if(i.length==0){
                    System.out.println("您没有输入");
                }
                double result = i[0];
            for (int j = 0; j <i.length ; j++) {
                if(i[j]>result){
                    result = i[j];
                }
            }
            System.out.println("最大值为:"+result);
        }
    }



版权声明:本文为m0_46179506原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。