1 输入一个类名:java.lang.String将打印出String类定义的结构,例如:

public final class java.lang.String
{
public java.lang.String([B,int,int);
public java.lang.String([B,java.nio.charset.Charset);
public java.lang.String([B,java.lang.String);
public java.lang.String([B,int,int,java.nio.charset.Charset);
public java.lang.String([B,int,int,java.lang.String);
java.lang.String([C,boolean);
public java.lang.String(java.lang.StringBuilder);
public java.lang.String(java.lang.StringBuffer);
public java.lang.String([B);
public java.lang.String([I,int,int);
public java.lang.String();
public java.lang.String([C);
public java.lang.String(java.lang.String);
public java.lang.String([C,int,int);
public java.lang.String([B,int);
public java.lang.String([B,int,int,int); public boolean equals(java.lang.Object);
public java.lang.String toString();
public int hashCode();
public int compareTo(java.lang.String);
public volatile int compareTo(java.lang.Object);
public int indexOf(java.lang.String,int);
public int indexOf(java.lang.String);
public int indexOf(int,int);
public int indexOf(int);
static int indexOf([C,int,int,[C,int,int,int);
static int indexOf([C,int,int,java.lang.String,int);
public static java.lang.String valueOf(int);
public static java.lang.String valueOf(long);
public static java.lang.String valueOf(float);
public static java.lang.String valueOf(boolean);
public static java.lang.String valueOf([C);
public static java.lang.String valueOf([C,int,int);
public static java.lang.String valueOf(java.lang.Object);
public static java.lang.String valueOf(char);
public static java.lang.String valueOf(double);
public char charAt(int);
private static void checkBounds([B,int,int);
public int codePointAt(int);
public int codePointBefore(int);
public int codePointCount(int,int);
public int compareToIgnoreCase(java.lang.String);
public java.lang.String concat(java.lang.String);
public boolean contains(java.lang.CharSequence);
public boolean contentEquals(java.lang.CharSequence);
public boolean contentEquals(java.lang.StringBuffer);
public static java.lang.String copyValueOf([C);
public static java.lang.String copyValueOf([C,int,int);
public boolean endsWith(java.lang.String);
public boolean equalsIgnoreCase(java.lang.String);
public static transient java.lang.String format(java.util.Locale,java.lang.String,[Ljava.lang.Object;);
public static transient java.lang.String format(java.lang.String,[Ljava.lang.Object;);
public void getBytes(int,int,[B,int);
public [B getBytes(java.nio.charset.Charset);
public [B getBytes(java.lang.String);
public [B getBytes();
public void getChars(int,int,[C,int);
void getChars([C,int);
private int indexOfSupplementary(int,int);
public native java.lang.String intern();
public boolean isEmpty();
public static transient java.lang.String join(java.lang.CharSequence,[Ljava.lang.CharSequence;);
public static java.lang.String join(java.lang.CharSequence,java.lang.Iterable);
public int lastIndexOf(int);
public int lastIndexOf(java.lang.String);
static int lastIndexOf([C,int,int,java.lang.String,int);
public int lastIndexOf(java.lang.String,int);
public int lastIndexOf(int,int);
static int lastIndexOf([C,int,int,[C,int,int,int);
private int lastIndexOfSupplementary(int,int);
public int length();
public boolean matches(java.lang.String);
private boolean nonSyncContentEquals(java.lang.AbstractStringBuilder);
public int offsetByCodePoints(int,int);
public boolean regionMatches(int,java.lang.String,int,int);
public boolean regionMatches(boolean,int,java.lang.String,int,int);
public java.lang.String replace(char,char);
public java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence);
public java.lang.String replaceAll(java.lang.String,java.lang.String);
public java.lang.String replaceFirst(java.lang.String,java.lang.String);
public [Ljava.lang.String; split(java.lang.String);
public [Ljava.lang.String; split(java.lang.String,int);
public boolean startsWith(java.lang.String,int);
public boolean startsWith(java.lang.String);
public java.lang.CharSequence subSequence(int,int);
public java.lang.String substring(int);
public java.lang.String substring(int,int);
public [C toCharArray();
public java.lang.String toLowerCase(java.util.Locale);
public java.lang.String toLowerCase();
public java.lang.String toUpperCase();
public java.lang.String toUpperCase(java.util.Locale);
public java.lang.String trim(); private final [C value;
private int hash;
private static final long serialVersionUID;
private static final [Ljava.io.ObjectStreamField; serialPersistentFields;
public static final java.util.Comparator CASE_INSENSITIVE_ORDER;
}

主程序如下:

    public static void main(String[] args) throws ClassNotFoundException
{
String name;
if (args.length>) {
name=args[];
}
else {
Scanner in=new Scanner(System.in);
System.out.println("enter class name(e.g java.util.Date)");
name=in.next();
} try {
Class c1=Class.forName(name);
Class superClass=c1.getSuperclass();
//获取类的修饰符
String modifiers=Modifier.toString(c1.getModifiers());
if (modifiers.length()>) {
System.out.print(modifiers+" ");
}
System.out.print("class "+c1.getName()); if (superClass!=null&&superClass!=Object.class) {
System.out.print(" extends "+superClass.getName());
} //\n表示换行
System.out.print("\n{\n");
//打印构造器
printConstractors(c1);
System.out.println();
//打印类的方法
printMethods(c1); System.out.println();
//打印域
printFields(c1); System.out.println("}"); } catch (Exception e) {
// TODO: handle exception
} }
private static void printFields(Class c1) {
// TODO Auto-generated method stub
Field[] fields= c1.getDeclaredFields();
for (Field field : fields) {
Class type= field.getType();
String name=field.getName();
System.out.print(" ");
String modifiers=Modifier.toString(field.getModifiers());
if (modifiers.length()>) {
System.out.print(modifiers+" ");
}
System.out.println(type.getName()+" "+name+";");
}
} private static void printMethods(Class c1) {
// TODO Auto-generated method stub
//获取当前类的所有方法
Method[] methods= c1.getDeclaredMethods();
for (Method m : methods) {
Class returnType= m.getReturnType();
String methodName=m.getName();
String modifiers=Modifier.toString(m.getModifiers());
if (modifiers.length()>) {
System.out.print(" "+modifiers+" ");
}
System.out.print(returnType.getName()+" "+methodName+"("); //打印方法参数
Class[] paramTypes= m.getParameterTypes();
for (int i = ; i < paramTypes.length; i++) {
if (i>) {
System.out.print(",");
}
System.out.print(paramTypes[i].getName());
}
System.out.println(");");
}
} private static void printConstractors(Class c1) {
// TODO Auto-generated method stub
//得到当前类的所有构造器,包括受保护的和私有的,不包含超类的
Constructor[] constructors= c1.getDeclaredConstructors();
for (Constructor constructor : constructors) {
System.out.print(" ");
String name=constructor.getName();
String modifiers=Modifier.toString(constructor.getModifiers());
if (modifiers.length()>) {
System.out.print(modifiers+" ");
}
System.out.print(name+"("); //打印构造器的参数
Class[] paramsTypes= constructor.getParameterTypes();
for (int i = ; i < paramsTypes.length; i++) {
if (i>) {
System.out.print(",");
}
System.out.print(paramsTypes[i].getName());
}
System.out.println(");");
}
}

java利用反射打印出类的结构的更多相关文章

  1. java利用反射调用类的某个方法

    java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...

  2. java利用反射获取类的属性及类型

    java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...

  3. 【转】Java利用反射机制访问私有化构造器

    Java利用反射机制访问私有化构造器 博客分类: java   我们都知道,当一个类的构造方法被设为私有的时候(private),在其他类中是无法用new来实例化一个对象的. 但是有一种方法可以把带有 ...

  4. Java利用反射排序

    前言 Java为我们提供了几种排序得方法,比如Arrays和Collections类,但是前提是数组或者集合中的元素都必须实现Comparable接口,基本的数据类型都已经实现了Comparable接 ...

  5. 利用反射创建User类的对象

    package com.bjpowernode; public class User { private int age; public String name; public void m1() { ...

  6. java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值

    1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...

  7. C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)

    from:https://blog.csdn.net/poxiaohai2011/article/details/27555951 //C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西 ...

  8. c#利用反射实现对类中的常量进行取值和对应常量的注释

    C#利用反射实现对类中的常量进行取值和对应常量的注释 项目示例:https://gitee.com/dhclly/IceDog.GenerateErrorCode 因为业务需要,项目中有大量的错误码, ...

  9. java 深入技术七(类的结构和反射)

    1.java反射(reflect) java 类的结构 java反射机制就是把java类按结构分解,每一部分对应特定的反射类 java反射机制允许运行时加载,探知和使用在编译期间完全未知的classe ...

随机推荐

  1. 时序数据库技术体系 – 初识InfluxDB(原理)

    原贴地址:http://hbasefly.com/2017/12/08/influxdb-1/?qytefg=c4ft23 在上篇文章<时序数据库体系技术 – 时序数据存储模型设计>中笔者 ...

  2. linux非root用户安装5.7.27版本mysql

    先下安装包,到mysql官网https://dev.mysql.com/downloads/mysql/选好安装包版本.操作系统类型(默认是最新版本,点击右边链接Looking for previou ...

  3. Java Utils工具类大全

    源码和jar见:https://github.com/evil0ps/utils #Java Utils --- 封装了一些常用Java操作方法,便于重复开发利用. 另外希望身为Java牛牛的你们一起 ...

  4. v关于使用Glide加载图片失败时显示自己特定的图片

    Glide是Android加载图片的一个框架. 常用加载图片到imageView:Glide.with(this).load(url).into(ImageView imageview). 当加载失败 ...

  5. matlab基本函数sort

    一起来学演化计算-matlab基本函数sort 觉得有用的话,欢迎一起讨论相互学习~Follow Me sort 对数组元素排序 语法 B = sort(A) 按照大小不等于1的第一个数组维度对A的元 ...

  6. ECMAScript 6复习<一>

    1.let和const命令: let不存在变量提升 暂时性死区 let在相同作用域内不允许重复声明 2.块级作用域: 3.全局对象的属性: ; window.a let b = ; window.b ...

  7. Mysql8.0.17版本不能自动创建activiti表的坑

    maven项目如下: 配置好数据库,和activiti的配置之后,开始执行流程部署 package com.yuanqiao.first_activiti.deployment; import jav ...

  8. PHPStudy后门事件分析

    PHP环境集成程序包phpStudy被公告疑似遭遇供应链攻击,程序包自带PHP的php_xmlrpc.dll模块隐藏有后门.经过分析除了有反向连接木马之外,还可以正向执行任意php代码. 影响版本 P ...

  9. Java并发处理锁 Lock

    在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在 java.util.concurrent.locks 包下提供了另外一 ...

  10. ztree节点名称排序

    // result 为后台返回的集合,在渲染tree前的数据 result = result.sort(function (a, b) { // 判断前面一个是字母,后面一个不是字母,那么不换位置,返 ...