java 动态性之反射机制

一.反射引入

1.动态语言:

程序运行时,可以改变程序结构或变量类型,典型的有:python、javascript。java不是动态语言,但它有动态性,反射就是java动态性的一个体现。

2.反射概念:

Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。即加载完类以后,就产生了一个Class对象,这个对象包含完整的类的结构信息,我们可以通过这个对象看到类的结构信息,这个对象就像一面镜子,因此我们形象的称之为“反射”。

3.获得Class对象的三种方式

  • .class.
  • getclass()   这是Object类的一个方法,要使用得先创建对象
  • class for Name("类的全路径名") (最常使用)
        //第一种
		Class clazz1=String.class;
		
		//第二种
		User u=new User();
		Class clazz2=u.getClass();
		
		
		//第三种
		try {
			Class clazz3=Class.forName("com.reflect.User");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

 

 

二.应用反射API获取类的信息

     Class clazz;

1、获取类名

  • clazz.getName()    获取   类的全路径(包名+类名)
  • clazz.getSimpleName()   获取类名

2、获取属性信息

  • clazz.getFields()     得到public修饰的属性信息
  • clazz.getDeclaredFields()    得到所有属性信息(包括private)
  • clazz.getDeclaredField("属性名");    得到指定属性信息

3、获取方法信息

  • clazz.getMethods();     得到public修饰的方法
  • clazz.getMethod(name, parameterTypes)     得到指定public修饰的方法
  • clazz.getDeclaredMethods();          得到所有方法信息(包括private)
  • clazz.getDeclaredMethod(name, parameterTypes)        得到指定所有方法信息(包括private),因为java中有方法重载,只给方法名无法得到确定的方法,故如果所要调用的方法有参,则必须传参数类型。

4、获取构造器信息

  • clazz.getConstructors();          得到public修饰的构造方法
  • clazz.getConstructor(parameterTypes);           得到指定public修饰的构造方法信息,
  • clazz.getDeclaredConstructors();       得到所有构造方法信息(包括private)
  • clazz.getDeclaredConstructor(parameterTypes)           得到指定所有构造方法信息(包括private)

5、构造对象

扫描二维码关注公众号,回复: 6102230 查看本文章
  • clazz.newInstance()   通过反射调用无参构造方法(故在Javabean类中必须有无参构造函数)
  • Constructor c=clazz.getDeclaredConstructor(parameterTypes)        c.newInstance(initargs)   initargs里填具体列类型对应的值

6、利用反射调用方法

  • Method method=clazz.getDeclaredMethod(name, parameterTypes)      method.invoke(obj, args)  

7、通过反射操作属性

  • Field f=clazz.getDeclaredField(name);          f.set(obj, value);

猜你喜欢

转载自blog.csdn.net/qq_42922647/article/details/89681474