一、想对你说
(1)之前一直有小伙伴让我总结下Java相关的知识点,这里我针对有一定Java基础的同学做了一个系列的总结,感兴趣的同学可以看看顶部的【Java专栏】希望对大家有所帮助。
(2)要是对您有所帮助的话,可以给 “大大大钢琴” 点个赞,这是我继续下去的动力,谢谢大家了!废话不多说了,直接上干货。
二、反射操作Array数组
(一)反射reflect.Array类
1.1:通过反射操作数组
import java.lang.reflect.Array;
public class test_demo {
public static void main(String[] args) throws Exception {
int[] arr = {1,2,3,4,5};
Class<?> c = arr.getClass().getComponentType();
System.out.println("数组类型: " + c.getName());
int len = Array.getLength(arr);
System.out.println("数组长度: " + len);
System.out.print("遍历数组: ");
for (int i = 0; i < len; i++) {
System.out.print(Array.get(arr, i) + " ");
}
System.out.println();
//修改数组
System.out.println("修改前的第一个元素: " + Array.get(arr, 0));
Array.set(arr, 0, 99);
System.out.println(Array.get(arr, 0));
System.out.println("修改后的第一个元素: " + Array.get(arr, 0));
Array.set(arr, len-1, 999);
System.out.println(Array.get(arr, len-1));
}
}
1.2:动态创建和访问Java数组的方法
import java.lang.reflect.Array;
public class test_demo {
public static void main(String[] args) throws Exception {
test_demo testArray = new test_demo();
testArray.testOneObject();
testArray.testOne();
testArray.testTwo();
}
//(1) 放置数据
public void testOneObject() {
Object object = Array.newInstance(Object.class, 10);
Array.set(object, 3, "333");
printArr(object);
}
//(2) 一维素组
public void testOne() throws ClassNotFoundException {
Class<?> classType = Class.forName("java.lang.String");
Object object = Array.newInstance(classType, 9);
Array.set(object, 5, "555");
printArr(object);
}
//(3) 二维数组
public void testTwo() throws ClassNotFoundException {
Class<?> classType = Class.forName("java.lang.String");
Object object = Array.newInstance(classType, new int[]{3, 3}); //数组长度0-9、0-7
//[5][5] 为"123",先获取一维,在通过一维获取二维的数据
Array.set(Array.get(object, 1), 1, "222");
printArr(object);
System.out.println(Array.get(Array.get(object, 1), 1));
}
// 打印数据
public void printArr(Object object){
System.out.print("数组长度:"+Array.getLength(object)+ "、内容如下:");
for (int i = 0; i < Array.getLength(object); i++) {
if(Array.get(object, i) != null && Array.get(object, i).toString().indexOf("@") -1 > 1){
System.out.print("数据["+i+"]");
for (int j = 0; j < Array.getLength(Array.get(object, i)); j++) {
Object value = Array.get(Array.get(object, i), j);
System.out.print("["+value+"]");
}
System.out.print(")、");
}else {
System.out.print("数据(" + Array.get(object, i) + ")、");
}
}
System.out.println();
}
}
(二)reflect.Array创建,填充,显示数组
java.lang.reflect.Array利用反射机制来创建并操作某种类型的数组。
import java.lang.reflect.Array;
import java.util.Random;
public class test_demo {
public static void main(String[] args) {
// 创建一个数组
Object array = Array.newInstance(int.class, 3);
printType(array);
fillArray(array);
displayArray(array);
}
//(1)打印这个对象的数组类型和大小
private static void printType(Object object) {
Class<?> type = object.getClass();
if (type.isArray()) {
Class<?> elementType = type.getComponentType();
System.out.println("Array类型: " + elementType);
System.out.println("Array长度: " + Array.getLength(object));
}
}
//(2)填充数组
private static void fillArray(Object array) {
int length = Array.getLength(array);
Random generator = new Random(System.currentTimeMillis());//获取当前的计算机时间
for (int i = 0; i < length; i++) {
int random = generator.nextInt();
//将指定数组对象的索引组件的值设置为指定的int值。
Array.setInt(array, i, random);
System.out.println("填充数组索引为:"+i+"、值为:"+Array.getInt(array, i));
}
}
//(3)显示数组
private static void displayArray(Object array) {
int length = Array.getLength(array);
for (int i = 0; i < length; i++) {
int value = Array.getInt(array, i);
System.out.println("索引位: " + i + ",数组值: " + value);
}
}
}
(三)reflect.Array数组容量扩容
java.lang.reflect.Array利用反射机制来获取数组长度并进行数组容量扩容。
import java.lang.reflect.Array;
public class test_demo {
public static void main(String[] args) {
int array[] = {1, 222, 3, 4, 5};
System.out.println("原始大小: " + array.length);
System.out.println("最新容量: " + doubleArray(array).length);
System.out.println("索引为1的值:"+doubleArray(array)[1]);
}
static int[] doubleArray(Object original) {
Object returnValue = null;
Class<?> type = original.getClass();
// 判断是否是Array类型
if (type.isArray()) {
// 获取数组原始长度
int length = Array.getLength(original);
Class <?>elementType = type.getComponentType();
// 根据数组组件的类型,来扩容
returnValue = Array.newInstance(elementType, length * 2);
System.arraycopy(original, 0, returnValue, 0, length);
}
return (int[]) returnValue;
}
}