Java反射机制(取得类的全部的属性)

来源:互联网 发布:spark sql python 编辑:程序博客网 时间:2024/05/22 04:52

       在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请搜索疯狂Java;

  getFields

  public Field[] getFields()

  throws SecurityException返回一个包含某些 Field 对象的数组,这些对象反映此Class对象所表示的类或接口的所有可访问公共字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果类或接口没有可访问的公共字段,或者表示一个数组类、一个基本类型或 void,则此方法返回长度为0 的数组。

  特别地,如果该 Class 对象表示一个类,则此方法返回该类及其所有超类的公共字段。如果该 Class 对象表示一个接口,则此方法返回该接口及其所有超接口的公共字段。

  该方法不反映数组类的隐式长度字段。用户代码应使用 Array 类的方法来操作数组。

  getDeclaredFields

  public Field[] getDeclaredFields()

  throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。

  具体实现代码实例:

  GetFieldsDemo01

  package org.lxh.demo.classdemo04;

  import java.lang.reflect.Field;

  import java.lang.reflect.Modifier;

  public class GetFieldsDemo01 {

  public static void main(String[] args)throws Exception {

  Class c =Class.forName("org.lxh.demo.classdemo04.Person");

  {

  /*Field f[] = c.getFields(); // 取得全部的变量 共有的属性,可以访问的属性

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

  String mod =Modifier.toString(f[i].getModifiers());

  System.out.print(mod + " ");

  System.out.print("属性名字是:"+f[i].getName()+" ");

  System.out.println(f[i].getType().getName());

  }*/

  }

  {

  Field f[] = c.getDeclaredFields(); // 取得全部的变量 不包括接口的属性

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

  String mod =Modifier.toString(f[i].getModifiers());

  System.out.print(mod + " ");

  System.out.print("属性名字是:"+f[i].getName()+" ");

  System.out.println(f[i].getType().getName());

  }

  }

  }

  }

  Person

  package org.lxh.demo.classdemo04;

  interface Info {

  public static final String AUTHOR ="MLDN";

  public String jiekou=null;

  public int shuzhi=0;

  public String getInfo();

  public String say(String name, Stringcontent);

  public void sayHello();

  }

  public class Person implements Info {

  private String name;

  private int age;

  public int phone;

  public String sex;

  public Person() {//无参构造方法

  }

  public Person(String name) {

  this.setName(name);

  }

  public Person(String name, int age) {

  this(name);

  this.setAge(age);

  }

  public String getInfo() {

  return "Hello World!!!";

  }

  public String say(String name, Stringcontent) {

  return name + "说了:" + content;

  }

  public void sayHello() {

  System.out.println("hello -->" + AUTHOR);

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public int getAge() {

  return age;

  }

  public void setAge(int age) {

  this.age = age;

  }

  public String toString() {

  return "姓名:" +this.name + ";年龄:" + this.age;

  }

  }

  疯狂Java培训的课程采用针对性培养,全面提升学员就业能力,重点加强训练职业素质。老师辛勤的讲解,让学员充分感受Java的魅力,充分激发每个学员对于编程的热爱,让学员在半年的时间内掌握8-10万的代码量,成为真正的技术高手,疯狂Java采用企业全真模拟开发训练,迅速积累项目经验。让学员迅速获得其他人需要花费两年才能获得的工作技能,无忧就业!

 

原创粉丝点击