今天我们来讲一讲什么是java的反射机制,我们要了解一个新事物之前,我们应该首先的了解它的基本概念,那什么是反射呢?
java的反射概念:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。
我们为什么要使用反射机制
为什么使用?当然是因为好用喽,不好用早就被淘汰了,哈哈~
我们可以像框架一样,可以写写一套机制,来处理任意的类,使程序更加的灵活
我们首先来理一理,创建一个对象的方式有哪些呢?
new 对象:
这样是不是创建了一个对象以后,这个对象就只能代表它这么一个对象,所以就不具有灵活性,所以我们就有了反射创建对象获得class的方法的方式
Java反射相关类主要包括
一旦class文件被加载到内存中,就会为创建一个class对象,Class类可以通过Java反射机制的基础,可以动态的得到类的定义信息,包括属性 成员变量,构造方法等.
获得class的三种方法:
- //class文件创建的三种方法
- Class c1=User.class;
- System.out.println(c1);
-
- Class c2=new User().getClass();
- System.out.println(c2);
-
- String className="feifan.com.test.User";
- Class c3= Class.forName(className);
- System.out.println(c3);
- //c1==c2==c3
这里给大家提供一个反射案例,供大家参考学习
- //简单反射案例
- public static String objToJson(Object obj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
- String json = "{";
- Class c = obj.getClass();
- Field[] fs = c.getDeclaredFields();//获取任意一个类中的所有属性
- for(Field f : fs){
- String name = f.getName();
- json+=name+":";
- Method m = c.getMethod("get"+name.substring(0,1).toUpperCase()+name.substring(1));//动态构成get方法名称,并获取到get方法
- Object value = m.invoke(obj);//调用了属性的get方法
- json +=value+",";
- }
- json = json.substring(0,json.length()-1);
- json+="}";
- return json;//{id:值,account:值,}
- }
-
-
- public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
- User user = new User();
- user.setId(10);
- user.setAccount("admin");
- user.setPassword("111");
-
-
- Admin admin = new Admin();
- admin.setNum(100);
- admin.setName("zhangsan");
- String json = MyJson.objToJson(user);
- System.out.println(json);
- }
反射优缺点
● 优点:
● 缺点: