博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java反射基础
阅读量:4501 次
发布时间:2019-06-08

本文共 2223 字,大约阅读时间需要 7 分钟。

转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?opt=1 最近在接触到框架的底层的时候,遇到了反射,便想好好的学习和总结一下反射,帮助理解java框架的 运行流程和运行原理: 根据万物皆对象,所以类也是对象,通过反射得到描述类的对象,也就是这个类。有三种方法得到: 类名.; 实例.get; Class.forName(全类名); 得到描述类的类后,就可以通过类里面的方法,字段和注解。 在java编程中,使用的框架大多对底层进行了封装,在进行编程的过程中,如何调用底层封装好的类,属性或 方法,基本都是通过反射或代理的方式进行获取,其底层的原理都是通过反射进行操作的。 如果有这么一个类: package com.test; public class Test {
    public void sayHi(String name)     {
        System.out.println("Hi "+name);     } } 可以编写另外一个类来反射调用Test类的方法: package com.test; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Class {
    public static void main(String[] args) {
         String [] names ={"tom","tim","allen","alice"};             java.lang.Class
clazz = Test.class;             try             {
                Method method = clazz.getMethod("sayHi", String.class);                 for(String name:names)                     method.invoke(clazz.newInstance(),name);             } catch (NoSuchMethodException e)             {
                e.printStackTrace();             } catch (IllegalAccessException e)             {
                e.printStackTrace();             } catch (IllegalArgumentException e)             {
                e.printStackTrace();             } catch (InvocationTargetException e)             {
                e.printStackTrace();             } catch (InstantiationException e)             {
                e.printStackTrace();             }     } } 的反射是指,可以通过一个类名来探察这个类里面的信息,比如说类的属性名,属性名的修饰符,方法名, 方法返回值,方法修饰符等等,反正除了方法体得不到,其他都可以用反射得到;反射还可以生成类的实例, 通过这个实例定义属性,调用方法,特别是能调用私有的属性和私有的方法 import .lang.reflect.*; public class ReflectionTest {
public static void main(String[] args) {
try {
Class c=Class.forName(".util.HashSet"); Object o=c.newInstance(); [] s=c.getDeclareds(); for(Method method:methods){
System.out.println(method); } Method m1=c.getMethod("add", Object.class); m1.invoke(o, "cyq"); m1.invoke(o, "hello"); m1.invoke(o, "java"); System.out.println(o); } catch (Exception e) {
e.printStackTrace(); } } } 这是一个简单的反射例子,就是得到HashSet中的所有申明的方法,生成一个HashSet的实例,然后往里面添加对象

转载于:https://www.cnblogs.com/zjdxr-up/p/6619094.html

你可能感兴趣的文章
ArrayList删除特定元素的方法
查看>>
android 开发 View _15 导入一张图片将它裁剪成圆形 与 paint图层叠加处理详解
查看>>
地图大集合
查看>>
unity资源(移动版)提取 一点尝试
查看>>
简谈游戏场景灯光配置方案
查看>>
性能测试知识
查看>>
mybaitis配置信息
查看>>
使用shiro安全框架上传文件时用HttpSession获取ServletContext为null问题解决方法。
查看>>
史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)...
查看>>
数据可视化视频制作
查看>>
mysql 数据备份。pymysql模块
查看>>
FactoryMethod模式——设计模式学习
查看>>
Android中 AsyncTask
查看>>
原码、反码、补码和移码
查看>>
SQL存储过程与函数的区别
查看>>
vue项目配置使用flow类型检查
查看>>
@Resource和@Autowired区别
查看>>
VS2010打开就自动关闭问题解决
查看>>
python webdriver 测试框架-数据驱动txt文件驱动,带报告的例子
查看>>
动态代理相对于静态代理的优势
查看>>