package test;
/**
* 父类信息查看器
* 在查看别人的源码时,有时候很想有个可以列出某个类的父类信息的工具。
* 没找到,于是做了一个。
* 对于目前情况来说, showSuperclass(Class clz) 已经够用了。
* 更深入的,目前做了一点研究,有空再完善吧。
*/
import java.lang.reflect.Type;
import org.apache.log4j.Logger;
public class ShowSuper {
private static Logger log = Logger.getLogger(ShowSuper.class);
/**
* 递归获取一个类的所有父类
* @param clz
*/
public static void showSuperclass(Class clz)
{
while(clz!=null)
{
System.out.println( "16 (" + clz.getName() + ".java:1)");
clz = clz.getSuperclass();
}
}
/**
* getGenericSuperclass 和 getSuperclass 好象没有什么区别,除了类型
* @param clz
*/
public static void showGenericSuperclass(Class clz)
{
while(clz!=null)
{
System.out.println( "16 (" + clz.getName() + ".java:1)");
clz = (Class)clz.getGenericSuperclass();
}
}
public static void showInterfaces(Class clz)
{
System.out.println( "(" + clz.getName() + ".java:1)");
if(clz!=null)
{
Class[] clzs = clz.getInterfaces();
System.out.println( "clzs.length:" + clzs.length);
for(int i=0; i<clzs.length; i++)
{
System.out.println( "30 (" + clzs[i].getName() + ".java:1)");
//showSuperclass(clzs[i]);
}
}
}
/**
* getGenericInterfaces 其实应该改名为 getSuperInterfaces 吧
* 嗯,一个接口可以继承多个接口
* @param clz
*/
public static void showGenericInterfaces(Class clz)
{
System.out.println( "(" + clz.getName() + ".java:1)");
if(clz!=null)
{
Type[] clzs = clz.getGenericInterfaces();
System.out.println( "clzs.length:" + clzs.length);
for(int i=0; i<clzs.length; i++)
{
System.out.println( "57 (" + ((Class)clzs[i]).getName() + ".java:1)");
//showSuperclass(clzs[i]);
}
}
}
public static void main(String[] args)
{
//Class clz = log.getClass();
//log.debug( clz );
// Class clz = null;
// for(int i=0; i<10; i++)
// {
// if(clz==null)
// {
// clz = log.getClass();
// }
// else
// {
// clz = clz.getSuperclass();
// }
// if(clz==null)
// {
// break;
// }
// log.debug( "(" + clz.getName() + ".java:1)");
//
// }
//showSuperclass(log.getClass());
//showSuperclass(Class.class);
//showInterfaces(Class.class);
//showInterfaces(Imp01.class);
//showInterfaces(Logger.class);
//showSuperclass(Imp01.class);
//showGenericSuperclass(Imp01.class);
//showGenericInterfaces(Imp01.class);
//showGenericInterfaces(Interface02.class);
//showGenericInterfaces(Interface01.class);
showGenericInterfaces(Interface11.class);
//showSuperclass(Interface02.class);
//showGenericSuperclass(Interface02.class);
}
}
分享到:
相关推荐
使用Java Class文件查看器,用户可以查看以下几个关键方面的信息: 1. **类结构**:包括类名、父类、接口实现等,这对于理解类的继承关系至关重要。 2. **字段信息**:查看类中的变量,包括其类型、访问权限和初始...
《深入解析Java Class文件查看器》 在Java编程领域,理解class文件的内部结构对于开发者来说至关重要,因为它是Java程序运行的基础。今天我们将探讨一款名为"class文件查看器"的工具,它是一个跨平台的实用程序,专...
《jclazz:Windows平台上的JAVA字节码查看器详解》 在Java开发过程中,了解和分析字节码是提升程序理解和优化能力的重要手段。jclazz是一款专为Windows平台设计的JAVA字节码查看器,其1.1.2版本以其易用性和功能...
Java制作的网页浏览器和源代码查看器,仿IE的网页浏览功能,不支持HTML5,窗口采用上下分屏显示的方式,上面显示网页浏览器,下面显示该网页的源代码,JTextField jtfAddress; //输入html文件地址或网址 ...
Bootstrap类加载器会先看看rt.jar中有没有这个类,因为并没有这个类,所以这个请求由回到Extension类加载器,它会查看jre/lib/ext目录下有没有这个类,如果这个类被Extension类加载器找到,那么它将被加载,而...
为了理解并分析这些Class文件,开发者通常会使用特定的工具,如Class查看器和反编译器。 "Class文件查看"是一个关键的IT知识点,它涉及到对已编译Java类的深入理解和调试。这类工具允许开发者查看类的方法、字段、...
因为子类对象已经包含了父类的所有信息,直接调用即可。 6. **多态性**:在Java中,父类引用可以指向子类对象,这种现象称为多态性。在这种情况下,通过父类引用调用的方法实际上是子类重写后的版本,除非使用`...
在运行时,可能需要连接到`.mdf`数据库文件,以查看和操作其中的学生信息。 在学习这个项目的过程中,学生可以掌握以下知识点: 1. 面向对象编程的基本概念,如类、对象、封装、继承、多态等。 2. Java语言的语法和...
为了更好地理解和调试类装载器的行为,WAS V7提供了类装载器查看器工具。该工具可以帮助开发者查看每个类是如何被装载的、装载它的类装载器是谁等信息,这对于诊断类装载相关的错误非常有用。 #### 通过实例学习类...
Struts 2提供了丰富的特性,如拦截器、动态方法调用等,使得开发者能更便捷地构建可维护、可扩展的Web应用。同时,系统使用JDBC(Java Database Connectivity)作为数据库访问层,用于与后台数据库进行交互,处理...
例如,只有管理员才能进行员工信息的修改和删除,普通用户只能查看信息。 8. 错误处理:系统应具备良好的错误处理机制,当出现异常时,能够友好地向用户反馈错误信息,而不是直接抛出异常。 总的来说,这个基于...
- 当搜索类时,类加载器可以先搜索父类加载器再查看自身,或者先查看自身再搜索父类加载器。 - 委托算法不适用于本地库(如.dll或.so文件)。 - 常见的委托值包括: - PARENT_FIRST:先将搜索委托给父类加载器,...
**应用场景**:查看计算机的基本配置和状态信息。 #### 35. perfmon.msc - 性能监视器 **功能**:启动性能监视器,可以监控系统性能。 **应用场景**:分析系统性能瓶颈,进行性能调优。 #### 36. winver - 查看...
- 修改为“子类优先”(parent last),这意味着应用类加载器会首先尝试加载类,如果找不到再由父类加载器加载。 3. **设置模块间类加载**: - 对于多模块应用,可能还需要调整模块间的类加载策略。在控制台中...
- **类装入器查看器**:一种工具,用于可视化展示WebSphere中类装入器的层次结构及其关系,有助于诊断类加载问题。 #### 通过实例学习类装入器 文档中提到了四个步骤,通过这些步骤可以帮助理解类装入器在实际部署...
7. **类装载器的诊断**:通过JVM的命令行工具如`jinfo`、`jconsole`或`jmap`,可以查看各个类装载器的详细信息,包括装载的类数量、内存占用等。对于类装载问题的排查,`jstack` 可以输出线程堆栈信息,帮助定位问题...
`.class`文件遵循Java虚拟机(JVM)规范,它由一系列字节组成,包括魔数、版本信息、常量池、类和父类信息、接口、字段、方法等。这些数据项以特定的格式编码,对于普通开发者来说直接阅读是困难的。 2. **查看...
遇到类冲突、类找不到等问题时,可通过设置JVM参数`-verbose:class`来查看类加载的详细信息,或者使用JDK的`jmap -histo`命令分析内存中的类加载情况。 8. **线程安全** 类加载过程中的某些步骤,如加载和初始化...
当子类继承父类时,可以通过`super()`来调用父类的无参数构造器,或者通过`super(args...)`调用带参数的构造器。这样做确保了在子类实例化过程中,父类的初始化工作得以执行。例如: ```java public class Parent {...