文章目录
注意一:JVM简介
注意二:数组在内存中的布局
注意main方法栈帧的开辟
注意三:堆中的空间没有人引用了,就自动回收了
注意四:空指针异常
nullpointerexpeciation
注意五:数组传参,形参指向发生了改变不会影响实参,形参改变了指向的内容,实参才会改变
数组传参,形参指向发生了改变不会影响实参
形参改变了指向的内容,实参才会改变
注意六:Java中可以返回一个数组
注意: 引用变量是一个局部变量,在函数结束后,就会被销毁,与此同时,在堆上的对象在没有人引用的情况下会被自动回收。
注意对象的回收是在没有人引用它的情况下
数组是个对象
注意七:Arrays类中常用的方法
public static void main(String[] args) {
int[] array = {9,8,7,6,5,4,3,2,1,0};
int[] array2 = {9,8,7,6,5,4,3,2,1,10};
//Arrays.equals(array, array2) 比较两个数组中的所有元素相不相同 返回值是Boolean类型
System.out.println(Arrays.equals(array, array2));
//Arrays.sort( ) 默认是升序,降序要比较器
Arrays.sort(array);
System.out.println(Arrays.toString(array));
//Arrays.binarySearch(array, 7) 返回值是下标
System.out.println(Arrays.binarySearch(array, 7));
//Arrays.fill(array2,1,5,0); 数组的区间赋值 注意前闭后开
Arrays.fill(array2,1,5,0);
System.out.println(Arrays.toString(array2));
}
/*
answers:
false
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
7
[9, 0, 0, 0, 0, 4, 3, 2, 1, 10]
*/
注意八:数组中常用的拷贝数组的方法
//1:数组名.clone()
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9,10,11,12};
int[] array2 = array.clone();
System.out.println(Arrays.toString(array2));
}
//2:Arrays.copyOfRange()的局部拷贝
public static void main4(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9,10,11,12};
int[] array2 = Arrays.copyOfRange(array,2,5);//左闭右开
System.out.println(Arrays.toString(array2));
}
//3:System.arraycopy() 的局部拷贝
public static void main3(String[] args) {
int[] array = {1,2,3,4,5,6};
int[] array2 = new int[array.length * 2];
System.arraycopy(array, 2 , array2, 0,array.length - 2);
System.out.println(Arrays.toString(array2));
}
//4:手写的
public static void main2(String[] args) {
int[] array = {1,2,3,4,5,6};
int[] array2 = new int[array.length];
for (int i = 0; i < array.length; i++) {
array2[i] = array[i];
}
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
}
//5:copyof 全拷贝
public static void main1(String[] args) {
int[] array = {1,2,3,4,5,6};
int n = 2;
int[] array2 = Arrays.copyOf(array,n * array.length);
//注意这里的n只能是整数不可以是小数,原码中数组长度的类型是int.
System.out.println(Arrays.toString(array2));
System.out.println(Arrays.toString(array));
}
注意九:手写 tostring 方法
//手写tostring()函数
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9,10};
//tostring(array);//方法一
System.out.println(tostring2(array));//方法二
}
//方法一
public static void tostring(int[] array){
if(array == null){
System.out.println("null");
}else{
System.out.print("[");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
if(i != array.length-1){
System.out.print(",");
}
}
System.out.print("]");
}
}
//方法二
public static String tostring2 (int[] array){
if(array == null){
return "null";
}else{
String ret = "[";
for (int i = 0; i < array.length; i++) {
ret = ret+ array[i];
if(i != array.length-1){
ret = ret + ",";
}
}
return ret + "]";
}
}
注意十:数组的引用指向null
public static void main(String[] args) {
int[] array = null;
int[] array2 = {1,2,3,4,5};
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
//结果:
//null
//[1, 2, 3, 4, 5]
}
注意十一:数组初始化的方式
public static void main(String[] args) {
}
//数组初始化方式
public static void main1(String[] args) {
int[] array1 = {1,2,3,4,5};
//整体初始化
//int[] array2;
//array2 = {1.2,3}; error
//int[] array2;
//array2 = new int[]{1,2,3}; right
int[] array2 = new int[]{1,2,3,4,5};
int[] array3 = new int[10];
for (int x : array3) {
System.out.print(x + " ");
}
//结果 : 0 0 0 0 0 0 0 0 0 0
}