zoukankan      html  css  js  c++  java
  • java反射机制出浅读

    定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。(在运行状态中,能够知道任意类的属性和方法,同时能够调用任意类的属性和方法)

    作用:
      在运行时判断任意一个对象所属的类;
      在运行时构造任意一个类的对象;
      在运行时判断任意一个类所具有的成员变量和方法;
      在运行时调用任意一个对象的方法;
      生成动态代理。

    方法:

     

    一:得到一个对象的完整包名和类名
    调用Class的getName()
    例:
    TestClass c = new TestClass() ;
    System.out.println("-----------"+c.getClass().getName());
    二:实例化Class:
    1.运用getClass(),每个类都有getClass()
    Class c3 = new TestClass().getClass() ;
    2.类.class
    Class c1 = TestClass.class ;
    3.Class.forName("全路径类名")
    Class c2 = Class.forName("cn.com.prac.test.TestClass") ;
    三:获取一个对象的父类与实现接口
    父类:Class对象.getSuperClass().getName()
    实现接口:Class.getSuperClass().getInterfaces()
    四:为某个类的属性或构造方法赋值
    Class.newInstance():得到某个Class具体的对象实例
    Class.getConstructors():得到某个Class的所有构造方法
    Class c = Class.forName("cn.com.prac.pojo.Student") ;
    Student s = (Student) c.newInstance() ;
    s.setAddress("重庆");
    s.setAge(20);
    s.setId("5");
    s.setName("李四");
    //得到所有构造方法
    Constructor[] con = c.getConstructors() ;
    Student s1 = (Student)con[0].newInstance() ;
    Student s2 = (Student)con[1].newInstance("6",10,"张三","重庆") ;

    System.out.println("----------"+s2.getAddress()+"---"+s2.getId()+"----"+s2.getName()+"---"+s2.getAge());
    五:得到某个对象的所有属性
    Class c = Class.forName("cn.com.prac.pojo.Student") ;
    Field[] fs = c.getDeclaredFields() ;
    for (Field field : fs) {
    System.out.println("---------"+field.getName()+"---"+field.getType().getName());
    }
    六:得到某个对象的所有方法
    Class.getMethods() ;

    使用场景:如:工厂方法

      

  • 相关阅读:
    java 数据结构(八):Iterator接口与foreach循环
    java 数据结构(七):Collection接口
    java 数据结构(六):数组与集合
    java中equals(),hashcode()和==的区别
    Android中的IPC方式
    Android-如何防止apk被反编译
    Android-管理应用的内存(转)
    102. Binary Tree Level Order Traversal
    对于开发团队管理的理解
    TCP三次握手和四次挥手的全过程
  • 原文地址:https://www.cnblogs.com/-scl/p/7498085.html
Copyright © 2011-2022 走看看