关于JAVA反射的知识点整理,未完待续。

百度百科给出的java反射定义:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

对于任意一一个类,该类所有关键属性就是他的属性和方法; 但是很多时候我们在使用一个类的时候,是显示不知道该类的具体属性的,比方说有这样一个方法(来自Hibernate):

boolean save(Object object);

显然我们在使用该方法的时候是不可能传一个Object进来,而是传一个有实际意义的对象进来,但是对于object这个局部变量我们能获得信息很有限,需要在运行时动态获取该object的所有信息,在这种情况下就会用到反射。

关于反射的底层原理:https://blog.csdn.net/qq_35246620/article/details/75209130

关于反射的使用与拓展

1.Class

首先我们必须要获得一个类对象,该对象会包含你所指的类对象所有属性及方法,获取方式

① 显示获取: Class EmployeeClass=Class.forName("test.Employee" );//通过字符串获得,此时类名必须是类的全限定名

或者:Class EmployeeClass2=Employee.class;//使用类的.class属性

②通过对象获取:

Class EmployeeClass3=new Employee().getClass();

经过我自己的测试,这三种方式获得的Class对象完全相等,且哈希码也完成全相等,故而这三种方式可完全相等的使用,且由此推出,当在加载一个类的时候,该类的Class对象也会被创建,且只会创建一个。

extensions:通过该Class对象我们能获得这个类的什么信息呢:

很有用的信息包含:

获取该类的超类,接口,注解,属性,方法,构造器,被当做泛型使用时的类型参数; 生成该类的一个对象

按顺序如下:

getSuperClass()/getDeclaredSuperClass() //注意此方法只能获得他的直接父类,没有父类的返回它本身,直接父类是Object的 返回Object

getInterface()//返回直接实现的接口

getAnnotation​(Class<A>annotationClass)/getDeclaredAnnotation(Class<A> annotationClass)/getAnnotations()/getDeclaredAnnotations()  //返回指定的注解对象/所有的注解对象

getConstructor​(Class<?>... parameterTypes)/getConstuctors() //返回含指定参数列表的构造器/所有构造器

getField​(String name)/getFields()/getDeclaredFields()  //返回指定属性/所有公共的或者protected属性/所有已声明的属性

getDeclaredMethod​(String name, Class<?>... parameterTypes)/getMethods()  //返回指定参数列表和命名的方法/返回所有方法

2.Filed

3.Method


猜你喜欢

转载自blog.csdn.net/WK_SDU/article/details/80026482
今日推荐