初识JAVA11:可变参数、二维数组、Arrays类、内部类

可变参数

jkd1.5新增

​ 多个参数的类型相同,参数的个数可变,0~n个参数

​ …表示可变参数

​ 方法的形参可以存在多个,如果存在可变参数,必须存在与参数列表的最后

​ 编译器会为可变参数隐式构建一个数组,所在方法中使用可变参数,使用操作数据的方式操作可变参数

public class Demo{
    public static void main(String[] args){
        System.out.println(Param.sum(1,2,3,4,5));
        System.out.println(Param.except(16,2));
        System.out.println(Param.except(16,2,2,2));
    }

}


class Param{
    //可变参数列表
    public static int sum(int... args){
        int sum=0;
        for(int i:args){
            sum += i;
        }
        return sum;
    }
    //如果要求方法至少存在n个参数,那么将固定参数写在可变参数前面
    public static int except(int a,int b,int... args){
            a /=b;
        for(int i:args){
            a /= i;
        }
        return a;
    }
}

二维数组

数组中嵌套数组

声明:

​ 数据类型[ ] [ ] 数组名;

初始化:

​ 动态初始化:先创建数组,后赋值

​ 数据类型[ ] [ ] 数组名 = new

​ 数据类型[外层的长度] [内层的长度];

​ 特点: 内层的每一个一维小数组长度固定

​ 内层二维的长度;

​ 规定了外层一维数组中的每一个格子中的小数组的长度

​ 数据类型[ ] [ ] 数组名 = new 数据类型[外层二维数组的长度][ ];

​ 特点:内层的内一个一维小数组对象还没有创建,需要在能够确定的时候单独创建每一个内层一维数组

​ 数组名[索引] = 一维数组对象|一维数组的创建方式(动态|静态初始化);

​ 静态初始化:创建数组的同时赋值

​ 数据类型[ ] [ ] 数组名 = new 数据类型[][]{{数据1,数据2…},{数据1,数据2…},…};

操作二维数组中的数据:
根据索引
数组名[外层索引][内层的索引]

public class Demo {
    public static void main(String[] args) {
        int[][] arr1 = new int[2][2];

        int[][] arr2 = new int[1][];
        arr2[0] = new int[1];
        arr2[1] = new int[]{1,2,3};
        //可以为二维数组中包含的一维数组可以为不等长数组
        int[][] arr3 = new int[][]{{1,2,3},{4},{5,6}};
    }
}

二维数组的遍历

双重循环嵌套:

​ 普通嵌套普通

​ 普通嵌套增强

​ 增强嵌套增强

​ 增强嵌套普通

public class Demo {
    public static void main(String[] args) {
        int[][] arr1 = new int[2][2];

        int[][] arr2 = new int[2][];
        arr2[0] = new int[1];
        arr2[1] = new int[]{1,2,3};
        //可以为二维数组中包含的一维数组可以为不等长数组
        int[][] arr3 = new int[][]{{1,2,3},{4},{5,6}};

        //普通嵌套普通
        for(int i = 0;i<arr3.length;i++){
            for(int j =0;j<arr3[i].length;j++){
                System.out.print(arr3[i][j]+" ");
            }
        }
        System.out.println();

        //普通嵌套增强
        for(int i = 0;i<arr3.length;i++){
            for(int j : arr3[i]){
                System.out.print(j+" ");
            }
        }
        System.out.println();

        //增强嵌套普通
        for(int[] arri:arr3){
            for(int i=0;i<arri.length;i++){
                System.out.print(arri[i]+" ");
            }
        }
        System.out.println();

        //增强嵌套增强
        for(int[] arri:arr3){
            for(int i :arri){
                System.out.print(i+" ");
            }
        }
    }
}

Arrays类

import java.util.Arrays; //使用前需要导包

数组遍历

Arrays.toString(数组类型[ ] 数组名)

返回指定数组内容的字符串表示形式 //遍历数组,将数据中的内容以字符串形式固定格式返回

Arrays.deepToString(Object[ ] a)

返回指定数组的“深层内容”的字符串表示形式。 //可以遍历二维数组

数组比较

Arrays.equals(数组1,数组2)

如果两个指定的数组彼此包含的内容相等则返回 true

Arrays.deepEquals(数组1,数组2)

如果两个指定的数组彼此包含的深层内容相等则返回 true

数组拷贝

Arrays.copyOf(原数组名,新数组的长度)

返回一个新数组

//当新数组的长度 = 原数组长度->完全拷贝

//当新数组的长度 < 原数组长度->截取 默认从所有为0的位置开始

//当新数组的长度 > 原数组长度->填充 默认原数组中所有位置完全拷贝,空闲位置默认值填充

Arrays.copyOfRange(原数组名,起始下标,结束下标)

拷贝原数组执行区间范围内的数据,结束索引不包含,返回一个新数组

数组填充

Arrays.fill(数组名,填充值)

无返回值

使用指定的数据填充整个数组,数组中原有的值被覆盖

Arrays.fill(数组名,起始下标,结束下标,填充值)

无返回值

填充数组中指定范围,结束索引位置不包含

数组排序

Arrays.sort(数组名)

无返回值,将指定的数组按升序排序。

二分查找

Arrays.binarySearch(数组名,需要查找的值)

要求先升序排序

如果数据存在返回索引位置,不存在,返回插入点-1的值

内部类

类中定义类

当类中的成员也表示为一个事物的时候,可以定义为内部类

分类

​ 成员内部类
​ 静态内部类
​ 私有内部类
​ 局部内部类
​ 匿名内部类 ****
​ lambda表达式 *****

成员内部类

类定义在外部类的成员位置,就是成员内部类,是成员,就具有成员的特点,是类就具有类的特点,可以继承,实现…

注意:

​ 成员内部类中不能定义静态内容,除了静态的常量

​ 只有静态内部类才能定义静态内容

​ 成员内部类中可以使用外部类的成员,包括私有的

​ 外部类中可以通过内部类的对象使用内部类的成员包括私有的

​ 成员内部类的对象通过外部类对象构建

私有内部类

​ 被private关键字修饰的成员内部类

​ 不能定义静态内容,除了静态的常量

​ 私有内部类中可以直接使用外部类的成员,包括 私有的

​ 在外部类中通过私有内部类的对象使用其成员,包括私有的

​ 私有内部类智能在所在的外部类中使用

静态内部类

​ 静态内部类中可以定义非静态成员,可以定义静态成员

​ 静态内部类中可以使用外部类的成员,静态内容可以直接使用,成员内容需要通过外部类对象使用

​ 外部类中可以通过静态内部类类名使用其静态成员,需要通过静态内部类的对象使用内部类的成员

​ 其他类中使用静态内部类中的内容,需要根据外部类的类名找到静态内部类,根据静态内部类类名使用其静态内容,根据静态内部类对象使用其成员

局部内部类

​ 不能被public,private,等,static修饰,可以被final修饰

​ 局部内部类中可以定义成员内容,除了静态的常量,其他静态内容不可以定义

​ 局部内部类只能在所在的方法中使用,通过对象使用成员

​ 如果在局部内部类中使用了所在的方法中的局部变量(方法参数),这个变量要求被final修饰,在jdk1.8及之后,默认被final修饰

匿名内部类

匿名对象:是对象,没有引用指向这个对象

匿名内部类:没有名字的一个内部类

​ 作用:

​ 没有类本身作用,只为了重写的一些抽象方法,方便调用这个方法,匿名内部类就可以简化这种实现类

​ 简化符合需求的实现类,子类->接口|抽象父类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值