• java进阶三:反射


    1、得到各个字节码对应的实例对象(Class类型)的三种方式,示例如下:

      类名.class,比如,System.class

      对象.getClass(),比如,new Date().getClass()

      Class.forName("类名"),比如,Class.forName("java.util.Date")

    2、Constructor类的使用,Constructor类代表某个类中的一个构造方法

      得到某个类所有的构造方法:

        Constructor[] constructors=Class.forName("java.lang.String").getConstructors();

      得到某一个构造方法:

        Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);

      创建实例对象:

        普通方式:

        String str=new String(new StringBuffer("abc"));

        使用反射:

        Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);
                String str1=(String) constructor.newInstance(new StringBuffer("abc"));

    直接使用Class.newInstance()方法:

      String str2=(String)Class.forName("java.lang.String").newInstance();

      该方法内部是先得到默认的构造方法,然后用该构造方法创建对象实例

    3、Field类代表某个类中的一个成员变量,使用方法如下:

    class Point{
        public int x;
        private int y;
        public Point() {}
        public Point(int x,int y){
            this.x=x;
            this.y=y;
        }
    }
    
    public class Demo01 {
        public static void main(String[] args) throws Exception {
            Point point=new Point(1,2);
            Field xField=Class.forName("com.ly.java.enhance.reflection.Point").getField("x");
            System.out.println(xField.get(point));
         //得到私有属性 Field yField
    =Class.forName("com.ly.java.enhance.reflection.Point").getDeclaredField("y"); yField.setAccessible(true); System.out.println(yField.get(point)); } }

    4、Method类代表某个类中的一个成员方法,使用方法如下:

      得到类中的某一个方法:

        Method charAt=Class.forName("java.lang.String").getMethod("charAt", int.class);

      调用类中的某一个方法:

        String str="abc";

        普通方式:System.out.println(str.charAt(1));

        使用反射:

        Method charAt=Class.forName("java.lang.String").getMethod("charAt", int.class);
             System.out.println(charAt.invoke(str, 1));

        

      

      

  • 相关阅读:
    乐观锁和悲观锁
    [转载] Java实现生产者消费者问题
    [转载] 最全最强解析:支付宝系统架构内部剖析(架构图)
    [转载] Linux五种IO模型
    [转载] Hibernate与 MyBatis的比较
    Spring的69个知识点
    Spring MVC工作原理
    你不知道的JS系列 ( 12 ) - 声明提升
    你不知道的JS系列 ( 11 ) - 块作用域
    你不知道的JS系列 ( 10 ) - 立即执行函数表达式
  • 原文地址:https://www.cnblogs.com/hypnus-ly/p/8460555.html
Copyright © 2020-2023  润新知