java数组相关方法的学习
2015-05-14 12:41
330 查看
java的数组有几种创建方法
1. 第一种是int[]is=new int[3];此时数组已经创建完毕了,数组的长度为3,下标从0开始,2结束。默认所有元素都为0,如果类型是object的话默认元素都为null。这个和对象的创建是一样的,初始化后的对象如果不被赋值他就默认为null,也就是没有指向堆中的任何一个元素,然而null到底是什么呢?这个问题我们以后再说。
2.第二种,int[]is=new int[]{1,2,3,4};即不定义数组的初始长度,直接把元素放到数组里。长度为4,下标从0开始,3结束。我试了下如果在最后一个元素后加上,但不追加新元素,像这样{1,2,3,4,},是不会报编译错误的,不知道为什么。而且这样写的话和数组不会受到任何影响,和不加,一样。
3.第三种,int[]is={1,2,3,4,5};和第二种相比少写了new int[]
以上三种就是java中数组的初始化,java数组变量本身只是一个应用,存在于栈中,指向堆中的数组对象本身。也就是说三个例子右边的那些数据,1,2,3是存在堆中的。
我记得以前老师说过这三种初始化时内存中的变化也会有区别,具体不记得了,回家翻翻笔记去
数组内元素的类型必须一样,元素的取值方法为int num=is[index],以数组名[下标]的形式。如果下标的值大于等于数组的length或者小于0,程序就会报ArrayIndexOutOfBoundsException()数组下标越界异常。
还有就是数组的内容可以随时变化,但是长度不可变,要变化长度只有新建数组再把老数组的内容拷贝过去。
接下来说说jdk提供的数组工具:
一个是System.arraycopy(src, srcPos, dest, destPos, length);arraycopy方法,顾名思义arraycopy就是数组拷贝。它是由native修饰的,就是说它的方法体是用c语言实现的。再来说说这个方法的参数,其实从参数名已经能看出参数的意思,src:源数组引用名,srcPos:想要从源数组的哪里开始拷贝,下标值,dest:目标数组引用名, destPos:拷贝的数组元素从目标数组的哪个下标开始黏贴,length就是拷贝过来的数组长度。
要注意拷贝的时候,目标数组的长度是不变的,如果拷过去的元素长度大于目标数组长度则会报数组下标越界异常。而且拷贝过去的元素会覆盖目标数组原有的元素。
再说一个Arrays.copyOf(original,length),这个也是数组拷贝,但是是有返回值的,也就是说可以用一个新的变量去接收拷贝以后的数组。original就是指原数组,length是指新数组的长度,也就是说可以在这个方法内定义新数组的长度!不用考虑什么下标越界异常。但length也不能为负数,因为下标从来没有负的。
由于ArrayList是由数组实现的,它的API里也用到了以上两个方法,所以对数组工具的熟悉有利于我们学习ArrayList的源代码!
1. 第一种是int[]is=new int[3];此时数组已经创建完毕了,数组的长度为3,下标从0开始,2结束。默认所有元素都为0,如果类型是object的话默认元素都为null。这个和对象的创建是一样的,初始化后的对象如果不被赋值他就默认为null,也就是没有指向堆中的任何一个元素,然而null到底是什么呢?这个问题我们以后再说。
2.第二种,int[]is=new int[]{1,2,3,4};即不定义数组的初始长度,直接把元素放到数组里。长度为4,下标从0开始,3结束。我试了下如果在最后一个元素后加上,但不追加新元素,像这样{1,2,3,4,},是不会报编译错误的,不知道为什么。而且这样写的话和数组不会受到任何影响,和不加,一样。
3.第三种,int[]is={1,2,3,4,5};和第二种相比少写了new int[]
以上三种就是java中数组的初始化,java数组变量本身只是一个应用,存在于栈中,指向堆中的数组对象本身。也就是说三个例子右边的那些数据,1,2,3是存在堆中的。
我记得以前老师说过这三种初始化时内存中的变化也会有区别,具体不记得了,回家翻翻笔记去
数组内元素的类型必须一样,元素的取值方法为int num=is[index],以数组名[下标]的形式。如果下标的值大于等于数组的length或者小于0,程序就会报ArrayIndexOutOfBoundsException()数组下标越界异常。
还有就是数组的内容可以随时变化,但是长度不可变,要变化长度只有新建数组再把老数组的内容拷贝过去。
接下来说说jdk提供的数组工具:
一个是System.arraycopy(src, srcPos, dest, destPos, length);arraycopy方法,顾名思义arraycopy就是数组拷贝。它是由native修饰的,就是说它的方法体是用c语言实现的。再来说说这个方法的参数,其实从参数名已经能看出参数的意思,src:源数组引用名,srcPos:想要从源数组的哪里开始拷贝,下标值,dest:目标数组引用名, destPos:拷贝的数组元素从目标数组的哪个下标开始黏贴,length就是拷贝过来的数组长度。
要注意拷贝的时候,目标数组的长度是不变的,如果拷过去的元素长度大于目标数组长度则会报数组下标越界异常。而且拷贝过去的元素会覆盖目标数组原有的元素。
再说一个Arrays.copyOf(original,length),这个也是数组拷贝,但是是有返回值的,也就是说可以用一个新的变量去接收拷贝以后的数组。original就是指原数组,length是指新数组的长度,也就是说可以在这个方法内定义新数组的长度!不用考虑什么下标越界异常。但length也不能为负数,因为下标从来没有负的。
由于ArrayList是由数组实现的,它的API里也用到了以上两个方法,所以对数组工具的熟悉有利于我们学习ArrayList的源代码!
相关文章推荐
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- Java学习,数组的相关操作,封装类,Class类,反射API
- JNI学习笔记5——本地方法处理java数组/引用问题/缓存jfieldID/jmethodID
- 18天Java学习---5.Java数组和方法
- jQuery 1.6 源码学习(六)——core.js[6]之jQuery对象/数组操作相关方法
- JNI学习笔记:(1)开篇(2)本地代码访问Java代码 (3)本地方法取得Java属性/调用java方法 (4)本地代码创建Java对象(包括javaString) (5) 本地方法处理java数组
- Java学习从入门到精通---学习java相关技术的方法及步骤
- Java学习笔记---5.Java数组和方法
- 黑马程序员_Java学习日记1_关于数组的相关应用
- 【Java学习笔记】数组的相关事项
- Java学习笔记003——继承、抽象类、类相等测试、泛型数组列表、可变参数方法
- Java学习之数组1(1.数组的声明;2.元素为引用数据类型的数组;3.关于main方法里的String[] args;4.数组排序;5.数3退1 数组算法,(用数组模拟链表);6数组查找之二分法;7数组的拷贝)
- Java学习 产生一个随机数组的两种方法
- Java学习笔记之 数组方法
- [Java学习笔记] 为什么.length是数组的成员,是字符串的方法?
- java复习一:与数组相关的API方法及应用实例
- java学习小记 数组及其方法 结构体
- java学习小记 高精度的相关方法
- Java基本功练习五(一维数组相关操作[声明、创建、乱序、排序、查找]和方法的重载举例[浅议])
- [学习笔记]Java数组和方法