Java入门(十五)

数组

  • String args[] 就是定义了一个String类型的数组。数组的升级就是多维数组的使用,有一维、二维、三维等。Arrays类是直接操纵数组的类,直接学了scanner类,就是接收键盘输入的类。以后还会学习非常多的类,java学习实际上就是学习一个又一个的类。最后是讲稀疏数组,可以进行压缩和保存,大大减少空间量。
  • 什么是数组?可以理解为一组数。意思是就是我们定义了一个数组,里面存放了很多数字,数组可以看成相同类型数据的有序集合。比如{1,2,3,4},还可以通过下标取出里面的数字。
  • 比如一个足球队里面通常会有几十个人,通常我们认识他们的时候会通过看他是几号球员来辨识他。这时候就可以把球队想象成一个数组,球员为一个一个的个体。Team[2] 取出队伍里的二号队员
  • 使用数组可以避免重复定义变量。
  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。你怎么放的顺序就怎么来的。
  • 每一个数据称作一个数组的元素,每个数组元素可以通过一个下标来访问他们。

数组声明创建

  • 任何东西的使用都必须要声明
  • 首选必须声明数组变量,才能在程序中使用数组,下面是声明数组变量的语法
dataType[] arrayRefVar;   //首选的方法
或
dataType  arrayRefVar[];
  • 上面两种方式创建数组,一种是在类型后面加中括号,一种是在变量名后加中括号。 下面创建的我们把他想象成是数组类型,声明数组的两种方法
// 变量的类型  变量的名字  = 变量的值;
        int [] nums ; //定义
        int nums2 []; //定义2
  • java建议在类型后面加数组,而下面的是c、c++风格的,平时用上面的就行了。
  • Java使用 new 操作符来创建数组
dataType[] arrayRefVar = new dataType[arraySize];
  • 我们这样就定义好了一个数组了,就可以去用了,相当于这里面可以存放10个int类型的数字,如果没有数组,我们要定义 a1 ,a2…十个数字去存储。
int [] nums ; //定义
        nums = new int[10];
  • 一个内存空间中,定义了 int x = 1 ,空间里x=1 ,空间的名字叫做x。空间里面由于是一个基本类型int,我们只能放一个数字。
  • 要定义10个的话,就要重复10遍
  • 但是数组就可以这样 int nums 等于 new了10个空间大小的int。空间的名字可以把他想象成在内存里面,给他分配了一个空间叫做nums。nums完之后要给他开辟10个空间,里面所有的数据类型都是int
  • 比方说我在里面给他放了 1 2 3 4 5 … ,nums里面有很多小的空间,这些小的空间也会有自己的编号。比如 [0] [1] [2] [3] [4]
  • 一组数都只有一个名字,所以他里面的类型都必须相同。
  • 数组里面有属性length,就是可以获取他的长度。有了长度我们就可以遍历。
  • int[] nums 只是声明了数组,并没有给他分配空间。nums=new int[10];才是真正的给他分配了空间,让他可以放10个int类型的数字。然后给数组中的元素赋值
// 变量的类型  变量的名字  = 变量的值;
        int [] nums ; //声明了数组
        nums = new int[10];  //这里面可以放10个int类型的数字
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        nums[3] = 4;
        nums[4] = 5;
        nums[5] = 6;
        nums[6] = 7;
        nums[7] = 8;
        nums[8] = 9;
        nums[9] = 10;
  • 如果没有赋值的元素,默认是int为0,String为null等。
  • 赋值后取值,通过下标去取
System.out.println(nums[0]);

args什么意思 输出java中string java args是什么意思_初始化

  • 来计算所有元素的和
int sum = 0;
        for(int i = 0;i<nums.length;i++){
            sum = sum + nums[i];
        } 
        System.out.println("总和为:"+sum);

args什么意思 输出java中string java args是什么意思_初始化_02

内存分析

  • java的内存里有堆、栈、方法区。堆里面存放new出来的对象和数组,这正存放的变量类型是存放在栈里面。
  1. 声明数组,int[] array = null; 默认不给他赋值,那就是null。栈是一条长的,可以往里面放东西,另一个是堆
  • 在堆中没有东西,没有new出来东西,他只是基本类型或者引用类型的变量。这时候堆是空的,而栈会压入一个东西叫做array。我们只是声明了一个数组,数组是空的,并没有什么实际的作用。
  1. 创建数组 array = new int[10] ,这时候产生了一个new的事件,new这种关键字都会放在堆里面。他往堆里面开辟了一个空间,这个空间就是array的名字,这个空间被分为了10个小份。
  • 内存占了10个格子,而且都是int类型的,相当于有10个空间,只能放一个类型。对象就是在这个地方的。创建完对象之后要往里面存值了。
  • 每一步内存对应的样子:声明的时候数组并不存在,当我们真正通过new创建的时候这个数组才产生。给里面赋值的时候才有值,没有赋值的时候他就是个默认元素。比如里面只有10个元素,我要获取第11个元素会怎么样呢?
System.out.println(nums[10]);
  • 这个 nums[10]在空间里面不存在,会报这个错,数组索引下标越界。他可能在数组外卖,但反正就是拿不到这个值,所以会报这个异常。
  • args什么意思 输出java中string java args是什么意思_java_03


数组有三种初始化

  • 静态初始化、动态初始化、默认初始化。我们刚才使用的都是动态初始化。
  • 刚才使用new定义初始化,也可以直接写死 ,在花括号里面定义,一旦写死了就没办法改变了。静态初始化:创建+赋值
int[] a = {1,2,3,4,5,6,7,8};
  • 我们来定义一个Man的类
  • args什么意思 输出java中string java args是什么意思_数组_04


  • 回来刚才静态初始化操作的那个类,这数组里面的都是引用类型的。
Man[] mans = {new Man(), new Man()};
  • 动态初始化,首先开辟空间,开辟之后里面所有的值默认都是0,我们要手动地去赋值
int[] b = new int[10];
		b[0] = 10;
  • 动态初始化里面包含了默认初始化,数组也是引用类型,他的元素相当于类的实例变量,因此数组一旦数组分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
  • args什么意思 输出java中string java args是什么意思_初始化_05


数组的四个基本特点

  • 长度是确定的,数组一旦被创建,他的大小就是不可以改变的。写死的,如果扩容,就需要创建一个新的数组,这是比较麻烦的。
  • 其元素必须是相同类型的,不允许出现混合类型。
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
  • 数组的变量属于引用类型(引用的话需要把他点出来),数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量,数组本身就是对象。Java中对象是在堆中,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中。

数组边界

  • 下标的合法区间 [0,length-1],如果越界就会报错 ArrayIndexOutOfBoundsException:数组下标越界异常。
  • 数组是相同数据类型(数据类型可以为任意类型)的有序集合
  • 数组也是对象,数组元素相当于对象的成员 变量。
  • 数组长度是确定的,不可变的,如果越界就报上面那个错。