目录
一、一维数组概念;
1、数组是一种引用数据类型,不是基本数据类型,数组的父类是Object。
2、数组中可以存储“基本数据类型的数据;“也可以存储“引用数据类型“的数据;
3、因为数组是引用类型,所以数组对象在“堆”内存当中;
4、若数组中存储的是“对象”,实际存储的是对象的内存地址;
5、数组创建后,数组长度就无法改变;
6、所有数组的“整个数组的内存地址“就是第一个元素的内存地址;
7、所有数组都有length属性,用来计算数组长度;
8、数组中每一个元素都有下标,第一个为0,第二个为1,最后一个为:length-1;
9、数组中元素类型要统一,int类型的数组里只能存储int类型元素;
10、一个数组在内存中的存储,内存地址是连续的;
二、数组结构的优点和缺点;
优点:查询某个下标上的元素时效率极高;(因为内存存储是连续的,并且数据类型一样,所占空间大小也一样,所以知道第一个元素的内存地址,就可以计算出任何一个下标上的元素)
缺点:1、增删元素效率低;(因为数组是连续的,增加或者删除,会涉及到后面的元素统一向前或向后移动)
2、数组没有办法存储大量数据;(因为存储是连续的,数据量大,内存很难找到这么大的内存空间)
三、定义一个一维数组;
语法格式:
int[] arr;
double[] arr1;
String[] arr2;
Object[] arr3;
boolean[] arr4;
四、初始化一个一维数组;
两种方式:
//静态初始化
int[] arr={1,2,3,4,5};
//动态初始化
int[] arr1=new int[5];//里面元素默认值为0;
String[] arr2=new String[10];//里面元素默认值为null;
五、下标越界异常;
//静态初始化
int[] arr={1,2,3,4,5};//5个元素最后一个元素下标为4
System.out.println( arr[5]);
//ArrayIndexOutOfBoundsException(报出下标越界异常)
六、在方法中传递数组;
示例:
public class Text {
public static void main(String[] args) {
//定义一个数组
int[] arr={1,2,3,4,5,6};
Text.printArr(arr);//给静态方法传递
//创建Text对象
Text t=new Text();
t.printArry(arr);//用引用调用实例方法传递数组
}
//定义一个静态方法,参数传递数组
public static void printArr(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
//定义一个实例方法
public void printArry(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
七、一维数组中存储引用类型;
示例代码:
public class Text {
public static void main(String[] args) {
//定义一个类型为A的数组你,里面只能存储A类型的对象
A[] a={new A(),new B(),new C()};//因为B、C都是继承A,所以也可以存储进去
//也可以这样,先创建对象
A n1=new A();
A n2=new B();
A n3=new C();
//在创建A类型的数组;
A[] arry={n1,n2,n3};
}
}
//类A
class A{
}
//类B继承A
class B extends A{
}
//类C继承A
class C extends A{
}
八、main方法中的“String[] args”数组;
1、main方法中的数组只有JVM来调用,调用的时候会自动传递一个数组;
2、默认传递的数组长度为0;(也就是一个空数组)
3、这个数组是让用户输入的,例如在控制台运行class文件的时候:(其中abc,def,efg就是用户输入的)
4、也可以在IDEA软件里输入;
输入位置:RUN------>Edit configuratins......-------->program arguments 中输入args的值
例如:进入系统需要输入用户名和密码;输入错误或者不输入就进不去系统(例如账户是“zhangsan”,密码是“123”);
public class Text {
public static void main(String[] args) {
//用户名和密码是两个字符串,如果不是两个就进不去系统
if(args.length!=2){
System.out.println("输入有误!");
return;
}
String u=args[0];
String p=args[1];
//例如用户名为张三,密码为123,此处字符串在equal前是为了避免空指针异常
if ("zhangsan".equals(u)&&"123".equals(p)){
System.out.println("欢迎使用此系统");
}else{
System.out.println("账号或密码错误!");
}
}
}
在IDEA中输入
因为密码为456,所以进入不了系统
如果输入正确:
则会进入系统
九、数组扩容;
因为数组一旦创建就不可以改变长度,所以扩容就只能创建一个大容量的数组,然后将小容量的数组拷贝到大数组中;
使用System中的arraycopy方法进行拷贝:
System.arraycopy(原数组,原数组从哪个位置(下标)开始拷贝,目标数组,拷贝到目标数组哪个位置(下标),拷贝长度);
例如:
//原数组
int[] a={1,2,3,4,5,6};
//目标数组
int[] b=new int[20];
//从a数组下标为1的位置开始拷贝,到b数组下标为3的位置,拷贝长度为3
System.arraycopy(a,1,b,2,3);
b中数组输出:
欢迎小伙伴参考学习,人非圣贤,若有不足欢迎指正;