前面讲到Java里面数组的定义以及数组的用处,现在来讲一下数组的使用,也就是操作数组里面的元素。

        数组元素包括数组的内存地址,以及数组的变量,数组的内存地址直接用定义时给数组取的名字就可以直接访问了,格式是:数组名,数组里面变量的访问就需要加入索引,格式是:数组名 [索引],这里讲到索引,那么索引是什么东西呢?索引就是数组容器中空间的编号,它有几点特征,第一就是它是从0开始的,再一个它是连续的,最后它是逐一增加的,相邻的变量之间相差1。

        接下来讲一下内存分配,Java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分每一片区域都有特定的处理数据方式和内存管理方式。

分别为:

        栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中

        堆内存: new出来的内容都会进入堆内存,并且会存在地址值

        方法区:字节码文件(.class文件)加载时进入的内存

        本地方法栈:调用操作系统相关资源

        寄存器:交给CPU去使用

java stream 数组找出索引 java数组索引是什么意思_System

在数组操作时,有几个常见的小问题值得注意

        第一个,索引越界,如果一个数组的长度是5,那么它的索引应该是0~4,如果你是 数组名[6]这样访问,那编译器就会报索引越界错误。

        第二个,空指针异常,访问的数组已经不再指向堆内存的数据,造成空指针异常,例如,arr{1,2,3,4,5},现在执行一条语句,arr = null;之后访问第三个变量 arr[2],这样会报空指针异常

        第三个,null,空值,引用数据类型的默认值,表示不指向任何有效对象,如 int [] arr = new int[5]; System.out.println(arr[2]);这样的结果就是输出0,int数据类型的数组如果没有值,系统就会给变量赋int数据类型数组的默认值0;

        刚刚讲了数组变量的访问,如int a1 = arr[0];int a2 = arr[1];int a3 = arr[2];......,这样访问是没有问题的,但是如果数据量大了呢,上百上千条呢,显然,这样访问就不太合适了,根据数组索引的规律,我们可以用循环来遍历数组,如for(int i=0;i<arr.length;i++){  sum += arr[i];  },这样就可以很轻松的访问数组的变量,操作并求和,这也就是我们说的数组的遍历。

接下来看两个例子

1、获取最值,如{190,230,33,290,789,765,498,210},求最大值和最小值;

先分析一下,这个问题我们如何解决呢?分几步呢?看它的意思,首先肯定是用定义一个数组啰,之后这里已经给出了数据,那么就用静态初始化的方式初始化啊,数组有了,怎么操作呢,怎么获取最大值和最小值呢?最大值和最小值放哪里呢,这不就需要又来两个变量,把他们存起来,之后循环遍历数组,逐一比较,发现比最大值大的,把值赋给最大值,发现比最小值小的,赋给最小值,这样不就是获取了最大值和最小值了,最后打印输出最大值和最小值不就解决问题了。代码如下:

public static void main(String[] args){
//        定义数组
        int [] arr = {190,230,33,290,789,765,498,210};
//        定义最大值
        int max = arr[0];
//        定义最小值
        int min = arr[0];
//        循环查找最大值和最小值,并记录索引
        for(int i=1;i< arr.length;i++){
            if(max<arr[i]){
                max = arr[i];
            }
            if(min>arr[i]){
                min = arr[i];
            }
        }
        System.out.println("最大值是:"+max+"\n最小值是:"+min);
}

2、键盘录入5个整数,存储到数组中,并对数组求和

分析:看到键盘录入,我就想到以前说过的,java键盘;录入三部曲,导包,创建对象,提示输入获取数据,接下来再看输入五次,这不是一样的操作吗,循环,必须循环,再看存储到数组里面,这不就刚刚好吗。

public static void main(String[] args){
    //1、创建数组对象
    int[] arr = new int[5];
    //2、创建键盘输入对象
    Scanner sc = new Scanner(System.in);
    //3、创建一个sum存放求和结果
    int sum = 0;
    //4、循环输入,求和,存入数组
    for (int i = 0; i < arr.length; i++) {
        //提示输入
        System.out.println("请输入第" + (i + 1) + "个数");
        arr[i] = sc.nextInt();
        sum += arr[i];
    }
    //5、打印出结果
    System.out.println("结果为" + sum);
}