Java基础--------数组

(参考http://www.cnblogs.com/xdp-gacl/p/3623759.html 点击打开链接,以此为模板 自己做了整理、修改)

目录

一 . 数组的概念

二 . 数组的模型

三. 数组的声明和数组对象的创建

3.1 一维数组

3.1.1 一维数组的声明

3.1.2 一维数组对象的创建

3.2 二维数组

3.3 元素为引用数据类型的数组

四 . 数组对象的初始化

4.1 动态初始化

4.2 静态初始化

4.3 数组元素的默认初始化值

五 . 数组元素的引用

六. 数组的控制台信息打印

七. 组中两个常见问题

7.1  索引越界异常

7.2  空指针异常


一 . 数组的概念

数组,可以看成是多个相同类型数据的组合,对这些数据的统一管理。

数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。

数组的元素可以是任何数据类型,包括基本类型和引用类型。

C和C++中的数组都可以分配在栈上面,而Java中的数组是只能分配在堆上面的,因为Java中的数组是引用类型。

注意区分数组变量数组元素这两个概念:
数组变量:指的是将整个数组整体作为一个变量来看待。
数组元素:指的是同一类型的数据所组成的这个数组中的
某一个具体的数据,它也是一种变量。

二 . 数组的模型

一维数组:一维数组就是一行,一行小格。
二维数组:二维数组就是一行加一列组成的一个平面分成的小格,有行有列。
三维数组:三维数组就是一个立方体。

人类对最多认识到三维空间。

Java中的各个维度的数组,在内存中的分配如下图所示:

 

三. 数组的声明和数组对象的创建

3.1 一维数组

3.1.1 一维数组的声明

一维数组的声明方式有2种:

格式一:数组元素类型  数组名[ ];  即type var[ ];
格式二:数组元素类型[ ] 数组名 ;  即type[ ] var;

其中,格式二声明数组的方法与C#上声明一维数组的方法一样。

int a1[ ];   
int[ ] a2;  
double b[ ];  //数组元素为基本数据类型
person[ ] p1; //数组元素为引用数据类型  
String s1[ ];

注意:Java 语言中声明数组时不能指定其长度(数组中的元素个数)。如:int a[5]; 这样声明一维数组是非法的

3.1.2 一维数组对象的创建

Java 中使用关键字new 来创建数组对象。

格式为:数组名 = new 数组元素的类型[数组元素的个数]

 

3.2 二维数组

3.3 元素为引用数据类型的数组

class Date{
      int year; int moth; int day;
      Date(int y; int m, int d){
       year=y ;
    month=m ;
    day=d ;
  }
}

四 . 数组对象的初始化

4.1 动态初始化

记忆:“动分,东风”。数组定义与为数组元素分配空间和赋值的操作分开进行。

 public class Test{
     public static void main(String args[ ]){
     int a[ ];  //定义数组,即声明一个int类型的数组a[ ]
     a=new int[3];  //给数组元素分配内存空间。
     a[0]=3; a[1]=9; a[2]=8;  //给数组元素赋值。
     Date days[ ];
     days=new Date[3]; //引用数据类型
     days[0]=new Date(1, 4, 2004);
     days[1]=new Date(2, 4, 2004);
     days[2]=new Date(3, 4, 2004);
     } 
 }
 
 class Date{
     int year, month, day;
     Date(int y, int m, int d){
         year = y ;
         month = m ;
         day = d ;
     }
 }
                

4.2 静态初始化

在定义数组的同时就为数组元素分配空间并赋值。

puclic class Test{
        public static void main(String args[ ]){
            int a[ ] = { 3, 9, 8};   //在定义数组的同时给数组分配空间并赋值。
            Date days[ ] = {
                new Date(1, 4, 2004),
                new Date(2 ,4 ,2004),
                new Date(3 ,4, 2004)
        };
    }
}
class Date{
    int year, month, day;
    Date(int y, int m, int d){
        year = y ;
        month = m ;
        day = d ;
    }
}

4.3 数组元素的默认初始化值

数组元素相当于对象的成员变量(类的属性),默认值跟成员变量的规则一样。数字0,布尔false,char\u0000,引用:null。

 public class Test{
         public static void main(String args[ ]){
             int a[ ] = new int[5];
             Date[ ] days=new Date[3];
             System.out.println(a[3]);
             System.out.println(days[2]);
     }
 }
 class Date{
     int year, month, day;
     Date(int y, int m, int d){
         year = y ;
         month = m ;
         day = d ;
     }
 }

五 . 数组元素的引用

定义并用运算符new为之分配内存空间后,才可以引用数组中的每个元素,数组元素的引用方式为:arrayName[index], index为数组元素下标,可以是整型常量或整型表达式。如:a[3], b[i], c[6*i]。
数组元素下标从0开始,长度为n的数组的合法下标取值范围为0 ~ n—1。
每个数组都有一个属性length指明它的长度,例如:a.length的值为数组a的长度(元素个数)。不同于String中的 .length()方法。

@[TOC]

六. 数组的控制台信息打印

for each的语法:
for(元素类型 元素名称 : 遍历数组(集合)(或者能进行迭代的)){
}

package com.atguigu.spring.controller;

import java.util.Arrays;

public class arrPrint {
    public static void main(String args[]) {
        int a[] = {1, 2, 3};
        //1.使用Arrays.toString() 方法打印出数组元素
        System.out.println("使用Arrays.toString() 方法打印出数组元素:" + Arrays.toString(a));
        //2.以普通for循环的方式遍历数组
        for (int i = 0; i < a.length; i++) {
            System.out.println(i);
            System.out.println("以普通for循环的方式遍历数组" + a[i]);
        }
        //3.以增强for循环的方式遍历数组
        for (int n : a) {
            System.out.println(" 以增强for循环的方式遍历" + n);
        }
    }
}

七. 组中两个常见问题

7.1  索引越界异常

ArrayIndexOutOfBoundsException:当访问了数组中不存在的索引,就会引发索引越界异常。

public class ArrayIndexOutOfBoundsExceptionDemo {
    public static void main(String[] args) {
        //数组越界
        int[] arr = new int[10];
        System.out.println(arr[10]);//报错
    }
}

7.2  空指针异常

NullPointerException:当引用数据类型的变量被赋值为 null 之后,就代表跟堆内存的连接被切断了,如果这时候还想去访问堆内存的数据,就会出现空指针异常。

public class NullPointerExceptionDemo {
    public static void main(String[] args) {
    	//空指针异常
        int[] arr = {11,22,33};
        arr = null;
        System.out.println(arr[0]);//报错
    }
}

------------------------------------------------------------------ 我是低调的分隔线  ----------------------------------------------------------------------

                                                                                                                                     吾欲之南海,一瓶一钵足矣...

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值