• 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()                  获取某类的父接口

  • 相关阅读:
    【css基础修炼之路】— 谈谈元素的垂直水平居中
    git在linux安装步骤详解!!
    idea :不支持发行版本11问题
    centos7 升级gcc
    mysql--优化
    Docker安装
    使用idea从零编写SpringCloud项目-zuul
    使用idea从零编写SpringCloud项目-Hystrix
    使用idea从零编写SpringCloud项目-Feign
    使用idea从零编写SpringCloud项目-Ribbo
  • 原文地址:https://www.cnblogs.com/cn-chy-com/p/7487240.html
Copyright © 2020-2023  润新知