原文链接
import java.lang.reflect.Array;
public class ArrayGrowTest {
public static void main(String[] args) {
int[] a = { 1, 2, 3 };
a = (int[]) goodArrayGrow(a);
arrayPrint(a);
String[] b = { "Tom", "Dick", "Harry" };
b = (String[]) goodArrayGrow(b);
arrayPrint(b);
System.out.println("The following call will generate an exception");
b = (String[]) badArrayGrow(b);
}
public static Object[] badArrayGrow(Object[] a) {
int newLength = a.length * 11 / 10 + 10;
Object[] newArray = new Object[newLength];
System.arraycopy(a, 0, newArray, 0, a.length);
return newArray;
}
public static Object goodArrayGrow(Object a) {
Class<?> c1 = a.getClass();
if (!c1.isArray()) {
return null;
}
Class<?> componentType = c1.getComponentType();
int length = Array.getLength(a);
int newLength = length * 11 / 10 + 10;
Object newArray = Array.newInstance(componentType, newLength);
System.arraycopy(a, 0, newArray, 0, length);
return newArray;
}
public static void arrayPrint(Object a) {
Class<?> c1 = a.getClass();
if (!c1.isArray()) {
return;
}
Class<?> componentType = c1.getComponentType();
int length = Array.getLength(a);
System.out.print(componentType.getName() + "[" + length + "]={ ");
for (int i = 0; i < Array.getLength(a); i++) {
System.out.print(Array.get(a, i) + ",");
}
System.out.println("}");
}
}
分享到:
相关推荐
总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...
通过本篇文章的学习,我们可以了解到Java反射机制的强大之处在于它能在运行时动态地获取类的信息,并对其进行操作。这对于编写高度灵活的代码非常有帮助。同时,动态代理技术为实现AOP(面向切面编程)等高级功能提供...
### Java反射机制详解 #### 一、引言 ...通过合理利用Java反射机制,可以编写更加灵活和可扩展的代码。然而,反射操作通常比常规操作更慢,并且可能会破坏封装性和安全性,因此在实际开发中应当谨慎使用。
2. **创建对象**:反射机制可以让我们在运行时创建任意类的实例,即使我们没有它的构造器。`Class`对象的`newInstance()`方法就是用于创建类的实例。 3. **访问私有成员**:反射可以绕过访问控制,访问私有字段和...
总的来说,Java反射和代理机制提供了对程序运行时行为的强大控制,使得代码更加灵活和可扩展。但同时,也需要注意反射可能会破坏封装性,增加程序的复杂度,降低性能,因此在实际开发中需谨慎使用。理解并熟练运用...
Java反射机制是Java语言的一项强大特性,它使开发者能够编写更加灵活和动态的应用程序。通过使用反射,可以实现在运行时动态获取类的信息和操作对象,从而提高程序的可扩展性和灵活性。然而,反射机制也有其局限性和...
Java反射技术是一种可以访问、检测和修改程序本身状态或行为的能力。通过反射,Java程序可以加载一个运行时才知道名称的类,得到其完整内部信息,并创建其对象,或对其属性设值,或调用其方法。反射是提高Java程序...
- 当方法需要接收数组作为参数时,可以使用`Array.newInstance()`创建数组,并将其传递给反射调用的方法。 ##### 8. 数组与Object的关系及其反射类型 - 在Java中,数组也是一种对象,可以通过反射创建和操作数组。 ...
- **可变参数**:方法可以接受任意数量的同类型参数。 以上是Java的基础知识和高级特性的概述。Java是一门功能强大且灵活的编程语言,适用于各种应用场景。掌握这些核心概念和技术将有助于开发者更好地利用Java来...
ArrayList是一个动态数组,可以存储任意类型的对象,是Java集合框架中的重要组件,提供了灵活的数据结构和高效的操作。 #### 18. getClass() getClass()方法返回对象所属类的Class对象,可以获取类的各种信息,如...
9. **内省(Introspection)**:Java 5.0加强了对反射API的支持,使得程序可以在运行时检查类、接口、字段和方法的属性。 10. **NIO.2(New I/O 2)**:Java 5.0引入了NIO(非阻塞I/O),NIO.2进一步扩展了这一功能...
- **数组**:数组是用来存储固定大小的同类型元素的集合。 - **方法**:Java中的函数称为方法,用于封装一系列操作,提高代码复用性。 - **类与对象**:Java是面向对象的语言,通过定义类来描述现实世界中的对象及其...
多态性使得Java能够编写更加灵活和可扩展的代码。 ##### 关于继承与实现的问题 - **继承**:子类可以继承父类的属性和方法,从而减少重复代码,提高代码复用性。 - **实现**:通过实现接口,类可以满足接口定义的...
ArrayList是一个动态数组,它可以存储任意类型的对象,并允许动态调整大小。ArrayList是Java集合框架的一部分,提供了许多方便的操作方法。 #### 21. Class对象 每个Java类都有一个对应的Class对象,它包含了关于类...
- 可变参数方法(varargs):方法可以接受任意数量的同类型参数。 3. **子类型与通配符:** - 子类型:一种类型的对象可以被赋值给另一种类型变量的情况。 - 通配符:一种特殊类型参数,用以表示未知的具体类型。 ...
可变参数是Java 5引入的特性,允许方法接受任意数量的相同类型参数。它在方法签名中通过三个点`...`来表示,如`public void printNumbers(int... numbers)`。这实际上是语法糖,编译器会将其转换为一个数组参数。可...
##### 11.3 Java反射机制 - 反射允许程序在运行时获取类的信息并操作对象。 #### 12. 输入/输出(IO) ##### 12.1 File类 - 文件和目录的创建、删除等操作。 ##### 12.2 了解Java IO流 - 输入流:从源读取数据。 ...
#### 15.2 使用Java反射机制 通过反射,可以在运行时获取类的构造函数、方法、字段等信息。 #### 15.3 反射与动态代理 动态代理利用反射生成代理对象,可以用来增强或扩展对象的功能。 ### 十四、Java标注 ####...