简述java反射机制,java中的反射机制使用

  简述java反射机制,java中的反射机制使用

  本文通过java编程入门专栏详细介绍了java中的反射机制,希望能帮助到对这一机制一无所知的同学。

  java反射

  在机制的运行状态下,可以知道任何类的所有属性和方法(包括私有的);对于任何对象,都可以调用它的任何方法和属性;这种动态获取信息,动态调用对象方法的功能被称为Java反射机制。

  用途:

  确定任何对象在运行时所属的类。

  在运行时构造任何类的对象。

  在运行时判断任何类的成员变量和方法。

  在运行时调用任何对象的方法。

  生成动态代理。

  反射相关的类

  如何解决写爬虫IP受阻的问题?立即使用。

  class类

  通常有三种方法可以在Java程序中获得类对象:

  1.使用类的forName(String clazzName)的静态方法。此方法需要一个字符串参数,其值是类的完全限定名(必须添加完整的包名)。

  2.调用某个类的Class属性,获取该类对应的类对象。

  3.调用对象的getClass()方法。该方法是java.lang.Object类中的方法。

  Field

  field[]all fields=class 2 . getdeclaredfields();//获取类对象的所有属性

  field[]public fields=class 2 . get fields();//获取类对象的公共属性

  field age field=class 2 . getdeclaredfield( age );//获取class指定的属性,可以获取私有属性。

  field des field=class 2 . getfield( des );//获取类指定的公共属性Method

  method[]methods=class 2 . getdeclaredmethods();//获取类对象的所有声明方法

  method[]all methods=class 2 . get methods();//获取类对象的所有公共方法,包括父类的方法

  method method=class 2 . get method( info ,string . class);//返回带有指定参数列表的二级类对象对应类的公共方法。

  method declared method=class 2 . getdeclaredmethod( info ,string . class);//返回,

  用参数列表Constructor指定方法

  建造师?[]all constructors=class 2 . getdeclaredconstructors();//获取类对象的所有声明的构造函数

  建造师?[]public constructors=class 2 . get constructors();//获取类对象的公共构造函数

  建造师?constructor=class 2 . getdeclaredconstructor(string . class);//获取指定声明的构造函数

  构造函数public constructor=class 2 . get constructor(string . class);//获取指定声明的公共构造函数通过反射 生成实例对象

  1.使用类对象的newInstance()方法创建类对象的相应类的实例。这个方法要求类对象对应的类有一个默认的构造函数,在执行newInstance()方法时,默认的构造函数实际上是用来创建类的一个实例。

  2.先用Class对象获取指定的Constructor对象,然后调用Constructor对象的newInstance()方法创建Class对象对应类的实例。这样,您可以选择使用指定的构造函数来创建实例。

  调用方法

  1.通过类对象的getMethods()方法或getMethod()方法获取指定的方法,返回方法数组或对象。

  2.调用方法对象中的ObjectInvoke (Objectobj,object … args)方法。第一个参数对应于调用此方法的实例对象,第二个参数对应于此方法的参数。

  示例代码:

  反射是什么?

  包am;

  导入Java . lang . reflect . constructor;

  导入Java . lang . reflect . field;

  导入Java . lang . reflect . method;

  导入Java . util . arrays;

  导入javax . activation . file data source;

  /**

  *反射是什么:

  * Java中的反射:即在类加载的过程中,发现类属性、方法构造方法等信息。您可以获取类的属性值并调用类的方法。

  *

  *

  * Reflect获取该类的对象。

  *

  */

  公共类演示01 {

  公共静态void main(String[] args)引发异常{

  //通过反射获取类的对象。

  Object obj=create(am。foo’);

  Foo Foo=(Foo)obj;

  system . out . println(foo . a);

  double dou=foo.show(12,你好);

  system . out . println(dou);

  系统。出去。println(============================);

  //获得类的属性

  showField(obj);

  系统。出去。println(============================);

  double a=(double)get field value(obj, b );

  系统。出去。println(a);

  系统。出去。println(============================);

  //通过反射调用方法。

  Object ob=getMethodValue(obj, show ,new Class[]{int.class,String.class},new Object[]{23, ABC });

  double dou值=(double)ob;

  系统。出去。println(dou值);

  }

  //通过反射调用方法,哪个对象,什么名称,参数类型,参数值

  公共静态对象getMethodValue(对象对象,字符串方法,类[]参数类型,对象[]参数)

  引发异常{

  class cla=obj。getclass();

  方法me=cla。getdeclaredmethod(方法,参数类型);

  Object o=me.invoke(obj,param);

  返回o;

  }

  //获取类的属性值:

  公共静态对象获取字段值(对象对象,字符串名称)引发异常{

  class cla=obj。getclass();//获取字节码对象。

  field field=cla。getdeclaredfield(名称);//通过属性的名称。获取当前属性。

  对象结果=字段。get(obj);

  返回结果;

  }

  //通过反射,可以获得类的属性信息以及方法信息。

  公共静态void showField(对象对象){

  //java中对属性类100 .字段方法类:方法

  class cla=obj。getclass();

  System.out.println(获取类名:中情局。getname());

  系统。出去。println(============================);

  //获取类的属性:

  字段[]字段=cla。getdeclaredfields();//获取公开的属性。

  对于(字段字段:字段){

  System.out.println(获取类的属性类型字段。gettype());

  System.out.println(获取类的属性名称:字段。getname());

  }

  系统。出去。println(============================);

  //获取类的方法。

  方法[]方法=cla。getdeclaredmethods();

  对于(方法方法:方法){

  System.out.println(获取方法的返回值类型:方法。get returntype());

  System.out.println(获取方法名称:方法。getname());

  System.out.println(获取方法的参数类型数组。tostring(方法。getparametertypes()));

  }

  系统。出去。println(============================);

  //获取类的构造方法:

  构造函数[]cons=cla。getdeclaredconstructors();

  对于(构造函数利弊){

  System.out.println(构造方法的名字: con . getname());

  System.out.println(构造方法参数类型:数组。tostring(con . getparametertypes()));

  }

  }

  //如何反射类的实例。

  公共静态对象创建(字符串名称)引发异常{

  //反射的方法班级。forname();

  class cla=class。forname(姓名);

  //如何获得目标类型对象。

  object obj=cla。新实例();

  返回目标文件

  }

  }

  //模拟类。

  富(中国姓氏)类

  int a=10

  双b=20

  public double show(int p,String str){

  System.out.println(调用方法传入的值是: str);

  返回一个b p;

  }

  公共Foo(){

  }

  public Foo(int a,int b){

  }

  }更多相关学习视频推荐:java视频教程以上就是对于爪哇岛反射机制的详细介绍的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: