19Java语法回顾之反射
来源:互联网 发布:行业大盘数据分析 编辑:程序博客网 时间:2024/06/06 16:50
Java语法回顾之反射
读了那么多年的书让我明白一个道理。人要稳重,不要想到啥就做啥。做一行越久即使你不会,几年之后慢慢的你也会了,加上一点努力你或许你能成为别人眼中的专家。
反射获取字节码文件
/* * 反射:在运行状态下,通过class文件对象(Class的对象),去使用构造方法,成员变量,成员方法。 * * 那么,我们是如何获取到class文件对象的呢?(字节码文件对象) * A:Object类的getClass()方法。 * B:数据类型的静态的class属性 * C:通过Class类的静态方法forName(String className) * * 到底使用哪一种呢? * 开发中用第三种。自己写例子测试可以使用前两种。 * 因为第三种方式可以结合配置文件使用。 */
反射获取字节码文件
/** * 通过反射获取字节码文件 */public class MyReflect { public static void main(String[] args) throws ClassNotFoundException { MyPerson my = new MyPerson(); Class<? extends MyPerson> myClass = my.getClass(); MyPerson mp = new MyPerson(); Class<? extends MyPerson> aClass = mp.getClass(); System.out.println(myClass.equals(aClass));//true Class<MyPerson> myPersonClass = MyPerson.class; System.out.println(aClass==myPersonClass);//true //第三种,开发时使用的方式 Class aClass1 = Class.forName("cn.itcast_01.MyPerson"); System.out.println(myPersonClass==aClass1);//true }}
通过反射获取构造方法
/** * 反射获取构造方法并使用。 * <p/> * 构造方法 Constructor * 成员变量 Field * 成员方法 Method */public class MyReflect { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { Class<?> aClass = Class.forName("cn.itcast_01.MyPerson"); //获取构造器对象 // 一般我们创建对象,只要一个构造方法就可以了,所以,我们只需要获取一个构造方法即可。 Constructor<?> constructor = aClass.getConstructor(); //带参构造方法 Constructor<?> constructor2 = aClass.getConstructor(int.class,String.class); //通过Constructor创建实例对象 Object o = constructor.newInstance(); Object hsia = constructor2.newInstance(23, "Hsia"); System.out.println("无参构造"+o); System.out.println("带参构造"+hsia); System.out.println("*******************"); }}
反射获取成员变量并使用
/** * 获取私有成员变量并使用 */public class MyReflectField { public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { //获取字节码文件 Class<?> c = Class.forName("cn.itcast_01.MyPerson"); //创建对象 Constructor<?> constructor = c.getConstructor(); Object obj = constructor.newInstance(); //没有设置值之前的obj对象 System.out.println("初始化前的值:" + obj); //获取共有字段名称 Field age = c.getField("age"); //给共有字段设置值 age.set(obj, 23); //获取私有字段 Field name = c.getDeclaredField("name"); //暴力访问 name.setAccessible(true);//不要限制我。 name.set(obj, "Hsia");//报错 java.lang.IllegalAccessException: //设置值后的对象 System.out.println("初始化后的值:" + obj); }}
反射获取成员方法并使用
/** * 获取成员方法并使用。 */public class MyReflect { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { //获取字节码文件 Class<?> c = Class.forName("cn.itcast_01.MyPerson"); //创建对象 Constructor<?> constructor = c.getConstructor(); Object obj = constructor.newInstance(); //1.获取成员方法 无参无返回值 Method show = c.getMethod("show"); show.invoke(obj,null); System.out.println("——————————————————"); //2.获取成员方法 带参无返回值 Method function = c.getMethod("function",String.class); function.invoke(obj,"Hsia"); System.out.println("——————————————————"); //3.获取成员方法 带参有返回值 Method reutrnValue = c.getMethod("reutrnValue", String.class, int.class); //return 的返回值 Object hsia = reutrnValue.invoke(obj, "Hsia", 23); System.out.println(hsia); System.out.println("——————————————————"); //4.获取私有成员方法 Method helloworld = c.getDeclaredMethod("hello"); //设置暴力访问 helloworld.setAccessible(true); helloworld.invoke(obj,null); }}
0 0
- 19Java语法回顾之反射
- Java回顾之反射
- java之反射(回顾)
- 05Java语法回顾_collection之arraylist
- 07Java语法回顾collection之linklist
- 10Java语法回顾之异常处理
- 11Java语法回顾之io流
- 12Java语法回顾之递归
- 13Java语法回顾之filewriter&&filereader
- 18Java语法回顾之网络编程
- 20Java语法回顾之设计模式
- java 反射回顾
- java反射回顾<一>
- java反射回顾<二>
- java反射回顾<三>
- java反射回顾<四>
- 02java语法回顾_常用api类之stringbuffer
- 08Java语法回顾collection之set集合
- 使用Struts2验证框架实现输入校验
- 如何用消息系统避免分布式事务?
- Java虚拟机参数设置问题
- jquery.cookie.js用法实例详解
- tomcat中catalina是什么
- 19Java语法回顾之反射
- Redis 横向扩展案例
- Hadoop YARN学习监控JVM和实时监控Ganglia、Ambari(5)
- 《剑指offer》——两个链表的第一个公共结点
- unity 中抗锯齿设置
- Leetcode 326. Power of Three
- 如何利用fsolve求方程组[matlab]
- 介绍两个分布式数据库开源系统
- JAVA Exception 处理