关于前面内容的查疑补漏

前面我们讲了那么多的内容,难免有遗漏之处,这节我们就遗漏之处做一个补充,一起来看看吧!

  • String[ ] args

它主要用在当我们执行Java程序(Java 字节码文件)的时候,可以指定一些参数。

class Test01{
    public static void main(String[] args){
        System.out.println(args.length);
        for(int i=0;i<args.length;i++){
            System.out.println(args[i]);
        }
    }
}

上面的代码,在主函数中我们直接输出了args的长度,然后对args进行了遍历,输出它当中每一个元素。正如上面所说,String[ ] args它主要用在当我们执行Java程序(java 字节码文件)的时候,可以指定一些参数。所以我们在终端里面首先编译,然后在运行的时候传入数字1 2 3,最后发现打印出了传入参数的长度、内容。这就是它的用法。

另外说一下,这里面args的名称是可以改变的,因为它只是一个参数名。

 

  • 可变长参数

​​​​​​​当我们在给一个函数传参的时候,如果我们不确定具体要传参数的个数的话,这个时候就可以使用可变长参数(这些参数必须是相同的类型)。其实它本质上就是一个数组。

class Test02{
    public static void main(String[] a){
        multiArguments(1);
        multiArguments(1,2,3);
        multiArguments(1,2,3,4,5,6);
    }
    //传入的是不确定个数的int型参数
    public static void multiArguments(int ... nums){
        //System.out.println(nums.length);
        for(int i = 0;i < nums.length;i++){
            System.out.print(nums[i] + " ");
        }
        System.out.println();
    }
}

 

在主函数当中调用了三次multiArgiments方法,第一次传入了一个参数1,第二次传入了三个参数1、2、3,第三次传入了六个参数1、2、3、4、5、6,所以最后打印出来的分别是1/123/123456。这就是可变长参数的用法,

PS:1.一个参数列表当中只能有一个可变长参数,如果出现多个的话,首先编译就会出错;

        2.如果可变长参数和固定参数同时存在的话,那么可变长参数必须在参数列表的最后面。

  • foreach循环

​​​​​​​for(循环数据类型 循环变量名:可迭代对象){

        循环体;

class Test03{
    public static void main(String[] args){
        multiArguments(1);
        multiArguments(1,2,3);
        multiArguments(1,2,3,4,5,6);
    }
    //传入的是不确定个数的int型参数
    public static void multiArguments(int ... nums){
        /*
        for(循环数据类型 循环变量名 : 可迭代对象 ){
            循环体;
        }
	*/
	for(int num:nums){
		System.out.print(num);
	}
	System.out.println();
    }
    /*
        这里的num其实表示的是nums[i]  i∈[0~nums.length)
        只不过在foreach中屏蔽掉了i的具体行为。
        
        此外,数组是可迭代对象当中的一种,并且数组可以通过角标访问
        所以目前我们可以认为num等效于nums[i]。

        但是并不代表所有的可迭代对象都有角标支持,
        有些可迭代对象的元素访问顺序是比较复杂的,
        所以为了避免这些复杂就有了foreach循环。
        
        foreach有什么样的一个缺点呢?
        它仅仅只能访问元素,不能对元素进行修改。
        num仅仅是nums[i]的一个备份,改num不代表改nums[i]。

        所以说我们如果仅仅访问元素的话,用foreach循环会更简单。
    */
}

 

如上图运行结果所示,我们使用foreach循环还是可以打印出来结果,它其实是一个简化过后的for循环。

  • Arrays类

​​​​​​​Arrays类是关于数组的工具类,而我们之前学过的Math、Scanner、String,这些都不是工具类。来看一些实例。

import java.util.Arrays;
class Test04{
    public static void main(String[] args){
        int[] arr = {1,3,5,7,9,2,4,6,8};
	//1.static void sort(int[] a)这个方法是对指定的数组按数字升序进行排序。
        Arrays.sort(arr);

	/*2.static int binarySearch(int[] a, int key)
	这个方法是使用二分搜索法来搜索指定的int型数组,以获得指定的值。
	*/
        System.out.println(Arrays.binarySearch(arr,8));//7

	/*3.static int[] copyOf(int[] original, int newLength) 
	这个方法是复制指定的数组,截取或用0填充(如有必要),以使副本具有指定的长度。
	*/
        arr = Arrays.copyOf(arr,arr.length+1);

	//4.static String toString(int[] a)这个方法是返回指定数组内容的字符串表示形式。
        System.out.println(Arrays.toString(arr));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    }
}

上面我们介绍了4种方法,具体功能都已写在代码中。

  • 多返回值处理

​​​​​​​Java的函数仅仅只能返回单一的值,如果需要一次性返回多个值,我们就需要将多个值封装在一个数组当中即可,后面也会学到集合/映射。

import java.util.Arrays;
class Test05{
    public static void main(String[] args){
        //传入一个坐标点,将坐标点进行移动
        int x = 0;
        int y = 0;
        int[] res = move(x,y,10,10);//x=10,y=10
        x = res[0];
        y = res[1];
        System.out.println("x=" + x);//x=10
        System.out.println("y=" + y);//y=10
    }
    //如果是C/C++语言的话,只需要传x和y的指针即可.
    //void move(int *x,int *y){ *x+=deltx; *y+=delty;}
    public static int[] move(int x,int y,int deltx,int delty){
        x+=deltx;
        y+=delty;
        return new int[]{x,y};
    }
}

好了,这次的额外补充知识我们就说到这里,拜拜啦!

发布了19 篇原创文章 · 获赞 25 · 访问量 4395

猜你喜欢

转载自blog.csdn.net/Agonyq/article/details/104431484