java反射笔记二

三个重要的类:

1. Constructor

提供关于类的单个构造方法的信息及对它访问权限。

2. Field

提供有关类或接口的单个字段信息及对它的访问权限,反射的字段可能是一个类(静态)字段或者是一个实例对象字段。

3. Method

提供有关类或接口的单个方法信息及如何访问该方法,所反映的方法是一个类方法或实例方法(包括抽象方法)。

利用反射分析类

需求:根据输入的类,分析该类中的所有信息,并将获得信息按照字段,构造方法,一般方法的顺序,输出到控制台

步骤:

1. 获取键盘录入

2. 根据键盘录入的类名,获取该类的对象实例

3. 根据Class类中提供的API分别获取Constructors, Fields, Methods

4. 按照Field, Contructor, Method的顺序将其输出到控制台

代码:

package com.zhangchao;

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 AnalysisClass {

	public static void main(String[] args) {
		String className;
		/**
		 * 键盘录入
		 */
		Scanner sc = new Scanner(System.in);
		className = sc.next();
		System.out.println("------" + className);
		/**
		 * 反射
		 */
		try {
			Class<?> clazz = Class.forName(className);
			clazz.getModifiers();
			String modifier = Modifier.toString(clazz.getModifiers());
			if (modifier.length() > 0) {
				System.out.print(modifier);
				System.out.print(" class " + className);
			}
			Class<?> clazz_super = clazz.getSuperclass();
			if (clazz_super != null && clazz_super != Object.class) {
				System.out.println(" extends " + clazz_super.getName() + " {");
			}
			printConstructors(clazz);
			System.out.println();
			printMethods(clazz);
			System.out.println();
			printFields(clazz);
			System.out.println("}");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

	}

	/**
	 * 获取并输出所有的构造方法,不包含父类
	 * @param cl
	 */
	public static void printConstructors(Class<?> cl) {
		Constructor<?>[] constructors = cl.getDeclaredConstructors();
		for (Constructor<?> c : constructors) {
			System.out.println("	"+ c + ";");
		}
	}
	
	/**
	 * 获取并输出所有的一般方法
	 * @param cl
	 */
	public static void printMethods(Class<?> cl) {
		Method[] methods = cl.getDeclaredMethods();
		for (Method m : methods) {
			System.out.println("	"+ m + ";");
		}
	}
	
	/**
	 * 获取并输出所有的字段
	 * @param cl
	 */
	public static void printFields(Class<?> cl) {
		Field[] fields = cl.getDeclaredFields();
		for(Field f : fields) {
			System.out.println("	"+ f + ";");
		}
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值