package com.xiaoshan.demo2;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
public class UseDemo {
public static void main(String[] args) {
try {
// 获取类的Class对象
Class<?> clazz = MyClass.class;
// 获取所有公共构造方法
Constructor<?>[] publicConstructors = clazz.getConstructors();
System.out.println("所有公共构造方法:");
printConstructors(publicConstructors);
// 获取所有构造方法(包括私有的)
Constructor<?>[] allConstructors = clazz.getDeclaredConstructors();
System.out.println("所有构造方法(包括私有的):");
printConstructors(allConstructors);
// 获取指定参数类型的构造方法
Class<?>[] parameterTypes = { int.class, String.class };
Constructor<?> constructor = clazz.getConstructor(parameterTypes);
System.out.println("指定参数类型的构造方法:");
printConstructor(constructor);
} catch (Exception e) {
e.printStackTrace();
}
}
// 打印构造方法信息
private static void printConstructors(Constructor<?>[] constructors) {
for (Constructor<?> constructor : constructors) {
// 获取构造方法的修饰符,然后使用Modifier.toString()将修饰符转换成字符串形式
String modifiers = Modifier.toString(constructor.getModifiers());
// 获取构造方法的名称
String name = constructor.getName();
// 获取构造方法的参数类型,返回一个Class<?>数组。每个元素都表示一个参数类型
Class<?>[] parameterTypes = constructor.getParameterTypes();
System.out.print(modifiers + " " + name + "(");
for (int i = 0; i < parameterTypes.length; i++) {
if (i > 0) {
System.out.print(", ");
}
System.out.print(parameterTypes[i].getName());
}
System.out.println(")");
}
System.out.println();
}
// 打印单个构造方法信息
private static void printConstructor(Constructor<?> constructor) {
String modifiers = Modifier.toString(constructor.getModifiers());
String name = constructor.getName();
Class<?>[] parameterTypes = constructor.getParameterTypes();
System.out.print(modifiers + " " + name + "(");
for (int i = 0; i < parameterTypes.length; i++) {
if (i > 0) {
System.out.print(", ");
}
System.out.print(parameterTypes[i].getName());
}
System.out.println(")");
System.out.println();
}
}
class MyClass {
public MyClass(int val, String str) {}
private MyClass(double val) {}
protected MyClass(boolean flag) {}
MyClass() {}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
内容概要 Java的反射机制是指在运行时通过分析类的信息实现动态调用类的方法和访问类的属性的能力。它允许程序在运行时获取类的信息并操作类或对象的属性、方法和构造函数等。通过反射机制,可以实现很多高级特性,如动态代理、注解处理和框架的设计等。 适用人群 适用于有一定Java编程基础的开发人员,希望了解和应用Java反射机制的使用者。 使用场景及目标 使用反射机制的典型场景包括以下几个方面: 在运行时动态加载和创建类对象。 通过反射调用对象的方法和访问对象的字段。 根据类的信息进行序列化和反序列化操作。 实现动态代理和AOP(面向切面编程)等高级特性。 掌握反射机制的目标是能够在运行时获取类的信息,并灵活地利用这些信息来完成所需的操作,以增加程序的灵活性和可扩展性。
资源推荐
资源详情
资源评论
收起资源包目录
src.zip (9个子文件)
src
com
xiaoshan
demo6
RealObject.java 179B
DynamicProxy.java 588B
MyInterface.java 81B
ProxyDemo.java 555B
demo4
UseDemo.java 1KB
demo5
UseDemo.java 2KB
demo2
UseDemo.java 3KB
demo1
UseDemo.java 712B
demo3
UseDemo.java 1KB
共 9 条
- 1
资源评论
小山code
- 粉丝: 1w+
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功