数组
1.数组的概念:是一种容器,可以存放多个数据值
2.数组的特点:
1.数组是一种引用数据类型;
2.数组当中的多个数据,类型必须统一;
3.数组的长度在程序运行期间不可改变。
3.两种常见的初始化方式:
1.动态初始化(指定长度);
2.静态初始化(指定内容)。
4.动态初始化数组格式:
数据类型 [] 数组名称 = new 数据类型 [ 数组长度 ] ;
解析含义:
左侧数据类型,也就是数组当中保存的数据,全部都是统一的什么类型;
左侧的中括号[],代表是一个数组;
左侧数组名称,是数组的名字;
左侧的new,代表创建一个数组的动作;
右侧数据类型,必须和左边数据类型保持一致;
右侧中括号长度,代表数组中可以保存多少个数据;
//动态初始化 public class Demo01Array { public static void main(String[] args) { int[] arrayA = new int[300]; //动态初始化 //创建一个数组,能存放10个double类型 double[] arrayB = new double[10]; //创建一个数组,能存放5个字符串 String[] arrayC = new String[5]; } }
5.静态初始化数组格式:
数据类型 [] 数组名称 = new 数据类型 [] {元素1,元素2,...};
【注意事项】 虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出来长度。
public class Demo02Array { public static void main(String[] args) { //直接创建一个数组,里面装的全是int数字,具体为5,15,25 int[] arrayA = new int[] {5,15,25}; //创建一个数组,用来装字符串:“hello”、“World”、“JAVA” String[] arrayB = new String[]{"Hello","World","JAVA"}; } }
省略格式:
数据类型 [] 数组名称 = {元素1,元素2,...}
【注意事项】
1.静态初始化标椎格式可以拆分成2个步骤;
2.动态初始化也可以拆成2个步骤;
3.静态初始化一旦使用省略格式就不能拆成2个步骤。
【使用建议】
如果不确定数组当中的具体内容,用动态;确定了具体内容,则用静态。
6.访问数组元素进行获取
直接打印数组名称,得到的是数组对应的内存地址哈希值。

访问数组的格式:数组名称 [ 索引值 ]
索引值:就是一个int数字,代表数组当中的元素的编号
【注意】索引值从0开始,一直到“数组长度-1”为止
7.访问数组元素进行赋值
使用动态初始化数组时,其中的元素将会自动拥有一个默认值,规则如下:
如果是整数型,默认为0;
如果是浮点型,默认为0.0;
如果是字符型,默认为‘\u0000’;
如果是布尔型,默认为false;
如果是引用型,默认为null。
【注意】静态初始化其实也有默认值过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数值。
8.Java中的内存划分
分为5个部分:
1.栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中。
局部变量:方法的参数,或者是方法() 内部的变量;
作用域:一旦超出作用域,立刻从栈内存当中消失。
2.堆(Heap):凡是new出来的东西,都在堆中。 数组就是在堆内存当中。
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据,都有默认值,规则:
如果是整数型,默认为0;
如果是浮点型,默认为0.0;
如果是字符型,默认为‘\u0000’;
如果是布尔型,默认为false;
如果是引用型,默认为null。
3.方法区(Method Area):存储.class相关信息,包含方法的信息。
4.本地方法栈(Native Method Stack):与操作系统相关。
5.寄存器(pc Register):与CPU相关。
9.一个数组的内存图

10.两个数组的内存图

11.两个引用指向同一个数组的内存图
public static void main(String[] args) { int[] arrayA = new int[3]; //动态初始化 System.out.println(arrayA); System.out.println(arrayA[0]); System.out.println(arrayA[1]); System.out.println(arrayA[2]); arrayA[1] = 10; arrayA[2] = 20; System.out.println(arrayA); System.out.println(arrayA[0]); System.out.println(arrayA[1]); System.out.println(arrayA[2]); //将arrayA数组的地址值,赋值给arrayB数组 int[] arrayB = arrayA; System.out.println(arrayB); System.out.println(arrayB[0]); System.out.println(arrayB[1]); System.out.println(arrayB[2]); arrayB[1] = 100; arrayB[2] = 200; System.out.println(arrayB); System.out.println(arrayB[0]); System.out.println(arrayB[1]); System.out.println(arrayB[2]); }

12.数组越界异常
如果访问数组元素的时候,索引编号 并不存在,那么将会发生数组索引越界异常ArrayIndexOutOfBoundsException

13.空指针异常
所有的引用类型变量都可以赋值为一个null值,但是代表什么也没有。
必须进行new初始化,否则会发生空指针异常NullPointerException。解决办法就是补上new。
int[] array = null;
array = new int[3];
14.获取数组长度
数组名称.length;
数组一旦创建,程序运行期间,长度不可改变。
15.数组的遍历
public class Demo04Array { public static void main(String[] args) { int[] array = {15,25,35,45,50,4,3,2,1,9}; for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } }
16.求数组中的最大值
public static void main(String[] args) { int[] array= {5,12,23,43,13,46,76,8}; int max=array[0]; for (int i = 0; i < array.length; i++) { if(array[i]>max) max=array[i]; } System.out.println("最大值"+max); }
17.数组元素反转
public static void main(String[] args) { int[] array = {10,21,31,43,54,5,78}; int temp; for (int i = 0; i < array.length; i++) { System.out.print(" "+array[i]); } System.out.println(); for (int i = 0; i <array.length/2 ;i++) { temp=array[i]; array[i]=array[array.length-i-1]; array[array.length-i-1]=temp; } for (int i = 0; i <array.length ; i++) { System.out.print(" "+array[i]); } }
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号