java 如何找class
查找 Java 类的常用方法
通过类名直接加载
使用 Class.forName() 方法,传入完整类名(包括包路径)即可加载类。适用于已知类全名的场景。
Class<?> clazz = Class.forName("java.lang.String");
通过对象实例获取
通过已有对象的 getClass() 方法获取其类对象。适用于已有实例的情况。
String str = "example";
Class<?> clazz = str.getClass();
使用 .class 语法
通过类名直接加 .class 获取类对象。适用于编译时已知类的情况。
Class<String> stringClass = String.class;
动态查找类的方法
扫描类路径
使用反射工具库(如 Spring 的 ClassPathScanningCandidateComponentProvider)扫描指定包路径下的类。
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
scanner.addIncludeFilter(new AnnotationTypeFilter(Component.class));
Set<BeanDefinition> beans = scanner.findCandidateComponents("com.example");
通过 ClassLoader 查找 利用类加载器资源枚举功能查找类文件,适合需要动态发现类的情况。
Enumeration<URL> resources = ClassLoader.getSystemClassLoader()
.getResources("com/example");
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
// 处理资源路径获取类名
}
处理匿名类和内部类
匿名类获取
匿名类的类名会包含数字后缀,可通过父类/接口的 getClass() 获取。
Runnable r = new Runnable() { public void run() {} };
Class<?> anonymousClass = r.getClass();
内部类表示
内部类使用 $ 符号连接外部类名,如 OuterClass$InnerClass。

Class<?> innerClass = OuterClass.InnerClass.class;
注意事项
- 类名需区分大小写且包含完整包路径
- 动态加载类需处理
ClassNotFoundException - 安全考虑:反射操作可能需要设置安全管理器权限






