数组的创建和初始化
创建格式
T[] 数组名 = new T[N];
- T:表示数组中存放元素的类型
- T[ ]:表示数组的类型
- N:表示数组的长度
数组的初始化
数组的初始化主要分为动态初始化和静态初始化
- 动态初始化:在创建数组时,直接指定数组中元素的个数。
int[] array = new int[10]; - 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定。
int[] array = new int[1,2,3,4,5,];
初识JVM的内存分布
1.什么是JVM?
- Java 语言的运行环境
- JVM是运行在操作系统之上的,与硬件没有任何关系。
JVM的分类
- 类加载器子系统
- 运行时数据区【我们应该关心的核心】
- 执行引擎(一般都是JIT编译器和解释器共存)
null
-
null 在 Java 中表示 “空引用” , 也就是一个不指向对象的引用。
-
null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置。
引用
引用是个变量。引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。引用是个左值的统称,如:student s1 = new student(); student s2 = new student();
通过new可以向内存申请类型大小的空间,左边的引用指向内存中这片开辟的空间,所以通过引用可以拿到这个变量。引用可以理解为左值。(式子左边的变量名)。通过引用可以区分不同对象或不同变量,比如s1、s2都是同一个类的不同对象。也可以理解成给内存地址取了别名。
对象引用:指向存着对象的地址。
类:有一套行为和属性的组合,一套规范。比如人的定义。
对象是具体的一个类。比如张三的定义。
二维数组
二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.;同理, 还存在 “三维数组”, “四维数组” 等更复杂的数组, 只不过出现频率都很低
1.二维数组的创建和初始化
动态初始化
int[][] array1 = new int[2][3];
静态初始化
int[][] array2 = new int[][]{{1,2,3},{4,5,6}};
int[][] arrays = {{1,2,3},{4,5,6}};
操作数组的工具类Arrays
toString
功能:把一维层次的数组解析为一个字符串返回
//toString
//功能:把一维层次的数组解析为一个字符串返回
int[] arr={1,2,3,4,5,6};
int[][] ret={{6,6,6,},{7,7,7}};
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(ret[0]));
System.out.println(Arrays.toString(ret[1]));
deepToString
功能;把多维数组转换成字符串返回
//deepToString
//功能;把多维数组转换成字符串返回
int brr[][]={{1,1,1,},{2,2,2,}};
System.out.println(Arrays.deepToString(brr));
copyOf
功能;实现数组拷贝
//copyOf
//功能;实现数组拷贝
int[] array={1,2,3,4,5,10,11,12,13,99,98,87};
//将array拷贝到array2
int[] array2=Arrays.copyOf(array,array.length);
//扩容数组array3是arr的二倍,同时将数组array拷贝到array3
int[] array3=Arrays.copyOf(array,2*array.length);
System.out.println(Arrays.toString(array2));
System.out.println(Arrays.toString(array3));
copyOfRange
功能:主要用于对一个已有的数组进行截取复制(局部拷贝),复制出一个左闭右开区间的数组。
//copyOfRange
//功能:主要用于对一个已有的数组进行截取复制(局部拷贝),复制出一个左闭右开区间的数组。
int crr[] ={1,3,5,7,91};
int crr2[]=Arrays.copyOfRange(crr,2,5);
System.out.println(Arrays.toString(crr2));
arraycopy(拓展,不属于Arrays类)
功能:实现数组的局部拷贝
//arraycopy(拓展,不属于Arrays类)
//功能:实现数组的局部拷贝
int drr[]={1,2,3,4,56,78,90,12,36,77};
int drr2[]=new int[drr.length];
//局部的拷贝
System.arraycopy(drr,0,drr2,3,drr.length-3);
System.out.println(Arrays.toString(drr2));
clone(拓展,不属于Arrays类)
功能:实现对象的克隆,数组是对象,所以可以用作拷贝数组。
// clone(拓展,不属于Arrays类)
//功能:实现对象的克隆,数组是对象,所以可以用作拷贝数组。
int err[]={1,3,5,7,9,11,56,99};
int err2[]=err.clone();
System.out.println(Arrays.toString(err2));
equals
功能:比较俩个数组是否相等,相等返回true,不相等返回false
//equals
//功能:比较俩个数组是否相等,相等返回true,不相等返回false
int frr[]={1,2,3,4,5,6,77,88,99,11};
int frr2[]={1,2,3,4,5,6,77,88,99,11};
boolean fr=Arrays.equals(frr,frr2);
System.out.println(fr);
fill
功能:给数组中的元素填充为一个固定的值,可以完全填充也可以局部填充,局部填充时参数左必右开
// fill
//功能:给数组中的元素填充为一个固定的值,可以完全填充也可以局部填充,局部填充时参数左必右开
int grr[]={1,2,3,4,5,6,77,88,99,11};
int grr2[]={1,2,3,4,5,6,77,88,99,11};
Arrays.fill(grr2,6);
Arrays.fill(grr,2,5,0);
System.out.println(Arrays.toString(grr));
System.out.println(Arrays.toString(grr2));
binarySearch
功能:查找数组中元素(二分查找),找到返回下标,找不到返回一个负数
//binarySearch
//功能:查找数组中元素(二分查找),找到返回下标,找不到返回一个负数
int hrr[]={1,2,3,4,5,6,77,88,99,11};
Scanner scan=new Scanner(System.in);
int k=scan.nextInt();
int pos=Arrays.binarySearch(hrr,k);
System.out.println("下标为:>"+pos);
sort
功能:将数组中的元素进行排序,默认排成升序
//sort
//功能:将数组中的元素进行排序,默认排成升序
int irr[]={1,2,3,4,5,6,77,88,99,11};
Arrays.sort(irr);
System.out.println(Arrays.toString(irr));