疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java反射机制


 

        在做工具的时候遇到了一些问题,比如如何得到某个类的的实例,如何得到某个类里面所有的变量及这些变量的类型。java反射机制是个好东西,用这种机制就可以轻松解决这些问题。

  首先怎么根据一个类的名字得到一个类的实例,注意是用类的名字的时候一定要用全名,比如在一个com.test包中有一个类Student,但是你不能认为这个类的名字叫做Student,这里这个类的名字全称应为com.test.Student。好,说了这些之后我们说一下具体怎么操作。

  Class是java.lang包中java反射机制类大家族中的一个类,用Class.forName()方法可以得到一个类的实例。比如上一段中的Student类,我们可以这样得到。

  [java] view plaincopyprint?

  package test;

  public class Test

  {

  public static void main(String[] args)

  {

  try

  {

  Object object = Class.forName("com.test.Student").newInstance();

  Student student = (Student) object;

  }

  catch (ClassNotFoundException e)

  {

  System.out.println("未找到类com.test.Student");

  e.printStackTrace();

  }

  catch (ClassCastException e)

  {

  System.out.println("类型转换失败");

  e.printStackTrace();

  }

  catch (InstantiationException e)

  {

  e.printStackTrace();

  }

  catch (IllegalAccessException e)

  {

  e.printStackTrace();

  }

  }

  }

  关于第二个问题,我们可以是用类的getClass().getDeclaredFields()方法得到所有的声明的变量放到一个java.lang.reflect.Field fields[]数组中,我们可以通过调用Field类的getName()方法得到这个变量的名字,用个fields[i].getType()可以得到第i个变量的数据类型,假如我们声明的变量数据类型为int,则getType()方法得到的类型是int,假如我们声明的变量是Date则我们得到的getType类型为class java.util.Date。下面我们用代码来具体实现一下。

  [java] view plaincopyprint?

  package test;

  public class Test

  {

  public static void main(String[] args)

  {

  TestClass test = new TestClass();

  java.lang.reflect.Field fields[] = test.getClass().getDeclaredFields();

  for (int i = 0; i < fields.length; i++)

  {

  System.out.println(fields[i].getName() + ":" + fields[i].getType());

  }

  }

  }

  然而,大学生刚从学校出来,如何积累工作经验呢?面对这一矛盾,疯狂Java培训,全面帮助学员们在提升技能的同时,同时帮助他们增加工作经验。很多学员在参加疯狂Java培训课程后,就业能力得到了企业的认可。如需了解更多,

  抢座热线:020-28309358,020-28309378

  咨询QQ:707552864,544627560

  请登陆疯狂软件学院官网http://www.fkjava.org/

  疯狂软件学院地址:广州市天河区车陂大岗路4号沣宏大厦3楼