`

类方法学习二:getClasses()、getDeclaredClasses()

    博客分类:
  • J2SE
 
阅读更多

转自:http://blog.csdn.net/csdn1234/article/details/2563806

 

一.定义

Class[] getDeclaredClasses()

返回类中定义的公共、私有、保护的内部类和接口。但不包括继承的内部类和接口。

Class[] getClasses()

返回类定义的公共的内部类和接口,以及从父类、父接口那里继承来的内部类和接口

二.例子

1.GrandFather.java

  1. public class GrandFather {
  2. public class ClassG_Pub {
  3. int x;
  4. }
  5. class ClassG_Pro {
  6. int x;
  7. }
  8. private class ClassG_Pri {
  9. int x;
  10. }
  11. public interface InterfG_Pub {
  12. public String getName();
  13. }
  14. interface InterfG_Pro {
  15. public String getName();
  16. }
  17. private interface InterfG_Pri {
  18. public String getName();
  19. }
  20. }
public class GrandFather {

  public class ClassG_Pub {

    int x;

  }

  

  class ClassG_Pro {

    int x;

  }

  

  private class ClassG_Pri {

    int x;

  }

  public interface InterfG_Pub {

    public String getName();

  }

  

  interface InterfG_Pro {

    public String getName();

  }

  

  private interface InterfG_Pri {

    public String getName();

  }

  

}

2.Father.java

  1. public class Father extends GrandFather{
  2. public class ClassF_Pub {
  3. int x;
  4. }
  5. class ClassF_Pro {
  6. int x;
  7. }
  8. private class ClassF_Pri {
  9. int x;
  10. }
  11. public interface InterfF_Pub {
  12. public String getName();
  13. }
  14. interface InterfF_Pro {
  15. public String getName();
  16. }
  17. private interface InterfF_Pri {
  18. public String getName();
  19. }
  20. }
public class Father extends GrandFather{

  public class ClassF_Pub {

    int x;

  }

  

  class ClassF_Pro {

    int x;

  }

  

  private class ClassF_Pri {

    int x;

  }

  public interface InterfF_Pub {

    public String getName();

  }

  

  interface InterfF_Pro {

    public String getName();

  }

  

  private interface InterfF_Pri {

    public String getName();

  }

  

}

3.Son.java

  1. public class Son extends Father{
  2. public class ClassS_Pub {
  3. int x;
  4. }
  5. class ClassS_Pro {
  6. int x;
  7. }
  8. private class ClassS_Pri {
  9. int x;
  10. }
  11. public interface InterfS_Pub {
  12. public String getName();
  13. }
  14. interface InterfS_Pro {
  15. public String getName();
  16. }
  17. private interface InterfS_Pri {
  18. public String getName();
  19. }
  20. public static void main(String args[]) throws Exception{
  21. System.out.println("getClasses:");
  22. for (Class c:Son.class.getClasses()) {
  23. System.out.println("class name:" + c.getName());
  24. }
  25. System.out.println("getDeclaredClasses:");
  26. for (Class c:Son.class.getDeclaredClasses()) {
  27. System.out.println("class name:" + c.getName());
  28. }
  29. }
  30. }
public class Son extends Father{

  public class ClassS_Pub {

    int x;

  }

  

  class ClassS_Pro {

    int x;

  }

  

  private class ClassS_Pri {

    int x;

  }

  public interface InterfS_Pub {

    public String getName();

  }

  

  interface InterfS_Pro {

    public String getName();

  }

  

  private interface InterfS_Pri {

    public String getName();

  }

  

  public static void main(String args[]) throws Exception{

    System.out.println("getClasses:");

    for (Class c:Son.class.getClasses()) {

      System.out.println("class name:" + c.getName());

    }

    

    System.out.println("getDeclaredClasses:");

    for (Class c:Son.class.getDeclaredClasses()) {

      System.out.println("class name:" + c.getName());

    }

  }



}

4.java Son的输出结果是:

  1. getClasses:
  2. class name:Son$InterfS_Pub
  3. class name:Son$ClassS_Pub
  4. class name:Father$InterfF_Pub
  5. class name:Father$ClassF_Pub
  6. class name:GrandFather$InterfG_Pub
  7. class name:GrandFather$ClassG_Pub
  8. getDeclaredClasses:
  9. class name:Son$InterfS_Pri
  10. class name:Son$InterfS_Pro
  11. class name:Son$InterfS_Pub
  12. class name:Son$ClassS_Pri
  13. class name:Son$ClassS_Pro
  14. class name:Son$ClassS_Pub  
分享到:
评论

相关推荐

    JAVA读取同一路径下所有类及其方法

    在 `getClasses` 方法中,我们使用递归遍历文件夹下的所有类。遍历的过程中,我们使用 `File` 对象来表示当前文件夹,然后使用 `listFiles` 方法来获取该文件夹下的所有文件和文件夹。对于每个文件,我们检查其是否...

    详解Java高级特性之反射

    * getDeclaredClasses():返回一个数组,数组中包含该类中所有类和接口类的对象 * forName(String className):根据类名返回类的对象 * getName():获得类的完整路径名字 * newInstance():创建类的实例 * get...

    Java学习资料-反射机制和注解

    此外,`getClasses()`和`getDeclaredClasses()`用于获取类的内部类信息。 使用反射可以实现一些高级功能,比如动态代理,它允许我们在运行时创建代理类,以实现对方法调用的拦截和处理。Java的`java.lang.reflect....

    通过java的反射技术获取,某个包路径下的类,并以表格形式打印类的属性注解注释及属性名称等

    首先,我们需要通过`Package.getPackage(String name)`方法获取指定包名的Package对象,然后调用`getClasses()`来获取该包下的所有类。对于每个类,我们可以使用`Class.forName(String className)`加载并获取其对应...

    JAVA获取同一路径下所有子类或接口实现类

    - `getAllAssignedClass()`方法通过遍历`getClasses()`返回的所有类,判断每个类是否是目标类(接口或父类)的子类或实现了目标接口,符合条件的加入到结果列表。 通过这段代码,我们可以获取到指定路径下所有实现...

    一些常用的common工具类

    Java的`java.lang.ClassLoader`和`java.io.File`类,以及`java.lang.Package`的`getClasses()`方法都是实现这一功能的关键。 工具类的设计原则往往包括模块化、低耦合和高复用性。每个工具类应专注于一个特定的任务...

    Java2Plantuml:生成PlantUML的Java源代码

    + getClasses():Collection + add(filter:String) + getSize():int + getElementAt(index:int):Object + classExists(className:String):boolean } ' ----- end class ClassFilter ClassFilter

    Java利用反射如何查找使用指定注解的类详解

    在上面的示例代码中,我们首先使用`getClasses`方法获取所有的类,然后使用`findAndAddClassesInPackageByFile`方法来检查每个类是否使用了@Controller注解,如果是,则将其添加到结果集中。最后,我们可以使用反射...

    遍历class

    Java的`java.lang.Class`类提供了丰富的反射API,可以用于获取类的元数据,如类名、父类、接口、字段、构造器和方法。例如,`Class.forName("com.example.MyClass")`可以动态加载类,然后通过`getMethods()`获取...

    JAVA反射机制详解

    根据描述,反射机制可以概括为两个核心能力:动态获取类的所有属性和方法的能力,以及动态调用对象方法的能力。 #### 获取类的信息 通过反射,我们可以获取到一个类的所有构造器、字段和方法。以下是一些主要的...

    java面试.rar

    - **Class[].getClasses()**:获取类的所有公开的子类或嵌套类。 4. **Arrays.sort() 和 Collections.sort() 实现原理和区别** - **Arrays.sort()**:用于排序数组,底层采用快速排序、归并排序等高效算法。它...

    java获取包下被指定注解的类过程解析

    方法二:使用 ClassLoader 扫描 使用 ClassLoader 扫描可以帮助我们获取包下所有的类,然后我们可以通过遍历这些类来获取被指定注解的类。下面是使用 ClassLoader 扫描的实现代码: ```java package ...

    实践考核类课二 选课系统

    东北大学 实践考核类课二 选课系统 public class ChooseClass extends HttpServlet { private static final Log log = LogFactory.getLog(ChooseClass.class); /** * Constructor of the object. */ public ...

    resteasy使用源码

    RestEasy是Java世界中一个流行的RESTful ...通过源码学习,我们可以深入了解其内部机制,实现更灵活、高效的REST服务开发。结合自动注册和编程式注册,以及利用拦截器、提供者和过滤器,可以满足各种复杂的业务场景。

    Jersey实例

    例如,我们可以创建一个名为`QiaoqiaoLogFilter`的类,记录每次请求的详细信息,包括请求方法、URL、请求头和响应信息。 总结,Java Jersey框架为开发者提供了构建RESTful API的强大工具,通过简单易用的注解和丰富...

    基于REST的webservice规范2.0版本

    2. **资源类和方法**:JAX-RS 2.0增强了资源类和方法的支持,包括更灵活的路径匹配、查询参数处理等。 3. **过滤器和拦截器**:新增的过滤器和拦截器机制可以用于对请求和响应进行预处理或后处理操作,增加了应用...

    解析php类的注册与自动加载

    - 这个数组是在 `Utils` 类的静态方法 `getClasses` 中定义的,它接受一个可选参数 `$pre_path` 用于指定类文件的相对路径前缀。 2. **自动加载注册**: - 自动加载函数 `loadClass` 定义在 `Init` 类中,这个...

Global site tag (gtag.js) - Google Analytics