Java反射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java反射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2909字,纯文字阅读大概需要5分钟。
内容图文
![Java反射](/upload/InfoBanner/zyjiaocheng/1329/98b8c759680f489ba804de7a3cd308b2.jpg)
通过反射获得对象的方法
准备工作:
有一个User类如下
1 package o1; 2 3 /** 4 * Created by yesiming on 16-11-19. 5 */ 6 public class User { 7 private int id; 8 private String name 9 10 // 无参构造方法 11 public User() { 12 System.out.println("new Instance() 1"); 13 } 14// 有参构造方法15public User(int id, String name) { 16 System.out.println(id + ":" + name + ":new Instance() 2"); 17 } 18// get set 省略19 }
下面写得到User对象的几种方法:
1 package o1; 2 3 import org.junit.Test; 4 5 import java.io.File; 6 import java.lang.reflect.*; 7import java.lang.reflect.InvocationTargetException; 8import java.net.URI; 9import java.net.URL; 1011/**12 * Created by yesiming on 16-11-19. 13*/14publicclass MainTest { 1516 @Test 17publicvoid getClazz() { 18 Class clazz = User.class; // 得到User的类描述19 System.out.println(clazz.toString()); 20 } 2122 @Test 23publicvoid getClazz1() { 24 Class clazz = User.class; 25try { 26 Object obj = clazz.newInstance(); // 通过类描述的newInstance()方法可以得到该类的对象(内部会调用无参构造方法)27 System.out.println(obj.toString()); 28 } catch (Exception e) { 2930 } finally { 31 } 32 } 3334 @Test 35publicvoid getClazz2() { 36 Class clazz = User.class; 37try { 38// 通过类描述的getDeclaredConstructor(Class... clazz)方法得到对应的构造函数39 Constructor constructor = clazz.getDeclaredConstructor(int.class, String.class); 40// 通过对应的构造函数的newInstance(xxx, xxx)方法得到类对象41 Object obj = constructor.newInstance(1, "iming"); // 通过42 System.out.println(obj.toString()); 43 } catch (InstantiationException e) { 44 e.printStackTrace(); 45 } catch (IllegalAccessException e) { 46 e.printStackTrace(); 47 } catch (InvocationTargetException e) { 48 e.printStackTrace(); 49 } catch (NoSuchMethodException e) { 50 e.printStackTrace(); 51 } 52 } 5354/**55 * 通过getMethod(String methodName)得到方法描述符 56 * 通过方法描述符的invode(类描述符 xxx )方法,执行该方法 57*/58 @Test 59publicvoid getMethod() throws Exception { 60 Class clazz = User.class; 61 Constructor constructor = clazz.getDeclaredConstructor(int.class, String.class); 62 Object obj = constructor.newInstance(1, "yesiming"); 63 Method m = clazz.getMethod("setName", String.class); 64 m.invoke(obj, "Haha"); 6566 Method m2 = clazz.getMethod("getName"); 67 Object obj1 = m2.invoke(obj); 68 System.out.println(obj1.toString()); 69 } 7071/**72 * 得到指定包名下所有的类 73*/74 @Test 75publicvoid getClasses() throws Exception { 76 Class clazz = User.class; 77 ClassLoader loader = clazz.getClassLoader(); 78// 1. 通过classloader载入包路径,得到url79 URL url = loader.getResource("o1/o1_a"); 80 URI uri = url.toURI(); 81// 2. 通过File获得uri下的所有文件82 File file = new File(uri); 83 File[] files = file.listFiles(); 84for (File f : files) { 85 String fName = f.getName(); 86if (!fName.endsWith(".class")) { 87continue; 88 } 89 fName = fName.substring(0, fName.length() - 6); 90 String perfix = "o1.o1_a."; 91 String allName = perfix + fName; 92// 3. 通过反射加载类93 clazz = Class.forName(allName); 94 System.out.println(clazz); 95 } 96 } 9798 }
原文:http://www.cnblogs.com/simiie/p/6081751.html
内容总结
以上是互联网集市为您收集整理的Java反射全部内容,希望文章能够帮你解决Java反射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。