是一种容器,可以同时存放多个数据值
在内存当中创建一个数组,并且向其中赋予一些默认值
两种常见的初始化方式:
动态初始化(指定长度):在创建数组的时候,直接指定数组当中的元素个数
静态初始化(指定内容):在创建数组的时候,不直接指定数组个数多少,而是直接将具体的数据内容进行指定
1 动态初始化方式:
数据类型[] 数组名称 = new 数据类型[数组长度];
解析含义:
左侧数据类型,也就是数组当中保存的数据全都是统一的什么类型
左侧的中括号,代表我是一个数组
左侧的数组名称,给数组以一个名字
右侧的new,代表创建数组的动作
右侧数据类型,必须和左边数据类型保持一致
右侧中括号的长度,也就是数组当中,到底可以保存多少的数据,是一个int数字
package Demo04;
public class Demo03 {
public static void main(String[] args) {
//创建一个数组,里面可以存放300个数据
//格式:数据类型[] 数组名称 = new 数据类型[数组长度];
int[] arrayA = new int[300];
//创建一个数组,能存放10个double类型
double[] arrayB = new double[10];
//创建一个数组,能存放5个字符串
String[] arrayC = new String[5];
}
}
2 静态初始化方式:
1.标准格式:数据类型[] 数组名称 = new 数据类型[]{ 元素1,元素2,…};
package Demo04;
public class Demo04 {
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"};
}
}
2.省略格式:数据类型[] 数组名称 = { 元素1,元素2,…};
注意事项:
使用建议:
如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体内容,用静态初始化
package Demo04;
public class Demo05 {
public static void main(String[] args) {
//省略格式的静态初始化
int[] arrayA = {10,20,30};
//静态初始化标准格式可以拆分成两个步骤。
int[] arrayB;
arrayB = new int[]{11,21,31};
//动态初始化也可以拆分成两个步骤
int[] arrayC;
arrayC = new int[5];
//静态初始化一旦使用省略格式,就不能拆分成为两个步骤了
// int[] arrayD;
// arrayD = {10,20,30};
}
}
package Demo04;
/*
二进制:01
十进制:0123456789
十六进制:0123456789abcdef
*/
public class Demo06 {
public static void main(String[] args) {
//静态初始化的省略格式
int [] array = {10,20,30};
System.out.println(array); //[I@4554617c
//直接打印数组当中的元素
System.out.println(array[0]); //10
System.out.println(array[1]); //20
//也可以将数组中的某一个单个元素,赋值交给变量
int num = array[1];
System.out.println(num); //20
}
}
package Demo04;
public class Demo07 {
public static void main(String[] args) {
//动态初始化一个数组
int[] array = new int[3];
System.out.println(array); //内存地址值
System.out.println(array[0]); //0
System.out.println(array[1]); //0
//将数据123赋值交给数组array当中的一号元素
array[1] = 123;
System.out.println(array[0]); //0
System.out.println(array[1]); //123
}
}
栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中
局部变量:方法的参数,或者是方法{}内部的变量
作用域:一旦超出作用域,立即从栈内存中消失
堆(Heap):凡是new出来的东西,都在堆当中。
堆内存里面的东西都有一个地址值:16进制
堆内存里面存放的数据,都有默认值。规则:
整数--------默认值为0
浮点数-----默认值为0.0
字符--------默认值‘\u0000’
布尔--------默认值false
引用类型–默认值null
方法区(Method Area):储存.class相关信息,包含方法的信息
本地方法栈:与操作系统相关
寄存器:与CPU相关
如果访问数组元素的时候,索引编号并不存在,那么将会发生数组索引越界异常ArrayIndexOutOfBoundsException
原因:索引编号写错了
解决方法:修改成为存在的正确的索引编号
public class Demo06 {
public static void main(String[] args) {
int [] array = {10,20,30};
System.out.println(array); //[I@4554617c
System.out.println(array[0]); //10
System.out.println(array[1]); //20
//错误写法
//并不存在3号元素,所以发生异常
System.out.println(array[3]);
数组必须进行new初始化,才能使用其中的元素,如果只是赋值了一个null,没有进行new创建,那么将会发生,空指针异常
NullPointerException
原因:忘了new
解决:补上new
package Demo04;
/*
所有的引用变量,都可以赋值为一个null值。但是代表其中什么也没有
*/
public class Demo08 {
public static void main(String[] args) {
int[] array = null;
//下面这句没有的话会发生空指针异常
// array = new int[3];
System.out.println(array[0]);
}
}
数组名称.length
这将会得到一个int数字,代表数组的长度
**注意:**数组一旦创建,程序运行期间,长度不可改变
package Demo04;
public class Demo09 {
public static void main(String[] args) {
int[] arrayA = new int[3];
int[] arrayB = new int[]{1,2,3,45,889,55,85,66,22,48,8,15,45,9};
int len = arrayB.length;
System.out.println("arrayB的数组长度是" + len);
int[] arrcyC = new int[3];
System.out.println(arrcyC.length); //3
arrcyC = new int[5];
System.out.println(arrcyC.length); //5
//其实这是两个数组了,虽然名字是一样的,但是有两个new,就是两个数组了,所以长度变了
}
}
遍历数组:就是对数组当中的每一元素进行逐一,挨个儿处理。默认的处理方式就是打印输出
package Demo04;
public class Demo10 {
public static void main(String[] args) {
int[] array = {15,20,25,30,34};
//首先使用原始方式
System.out.println(array[0]); //15
System.out.println(array[1]); //20 以下省略
//使用循环,循环次数其实就是数组的长度
//缺点:数组一旦后来又多了或者少了,它不能跟着动态改变,得改代码才行
for (int i = 0;i < 5;i++){
System.out.println(array[i]);
}
int len = array.length; //长度
for (int a = 0;a < len;a++){
//这里也可以不用赋值,直接a < array.length
System.out.println(array[a]);
}
}
}
package Demo04;
public class Demo10 {
public static void main(String[] args) {
int[] array = {15,20,25,30,34};
//首先使用原始方式
System.out.println(array[0]); //15
System.out.println(array[1]); //20 以下省略
//使用循环,循环次数其实就是数组的长度
//缺点:数组一旦后来又多了或者少了,它不能跟着动态改变,得改代码才行
for (int i = 0;i < 5;i++){
System.out.println(array[i]);
}
int len = array.length; //长度
for (int a = 0;a < len;a++){
//这里也可以不用赋值,直接a < array.length
System.out.println(array[a]);
}
}
}
数组元素反转
本来的样子:{1,2,3,4}
反转之后的样子:{4,3,2,1}
要求不可以使用新数组,必须是把原来的反转过来了
package Demo04;
public class Demo12 {
public static void main(String[] args) {
int[] array = {10,20,30,40,50};
//遍历打印数组本来的样子
for (int i = 0;i < array.length;i++){
System.out.println(array[i]);
}
/*
初始化语句:int min = 0,max = array.length - 1
条件判断:min < max
步进表达式:min++ max--
循环体:用第三个变量倒手
*/
for (int min = 0,max = array.length - 1;min < max;min++,max--){
int temp = array[min];
array[min] = array[max];
array[max] = temp;
}
//再次打印遍历输出数组后来的样子
for (int i = 0;i < array.length;i++){
System.out.println(array[i]);
}
}
}
数组可以作为方法的参数,当调用方法的时候,向方法的小括号进项传参,传递进去的其实是数组的地址值
愚昧方法
package Demo04;
public class Demo13 {
public static void main(String[] args) {
int[] array = {10,20,30,40,50};
for (int i = 0;i < array.length;i++){
System.out.println(array[i]);
}
System.out.println("========aaa==========");
for (int i = 0;i < array.length;i++){
System.out.println(array[i]);
}
System.out.println("======bbb=========");
for (int i = 0;i < array.length;i++){
System.out.println(array[i]);
}
}
好方法
package Demo04;
public class Demo13 {
public static void main(String[] args) {
int[] array = {10,20,30,40,50};
System.out.println(array); //地址值
pringArray(array); //传递进去的就是array的地址值
System.out.println("========aaa==========");
pringArray(array);
System.out.println("======bbb=========");
pringArray(array);
}
/*
三要素
返回值类型:只是进行打印而已,不需要进行计算,也没有结果,用void
方法名称:printArray
参数列表:必须给我数组,我才能打印其中的元素,int[] array
*/
public static void pringArray(int[] array){
for (int i = 0;i < array.length;i++){
System.out.println(array[i]);
}
}
}