java 反射机制
2015-07-21 10:38
513 查看
通过反射机制,取得类的实例化对象
package com.cn.gaoyan; class Person{ @Override public String toString(){ return "Hello"; } } public class TestDemo { public static void main(String args[]){ Class<?> demo1 = null; Class<?> demo2 = null; Class<?> demo3 = null; //取得类的实例化对象,方法1 Person per = new Person(); demo1 = per.getClass(); //取得类的实例化对象,方法2 demo2 = Person.class; //取得类的实例化对象,方法3 try { demo3 = Class.forName("com.cn.gaoyan.Person"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("demo1"+ demo1.getName()); System.out.println("demo2"+ demo2.getName()); System.out.println("demo3" + demo3.getName()); //通过反射实例化对象 Object obj = null; try { obj = demo1.newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } Person per1 = (Person)obj; System.out.println(per1); } }
输出:
demo1com.cn.gaoyan.Persondemo2com.cn.gaoyan.Persondemo3com.cn.gaoyan.PersonHello将反射运用于工厂模式
package com.cn.gao;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;interface Fruit{public void eat();}class Apple implements Fruit{public Apple(){}@Overridepublic void eat() {// TODO Auto-generated method stubSystem.out.println("eat apple");}}class Orange implements Fruit{@Overridepublic void eat() {// TODO Auto-generated method stubSystem.out.println("eat orange");}}class Factory {public static Fruit getInstance(String className){Fruit f = null;try {f = (Fruit)Class.forName(className).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return f;}}public class DemoFactory {public static void main(String args[]){Fruit f = (Fruit)Factory.getInstance("com.cn.gao.Apple");//取得该对象的构造函数System.out.println("**********取得该对象的构造函数");Constructor<?>[] cls = f.getClass().getConstructors();for(int i = 0; i < cls.length; i++){System.out.println(cls[i]);}//取得该对象所在类实现的接口System.out.println("**********取得该对象所在类实现的接口");Class<?> cls1[] = f.getClass().getInterfaces();for(int i = 0; i < cls1.length; i++){System.out.println(cls1[i]);}//取得该对象的普通方法System.out.println("**********取得该对象的普通方法");Method getMethod = null;try {getMethod = f.getClass().getMethod("eat");} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(getMethod);//通过反射机制调用该类的普通方法System.out.println("**********通过反射机制调用该类的普通方法");try {getMethod.invoke(f, null);} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("**********调用该类的普通方法");f.eat();}}
输出:
**********取得该对象的构造函数public com.cn.gao.Apple()**********取得该对象所在类实现的接口interface com.cn.gao.Fruit**********取得该对象的普通方法public void com.cn.gao.Apple.eat()**********通过反射机制调用该类的普通方法eat apple**********调用该类的普通方法eat apple
相关文章推荐
- 解决Maven工程中报 Missing artifact jdk.tools:jdk.tools
- java中keytool生成的jks证书转换为openssl格式证书
- Java-发送邮件(附件、图片)---(四)类-MimeMultipart、MimeBodyPart、FileDataSource、DataHandler、
- Java中Runnable和Thread的区别
- FineReport搭建物流报表平台的解决方案
- spring BeanFactoryPostProcessor PathMatchingResourcePatternResolver
- 二叉查找树 图文解析 和 Java的实现
- Spring的设计模式
- Java并发
- 2015暑假复习——java
- java中十进制转二进制转换函数
- Java-发送邮件(附件、图片)---(三)类-Properties、Session、MimeMessage
- RabbitMQ第一篇——初识RabbitMQ,简单的消息发送和接收
- java 解决中文乱码
- Java面试-Struts2
- Java_getProperties以记之
- loadrunner java vuser——我的测试记录
- ROS进阶学习手记 5 -- 使用Eclipse开发robot_cleaner
- JAVA先进-设置(1)
- CXF集成Spring实现webservice的发布与请求