Java反射机制
来源:互联网 发布:linux sz 下载目录 编辑:程序博客网 时间:2024/04/29 05:31
一:Class对象的机制与实现
新建两个Java文件
1、Book.java
package com.cc.reflection;public class Book {private int id;private String name;private String type;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getType() {return type;}public void setType(String type) {this.type = type;}}
2、Test.java
package com.cc.reflection;public class Test {public static void main(String[] args) {// 三种获取类对象的方法Class demo1 = null;Class demo2 = null;Class demo3 = null;// 通过class的静态forName方法try {demo1 = Class.forName("com.cc.reflection");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(demo1);// 通过类的实例化对象来获取类Book book = new Book();Object object = book;System.out.println(object.getClass());// 直接利用类名获取对象demo3 = Book.class;System.out.println(demo3);// 通过类对象来获取一个对象try {Book bo1 = (Book) demo3.newInstance();System.out.println("实例化后的对象" + bo1);} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
运行结果:
二、Filed对象的机制与实现
Java.lang.reflect.Field,是用于表示类中,接口中属性对象的类
可以操作类中私有,以及公有等全部属性和属性的信息
新建FieldTest.java
package com.cc.reflection;import java.lang.reflect.Field;import org.apache.jasper.tagplugins.jstl.core.ForEach;public class FieldTest {//该方法用于使用传递过来的Class对象·获取类中的属性public void show(Class class1){ //getDeclaredField和getField的方法区别在于,可以将私有属性获取到,而后者只能获得公有属性Field[] fi=class1.getDeclaredFields();for(Field ff:fi){System.out.println(ff.getName());System.out.println(ff.getType());}//使用另外一种方式获取类中的属性Field[] fi1=class1.getFields();for(Field ff:fi1){System.out.println(ff.getName());System.out.println(ff.getType());}}//该方法用于使用传递过来的实体类对象获取属性以及属性的值public void show (Object obj){Class class1=obj.getClass();Field[] fields=class1.getDeclaredFields();for(Field ff : fields){try {//需要设置访问权限,要不然无法访问ff.setAccessible(true);System.out.println(ff.getName()+"值"+ff.get(obj));} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static void main(String[] args){Book bo=new Book();bo.setId(1);bo.setName("什么鬼");bo.setType("科幻");FieldTest fTest=new FieldTest();fTest.show(Book.class);fTest.show(bo);}}
运行结果
三、Method对象的机制与实现
可以操作类中私有公有等全部方法
MethodTest.java
package com.cc.reflection;import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class MethodTest {//该方法用于获取对象的所有方法名称,返回类型,以及参数信息public void show(Object obj){Class class1=obj.getClass();Method[] me =class1.getDeclaredMethods();for(Method mm:me){System.out.println("方法名称"+mm.getName());System.out.println("方法修饰符"+Modifier.toString(mm.getModifiers()));System.out.println("方法返回值"+mm.getReturnType());Class[] preType=mm.getParameterTypes(); System.out.println("方法参数列表");for(Class class2:preType ){System.out.println(class2.getName());}}}//该方法用于使用传递过来的实体对象,获取其中的方法并调用public void showUse(Object obj){Class class1=obj.getClass();try {Method method=class1.getMethod("getName", null);//对获取的方法进行调用method.invoke(obj, new Object[0]); //method.invoke的第二个参数是object的一个数组Method method1=class1.getMethod("setName", String.class);//对获取的方法进行调用method1.invoke(obj, "西游记"); //method.invoke的第二个参数是object的一个数组} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args){Book book=new Book();book.setId(1);book.setName("盛开的滑稽");book.setType("惊悚");MethodTest mTest=new MethodTest();//mTest.show(book);mTest.showUse(book);System.out.println(book.getName());}}
运行结果
0 0
- 【反射】JAVA反射机制
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- java的反射机制
- Java的反射机制
- java反射机制详解!
- Java反射机制
- Java的反射机制
- java 反射机制--侯捷
- java反射机制
- java反射机制
- [候捷]Java反射机制
- java 反射机制
- java 反射机制初探
- 关于Java反射机制
- java反射机制
- 获取SHA1
- MySQL基础操作
- 深入理解java异常处理机制
- SpringMVC入门之四:接收请求的输入
- EPSON晶振在电路设计中的接地问题分析解决
- Java反射机制
- 平和的心态
- ubuntu下修改apt-get更新源
- ubuntu下源码安装apache2和php7
- JAVA中创建对象的四种方式
- JAVA中static关键字的解读
- Arduino简单实例之七_红外遥控接收
- android studio 无法debug
- Android中Mock以及Mockito的使用