zoukankan      html  css  js  c++  java
  • JAVA的反射机制

    反射

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

    获取类的三种方法(以Student类为例):

    1.Class c1=Class.forName("包名.Student");

    2.Class c2=Student.class;

    3.Student student=new Student();

       Class c3=student.getClass();

    常用:this.getClass();

    创建对象:

    //获取类

    Student student=new Stusdent();

    Class c1=student.getClass();

    //获取类以后,创建对象

    Object obj=c.newInstance();//调用了Student类的无参构造方法

    获取属性:分为所有属性和指定属性。

    getFields                getDeclaredFields

    返回的是申明为public的属性,包括父类中定义,     返回的是指定类定义的所有属性,不包括父类的。

    1.获取所有属性

    //获取类

    Class c2=Student.getClass();

    Field [ ] fields=c2.getDeclaredFields();

    //创建StringBuffer用来存储属性

    StringBuffer sb=new StringBuffer();

    for(Field field :fields){

    sb.append(Modifier.toString(c2.getModifiers())+"class"+c2.getSimpleName());//输出是修饰符名+class+类名:eg. public class Student

    sb.append(Modifier.toString(field.getModifiers()+""));//添加修饰符名

    sb.append(field.getType().getSimpleName());//添加属性类型名

    sb.append(field.getSimpleName());//添加属性名

    }

    2.获取指定属性:

    //获取类

    Class c2=Class.forName("包名.Student");

    //获取指定属性

    Field field=c2.getDeclareField("no");

    //先实例化对象,然后为属性赋值

    Object obj=c2.newInstance();

    //打破封装

     field.setAccessible(true); //使用反射机制可以打破封装性,导致了java对象的属性不安全。  

    field.set(obj,"2015110999");//obj为实例化之后的对象,2015110999为定义的属性值

    //获取o对象的field属性的值

    field.get(o);

    获取方法:分为普通方法和构造方法。

    方法名             含义

    getDeclaredMethods()        获取所有方法

    getReturnType()            获取方法的返回值类型

    getParameterTypes()         获取方法的传入参数类型

    getDeclaredMethod("方法名",参数类型.class)    获取特定的方法

    构造方法

    getDeclaredConstructors()            获取所有的构造方法

    getDeclaredConstructor(参数类型.class)      获取特定的构造方法

    父类和父接口

    getSuperClass()                 获取某类的父类

    getInterfaces()                  获取某类的父接口

  • 相关阅读:
    hihoCoder #1176 : 欧拉路·一 (简单)
    228 Summary Ranges 汇总区间
    227 Basic Calculator II 基本计算器II
    226 Invert Binary Tree 翻转二叉树
    225 Implement Stack using Queues 队列实现栈
    224 Basic Calculator 基本计算器
    223 Rectangle Area 矩形面积
    222 Count Complete Tree Nodes 完全二叉树的节点个数
    221 Maximal Square 最大正方形
    220 Contains Duplicate III 存在重复 III
  • 原文地址:https://www.cnblogs.com/cn-chy-com/p/7487240.html
Copyright © 2011-2022 走看看