【Java】反射的部分方法

如Class.forName(“java.lang.String”);
返回的是一个类

getName()
public String getName()返回由类对象表示的实体的名称

getSuperClass()
由该对象表示的类的超类

newInstance()
创建由此类对象表示的类的新实例。

getDeclaredFields()
返回的数组Field对象反映此表示的类或接口声明的所有字段类对象。

getDeclaredMethods
返回包含一个数组方法对象反射的类或接口的所有声明的方法

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Reflect_Test11 {
	
	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		//包名.类名
		Class c = Class.forName("java.lang.String");
		//返回的是一个类
		
		System.out.println(c.getName());
		//获取父类 所有属性 所有方法 所有构造方法
		
		//获取直接父类的class实例对象
		Class c2 = Class.forName("java.lang.StringBuffer");
		while(null!=c2) {
			System.out.println(c2.getName());
			c2 = c2.getSuperclass();
		}
		System.out.println("***************************");
		Class cls = Class.forName("lang.Person");
		
		//获取所有属性
		Field [] fields = cls.getDeclaredFields();
		for(Field f:fields) {
			System.out.println(f);
			System.out.println("修饰符:"+f.getModifiers()+"\t字段类型:"+f.getType().getName()+"\t字段名:"+f.getName());
		}
		System.out.println("***************************");
		Method [] methods = cls.getDeclaredMethods();
		for(Method m:methods) {
			System.out.println(m);
			System.out.println("修饰符:"+m.getModifiers()+"\t返回值类型:"+
			m.getReturnType().getName()+"\t方法名:\t"+m.getName());
			//获取方法中形参数据类型 一个方法可能有多个参数,所有返回的数组
			Class [] types = m.getParameterTypes();
			for(Class cc:types) {
				System.out.println(cc+"\t");
			}
			System.out.println();
		}
		//利用反射技术创建一个Person对象 并给属性赋值 根据Class实例创建一个对象
		Object obj = cls.newInstance();	//创建一个Person对象,底层调用的Person无参数的构造方法 Person per = new Person()
		for(Method m :methods) {
			if("setName".equals(m.getName())) {
				m.invoke(obj, "张三"); //启动此方法 obj.setName("张三");
			}else if("setAge".equals(m.getName())) {
				m.invoke(obj, "aaa");
			}
		}
		System.out.println(obj);
	}
}
//输出
java.lang.String
java.lang.StringBuffer
java.lang.AbstractStringBuilder
java.lang.Object
***************************
private java.lang.String lang.Person.name
修饰符:2	字段类型:java.lang.String	字段名:name
private java.lang.String lang.Person.pwd
修饰符:2	字段类型:java.lang.String	字段名:pwd
***************************
public java.lang.String lang.Person.toString()
修饰符:1	返回值类型:java.lang.String	方法名:	toString

public java.lang.String lang.Person.getName()
修饰符:1	返回值类型:java.lang.String	方法名:	getName

public void lang.Person.setName(java.lang.String)
修饰符:1	返回值类型:void	方法名:	setName
class java.lang.String	

public java.lang.String lang.Person.getPwd()
修饰符:1	返回值类型:java.lang.String	方法名:	getPwd

public void lang.Person.setPwd(java.lang.String)
修饰符:1	返回值类型:void	方法名:	setPwd
class java.lang.String	

Person [name=张三, pwd=null]

发布了66 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ACofKing/article/details/90109562