JAVA笔记----第五章(V) 连续存储---数组

一维数组

1、一维数组的创建

第一步:声明数组

1)声明数组含义: 告诉计算机数组类型是什么。
2)语法格式:

方法一:数据类型[ ] 数组名;
方法二: 数据类型 数组名[ ] ;

例:

1:  float[] score;  //声明存放成绩的数组2:  String[] fruits;  //声明一个存放水果名称的数组

3)要点注意:

在Java语言中声明数组时不能指明数组的长度,即数组中元素的个数。(声明数组只是得到了一个存放数组的变量,但并没有真正为数组元素分配内存空间,因此此时还不能使用数组。)

例:

float score[5];  //非法,编译没法通过!

第二步:分配空间

需要引入关键字new才能将数组真正的创建出来
1)分配空间含义: 告诉计算机需要分配几个格子。
2) 语法格式:

数组名 = new 数据类型[数组长度];

例:

1: score = new float[5];2: fruit = new Stirng[10];

总结:声明数组与分配空间的合并定义

语法格式:

数据类型[ ] 数组名 = new 数据类型[数组长度] ;

例:
float[] score = new float[5];

2、一维数组的内存分析

1)实例讲解

以在数组中存放五个整数为例讲解:
1. 声明完 int[ ] num;之后内存空间情况:
在这里插入图片描述

注意:
Java虚拟机会为num在栈内存中开辟一块存储空间,栈内存中开辟出来的这一块空间(如上图)是存放num这个变量的值的。声明数组只是在栈内存中开辟出一块存储空间,一块空间里面只能存放一个值,肯定存放不下5个整数,只有真正创建数组才能存储5个整数的连续存储空间。

2. 声明 num = new int[5];之后会开辟出一块连续的存储空间,内存存储情况如下:

注意:new声明出来的东西都是存放在堆内存中的!!!
在这里插入图片描述

2)问题解惑

Question: num里面究竟存了什么使我们能够通过它可以访问到堆内存中开辟的连续空间的内容?

public class ArrayPrintDemo{
    
    
     public static void main(String[] args){
    
    
           int[] num;  //声明数组num
           num = new int[5]; //创建数组
           System.out.println("num="+num);
     }
}

运行结果如下:
[1@c17164  //这是JVM给堆内存的中那片连续的存储空间分配的首地址。

Answer : 因为存了首地址,所以可以通过数组名找到堆内存中开辟的空间的的首地址,我们知道数组的空间是连续的,这样就可以依次找到数组用的元素了。

3、一维数组的遍历

1)在Java中访问数组的语法格式为:

数组名[下标值] ;

2)举例:

public class ArrayPrintDemo{
    
    
     public static void main(String[] args){
    
    
         int[] num;
         num = new int[5];
         for(int i=0;i<5;i++){
    
    
            System.out.println(i+"\t"+num[i]);
          }
     }
}

运行结果:
0    0
1    0
2    0
3    0
4    0

输出结果发现,数组中每个元素都是有初始值的,这个值被称作默认值默认值是和声明数值时所指定的数据类型是有关的:如果是基本数据类型,如int其默认值为0,float默认值为0.0,Boolean类型的默认值为false,如果是引用数据类型,其默认值为null。

4、一维数组的赋值

创建完数组之后的每个数组中的元素都是有默认值的,下面讲解如何给数组中的每个元素赋值:
推荐使用法2和法3!!!

1//此方法比较麻烦,不建议使用
num[0]=10;
num[1]=20;
num[2]=30;
......2//遍声明边赋值
语法格式:数据类型[] 数组名{
    
    1,值2,值3......,值n};
例:int[] num={
    
    10,20,30,40,50,60};3//动态地从键盘录入信息并赋值
注意:需要先创建一个Scanner对象!
例:
Scanner input = new Scanner(String.in);
for(int i=0;i<6;i++){
    
    
   num[i]=input.nextaInt();
 }

* 注意:直接创建并赋值的方法必须一并完成!

//正确的写法:
int[] num = {
    
    10,20,30,40,50,60};

//错误的写法:
int[] num;  //此代码不合法,可以一并完成,但不能分开写!
num = {
    
    10,20,30,40,50,60};

二维数组

1、二维数组的创建

第一步:声明数组

1)语法格式:

法1: 数组类型[ ][ ] 数组名 ;
法2: 数据类型 数组名[ ][ ] ;

例:
int[][] score;
int score[][];

第二步: 创建数组

还是需要引入关键字new创建!
语法格式:

数组名 = new 数据类型[高维长度][低维长度];

例:
score = new int[3][4];  //声明一个三行四列的二维数组

总结:声明数组与分配空间的合并定义

语法格式:

数组名 = new 数据类型[高维长度][低维长度] ;

2、二维数组的赋值

语法格式:

int [ ][ ] num={ {1,2},{3,4,5,6},{7,8,9} };

3、二维数组的遍历

int [ ][ ] num={ {1,2},{3,4,5,6},{7,8,9} };为例:

注意:
1. 二维数组可以看成是一维数组组成的,num[0]是一个一维数组,元素为{1,2} ,即num[0][0]为1,num[0][1]为2 。
2. 利用num [0].length能够获取数组第一行元素的个数

举例:

public class ArrayPrintDemo{
    
    
    public static void main(String[] args){
    
    
         int[][] num={
    
     {
    
    1,2},{
    
    3,4,5,6},{
    
    7,8,9} };
         for(int i=0;i<num.length;i++){
    
    
              for(int j=0;j<num[i].length;j++)
                   System.out.print(num[i][j]+" ");
              System.out.println();
          }
     }
}

运行结果:
1 2  
3 4 5 6 
7 8 9

.

猜你喜欢

转载自blog.csdn.net/qq_46340895/article/details/104795188
今日推荐