Java反射机制
2017-03-03 00:00
323 查看
学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:183993990 我们一起学Java!
一、概述
Java反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的属性和方法。对于任意一个对象能够调用它的任意一个属性和方法。这种动态获取的信息和动态调用对象的方法的功能称为Java语言的反射机制 --百度百科反射机制就是通过Class类实现的。但是总所周知在Java中,Object 类是所有类的根类,而Class类就是描述Java类的类。有点儿抽象?没关系,我们再来解释下Class到底是何物!
在Java中,每一个class都有一个相应的Class对象,在将Java源码编译成.class文件中就会生成一个Class对象,Class对象表示这个类的类型信息,你也可以理解成Class是类的类型
注意:因为Class类也是类,所以Object也包括Class类
我们创建对象一般是通过new关键字创建,但是new是静态加载类,一旦找不到类就会编译不通过。但是通过反射机制创建对象一旦找不到类则抛出java.lang.ClassNotFoundException异常,如图:
说的再多不如写个例子实在,接下来上源码
二、运用
1、定义一个接口Office/** * 描述:办公接口 <br> * 作者: kimball <br> * E-mail: kimballlu@foxmail.com <br> * 日期: 2017-1-9 下午2:21:42 <br> */ public interface Office { /** * 描述 */ public void describe(); }
2、创建一个实现类Word
/** * 描述: Word <br> * 作者: kimball <br> * E-mail: kimballlu@foxmail.com <br> * 日期: 2017-1-9 下午2:22:27 <br> */ public class Word implements Office { @Override public void describe() { System.out.println("大家好,我是Word"); } }
3、创建测试类Test
/** * 描述:测试类 <br> * 作者: kimball <br> * E-mail: kimballlu@foxmail.com <br> * 日期: 2017-1-9 下午2:07:15 <br> */ public class Test { /** * Main入口 * @param args * @throws ClassNotFoundException */ public static void main(String[] string) throws ClassNotFoundException { try { @SuppressWarnings("rawtypes") //传入接口实现类的路径 Class office = Class.forName("com.Word"); try { //创建该类的对象 Office word = (Office)office.newInstance(); //调用方法 word.describe(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
4、运行结果
-------------------------------------------------我是华丽的分割线--------------------------------------------------
至此一个简单的使用已经通过例子实现了,接下来我们深入一点儿了解Class的属性和方法
Class对象的常用方法:
Constructor[] getConstructors():返回此Class对象所表示的类的所有public构造方法
Method[] getMethods():返回此Class对象所表示的类的所有public方法
Method[] getDeclaredMethods():返回此Class对象所表示的类的所有方法,与方法的访问级别无关
Field[] getFields():返回此Class对象所表示的类的所有public属性
Field[] getDecalaredDields():返回此Class对象所表示的类的所有属性,与属性访问级别无关
Object get(Object obj):得到引用类型属性值
void set(Object obj,Object val):将obj对象的该属性设置成val值。针对引用类型赋值
Object invoke(Object obj,Object args):调用类的方法,obj是执行该方法的对象,args是执行该方法时传入该方法的参数
以上介绍的是如何通过Class类得到指定的对象,接下来我们看如何通过对象得到Class类,看源码:
/** * 描述:测试类 <br> * 作者: kimball <br> * E-mail: kimballlu@foxmail.com <br> * 日期: 2017-1-9 下午2:07:15 <br> */ public class Test { /** * Main入口 * @param args * @throws ClassNotFoundException */ @SuppressWarnings("rawtypes") public static void main(String[] string) throws ClassNotFoundException { Word word = new Word(); Class word1 = word.getClass(); // 通过对象的getClass()方法获取Class Class word2 = Word.class; // 通过类.class获取Class Class word3 = Class.forName("com.Word"); // 通过路径获取Class System.out.println(word1 == word2); System.out.println(word2 == word3); } }
输出结果:
学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:183993990 我们一起学Java!
相关文章推荐
- Java反射机制的学习
- 浅谈Java反射机制
- Java反射机制
- 使用Java反射机制遍历实体类的属性和类型
- Java反射机制生成实例
- 用java反射机制和正则表达式完成PHP式query句子
- java反射机制——解析
- 通过java反射机制获取该类的所有属性类型、值
- 利用java反射机制,子类从父类拷贝属性--解决信息修改类设计的模式
- java反射机制学习
- 候捷谈Java反射机制
- Java反射机制
- java反射机制
- java反射机制
- JAVA反射机制
- java反射机制 + Method.invoke解释 getMethod + 反射理解
- spring的ioc原理(java反射机制)
- 一个例子让你了解Java反射机制
- 菜鸟学Java(十四)——Java反射机制(一)
- JAVA反射机制