java数组

数组

所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身 属于引用数据类型,那么既然是引用数据类型,这里面实际又会牵扯到内存分配,数组变量是引用(地址)型变量

数组相关概念:

  • 数组名
  • 元素
  • 角标、下标、索引
  • 数组的长度:元素的个数 length

数组的特点:

  • 数组是有序排列的
  • 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
  • 创建数组对象会在内存中开辟一整块连续的空间
  • 数组的长度一旦确定,就不能更改。

数组的分类

  • 按照维数:一维数组、二维数组、... ...
  • 按照数组元素的类型:基本数据类型元素的按钮、引用类型元素的数组

数组的定义

1、声明并开辟数组 

元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
初始化操作
arr[0]=10;

 2、静态初始化数组

数组先开辟内存空间,而后再使用索引进行内容的设置,实际上这种做法都叫做动态初始化,而如果希 望数组在定义的时候可以同时出现设置内容,那么就可以采用静态初始化完成。

元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};

 数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。

数组的特点:数组长度是固定的。

注:使用new关键字分配内存时,简单类型的数组中的元素都有初始值

数组元素的默认初始化值

  • ‘数组元素是整型:0
  • 数组元素是浮点型:0.0
  • 数组元素是char型:0或'\u0000',而非'0'
  • 数组元素是boolean类型:false,Oracle的JVM中采用byte[]方式进行存储

数组内存分配

  • 数组是对象,也就是说可以以操作对象的方式来操作数组。并且数组在虚拟机中有它特别的类型。 既然是对象,遵循Java语言中的规则所有类的顶层父类都是Object。数组的顶层父类也必须是 Object,这就说明数组对象可以向上直接转型到Object,也可以向下强制类型转换,也可以使用 instanceof关键字做类型判定
  • String[]的直接父类就是Object而不是Object[]。可是Object[]的引用也可以指向String[]类型的对 象。数组类直接继承了Object,关于Object[]类型的引用能够指向String[]类型的对象,这种情况只 能是Java语法之中的一个特例,并不是严格意义上的继承。也就是说,String[]不继承自Object[], 但是我可以允许你向上转型到Object[],这种特性是赋予你的一项特权。

数组类直接继承了Object,关于Object[]类型的引用能够指向String[]类型的对象,这种情况 只能是Java语法之中的一个特例,并不是严格意义上的继承。也就是说,String[]不继承自 Object[],但是我可以允许你向上转型到Object[],这种特性是赋予你的一项特权。 如果有两个类A和B,如果B继承extends了A,那么A[]类型的引用就可以指向B[]类型的对象。

数组操作方式

  • 数组的访问通过索引完成,即:数组名称[索引],但是需要注意的是,数组的索引从0开始,所以索 引的范围就是0 ~ 数组长度-1,例如开辟了3个空间的数组,所以可以使用的索引是0,1,2,如果此 时访问的时候超过了数组的索引范围,会产生ArrayIndexOutOfBoundsException 异常
  • 当数组采用动态初始化开辟空间后,数组里面的每一个元素都是该数组对应数据类型的默认值
  • 数组本身是一个有序的集合操作,所以对于数组的内容操作往往会采用循环的模式完成,数组是一 个有限的数据集合,所以应该使用 for 循环
  • 在Java 中提供有一种动态取得数组长度的方式:数组名称.length;
  • 数组遍历通常使用for循环来实现。也可以用foreach实现 
int a=100;
int[] arr1={a,2,6,7,9,4};
int[] arr2=new int[]{a,2,6,7,9,4};
int[] arr3=arr1;
System.out.println(arr);
//输出默认格式为:元素数据类型@数据的hash地址值。类似的还有md5、sha-1、sha-256等消息摘
//要算法
for(int i=0;i<arr1.length;i++)
System.out.println(arr1[i]);
System.out.println(Arrays.toString(arr1));

 数组常见异常

1. NullPointerException 空指针异常

原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。

public static void main(String[] args) {
    int[] obj=null;
    System.out.println(obj.length);
}

2. ArrayIndexOutOfBoundsException 索引值越界

原因:访问了不存在的索引值。数组角标越界异常:,注意:数组的角标从0开始。 

int[] arr=new int[]{1,2,3,4,5};
for(int i=0;i<=arr.length;i++)
System.out.println(arr[i]);

冒泡排序

现有一个小数数组{12.9,53.54,75.0,99.1,3.14}。请编写代码,找出数组中的最小值并打印

public class Test1 {
    public static void main(String[] args) {
        double[] arr = { 12.9, 53.54, 75.0, 99.1, 3.14 };
        for (int k = 1; k < arr.length; k++) {
            for (int i = 0; i < arr.length - k; i++) {
                if (arr[i] > arr[i + 1]) {
                    double tmp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = tmp;
                }
            }
        }
        for (double tmp : arr) {
            System.out.print(tmp + "\t");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值