zoukankan      html  css  js  c++  java
  • 反射基础知识

      动态代理在项目中应用的比较多,动态代理是依靠反射技术来实现的

         java中提供的反射机制是说在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。

    java反射的主要实现类:

        java.lang.Class:表示正在运行的java应用程序中的类和接口,提供得到Construtor、Field、Method的方法。

      //获取Class类对象  

      Class class1 = Person.class;  

      Class class2 = Class.forName("com.ls.Person");  

      Person person = new Person();  

      Class class3 = person.getClass();  

      //创建对象实例  

      Person person = (Person)Class.forName("com.ls.Person").newInstance();  

      java.lang.reflect.Field:提供关于类或接口的属性信息,以及对它的动态访问权限。

           

      //获取方法  

      Method method = Class.forName("com.ls.Person").getMethod("getName", null);  

      Method method2 = Class.forName("com.ls.Person").getMethod("setName", String.class);  

      System.out.println(method.invoke(Class.forName("com.ls.Person").newInstance(), null));  

      System.out.println(method2.invoke(Class.forName("com.ls.Person").newInstance(), "柳松"));  

      //获取属性  

      //返回此 Class 对象表示的类或接口的所有可访问公共字段  

      Field[] fields = Class.forName("com.ls.Person").getFields();  

      //返回 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段  

      Field[] fields2 = Class.forName("com.ls.Person").getDeclaredFields();  

      //返回 Class 对象所表示的类或接口的指定已声明字段  

      Field field3 = Class.forName("com.ls.Person").getDeclaredField("age");  

      //返回Class 对象所表示的类或接口的指定公共成员字段  

      Field field4 = Class.forName("com.ls.Person").getField("name");  

      for (int i = 0; i < fields.length; i++) {  

         System.out.println(fields[i].getName());  

      }  

      for (int i = 0; i < fields2.length; i++) {  

          System.out.println(fields2[i].getName());  

      }

      //启用和禁用访问安全检查的开关。默认为false。值为 true表示反射的对象在使用时应该取消 Java 语言访问检查  

      field3.setAccessible(true);  

      System.out.println(field3.get(person));  

      System.out.println(field4.get(person));  

  • 相关阅读:
    android 通过canvas旋转 绘制文字 竖直等不同方向的显示
    [转]在.NET环境中实现每日构建(Daily Build)NAnt篇
    [转]如何让Android字体自适应屏幕分辨率
    [转]调用相机并将照片存储到sd卡上
    [转]在.NET环境中实现每日构建(Daily Build)ccnet,MSBuild篇
    [转]使用ANT打包Android应用
    [转]通过创建一个位图的XY Chart来学习Android绘图类Rect,Paint,Bitmap,Canvas(附源码)
    [转]android webview学习
    [转]敏捷开发中编写高质量Java代码
    MSDN Visual C++ 开发中心
  • 原文地址:https://www.cnblogs.com/zhaoleigege/p/7591796.html
Copyright © 2011-2022 走看看