java分析器_什么是java类分析器

展开全部

Java类分析器对学习Java有些帮助,比如在学习内部类或者泛型的时候查看这些类的结构,可以32313133353236313431303231363533e78988e69d8331333363396432帮助我们理解这些机制的本质。代码如下,感兴趣的可以看下。

import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.lang.reflect.Modifier;

import java.util.Scanner;

public class ClassAnalyzer {

private static final String tab = " ";//缩进

public static void analyzer(String className) throws ClassNotFoundException{

Class c = Class.forName(className);

System.out.print(Modifier.toString(c.getModifiers()));

System.out.print(" ");

System.out.print(c.toString());

Class superC = c.getSuperclass();

if(superC != null){

System.out.print(" extends "+superC.getName());

}

System.out.println("{");//类开始括号

//打印域

System.out.println(tab+"//域");

Field[] fields = c.getDeclaredFields();

for(Field field:fields){

printField(field);

}

//打印构造器

System.out.println(tab+"//构造器");

Constructor[] constructors = c.getDeclaredConstructors();

for(Constructor constructor:constructors){

printConstructor(constructor);

}

//打印方法

System.out.println(tab+"//方法");

Method[] methods = c.getDeclaredMethods();

for(Method method:methods){

printMethod(method);

}

System.out.println("}");//类结束括号

}

//打印域

private static void printField(Field field){

System.out.print(tab);

System.out.print(Modifier.toString(field.getModifiers()));

System.out.print(" ");

Class fieldType = field.getType();

if(fieldType.isArray()){

System.out.print(getArrayTypeName(fieldType));

}else{

System.out.print(field.getType().getName());

}

System.out.print(" ");

System.out.print(field.getName());

System.out.println(";");

}

//打印构造器

private static void printConstructor(Constructor constructor){

System.out.print(tab);

System.out.print(Modifier.toString(constructor.getModifiers()));

System.out.print(" ");

System.out.print(constructor.getDeclaringClass().getSimpleName());

Class[] varTypes = constructor.getParameterTypes();

System.out.print("(");

printParameters(varTypes);

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

}

//打印方法

private static void printMethod(Method method){

System.out.print(tab);

System.out.print(Modifier.toString(method.getModifiers()));

System.out.print(" ");

Class returnType = method.getReturnType();

if(returnType.isArray()){

System.out.print(getArrayTypeName(returnType));

}else{

System.out.print(method.getReturnType().getName());

}

System.out.print(" ");

System.out.print(method.getName());

System.out.print("(");

Class[] varTypes = method.getParameterTypes();

printParameters(varTypes);

System.out.print(")");

//声明抛出的异常

Class[] exceptionType = method.getExceptionTypes();

if(exceptionType.length != 0){

System.out.print(" throws ");

for(int i=0;i

System.out.print(exceptionType[i].getName());

if(i < (exceptionType.length - 1)){

System.out.print(",");

}

}

}

System.out.println(";");

}

//打印构造器和方法的参数列表

private static void printParameters(Class[] varTypes){

if(varTypes.length > 0){

for(int i = 0; i < varTypes.length; i++){

if(varTypes[i].isArray()){

System.out.print(getArrayTypeName(varTypes[i]));

}else{

System.out.print(varTypes[i].getName());

}

if( i < (varTypes.length - 1)){

System.out.print(", ");

}

}

}else{

System.out.print(" ");

}

}

public static String getArrayTypeName(Class type){

StringBuffer buffer = new StringBuffer(getArrayType(type).getName());

int dimension = countArrayDimension(type);

for(int i=1;i<=dimension;i++){

buffer.append("[]");

}

return buffer.toString();

}

public static int countArrayDimension(Class type){

int dimension = 0;

if(type.isArray()){

Class tempType = type;

while((tempType = tempType.getComponentType()) != null){

dimension++;

}

}

return dimension;

}

public static Class getArrayType(Class type){

Class arrayType = null;

if(type.isArray()){

Class tempType = type.getComponentType();

do{

arrayType = tempType;

}while((tempType = tempType.getComponentType()) != null);

}

return arrayType;

}

public static void main(String[] args) {

try {

Scanner in = new Scanner(System.in);

System.out.print("Input class name:");

String className = in.next();

in.close();

analyzer(className);

} catch (ClassNotFoundException ex) {

ex.printStackTrace();

}

}

}

本回答由网友推荐

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值