461. Java 反射 - 获取类的成员类

发布时间:2026/7/12 10:53:25
461. Java 反射 - 获取类的成员类 文章目录461. Java 反射 - 获取类的成员类1. 获取所有 **公共的成员类**getClasses()用法示例输出结果要点说明2. 获取 **所有成员类不限访问级别**getDeclaredClasses()用法示例输出结果要点说明3. getClasses() vs getDeclaredClasses() 对比表4. 示例定义一个外部类 内部类使用反射输出对比5. 总结461. Java 反射 - 获取类的成员类在 Java 中一个类可以定义内部类member class。这些内部类可以是publicprotected包可见package-privateprivate反射 API 提供了两种方法来获取这些内部类1. 获取所有公共的成员类getClasses()用法示例Class?cCharacter.class;for(ClassmemberClass:c.getClasses()){System.out.println(class: memberClass);}输出结果class:classjava.lang.Character$UnicodeBlockclass:classjava.lang.Character$UnicodeScriptclass:classjava.lang.Character$Subset要点说明返回当前类 所有父类的公共成员类。内部类的名字中会带$比如Character$UnicodeBlock。输出结果包括Character自己的成员类也包括继承自父类的公共成员类。2. 获取所有成员类不限访问级别getDeclaredClasses()用法示例Class?cCharacter.class;for(ClassmemberClass:c.getDeclaredClasses()){System.out.println(class: memberClass);}输出结果class:classjava.lang.Character$CharacterCacheclass:classjava.lang.Character$UnicodeBlockclass:classjava.lang.Character$UnicodeScriptclass:classjava.lang.Character$Subset要点说明返回当前类自己声明的所有成员类包括public、protected、包可见和private。不会返回父类的成员类。在Character类中除了公共类还能看到一个私有内部类CharacterCache。这个类在Character内部用来缓存常用字符对象0-127。它是 JDK 内部的优化实现。3.getClasses()vsgetDeclaredClasses()对比表方法返回范围是否包含父类成员类getClasses()所有public成员类✅ 包含父类getDeclaredClasses()当前类声明的全部成员类public protected 包可见 private❌ 不包含父类4. 示例定义一个外部类 内部类publicclassParent{publicstaticclassPublicInner{}protectedstaticclassProtectedInner{}staticclassPackageInner{}privatestaticclassPrivateInner{}}publicclassOuterextendsParent{publicstaticclassPublicInner{}protectedstaticclassProtectedInner{}staticclassPackageInner{}privatestaticclassPrivateInner{}}使用反射for(varclazz:Outer.class.getClasses()){System.out.println(getClasses(): clazz);}for(varclazz:Outer.class.getDeclaredClasses()){System.out.println(getDeclaredClasses(): clazz);}输出对比getClasses():classchapter461.Outer$PublicInnergetClasses():classchapter461.Parent$PublicInnergetDeclaredClasses():classchapter461.Outer$PrivateInnergetDeclaredClasses():classchapter461.Outer$PackageInnergetDeclaredClasses():classchapter461.Outer$ProtectedInnergetDeclaredClasses():classchapter461.Outer$PublicInner5. 总结getClasses()获取公共成员类包含父类的。getDeclaredClasses()获取当前类自己声明的所有成员类包括私有的。内部类在字节码里以$连接外部类和内部类名称。通过反射你可以看到一些在代码中无法直接访问的私有实现细节。