获取类的字节码的Class对象。

Posted morefreedomofselfdiscipine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取类的字节码的Class对象。相关的知识,希望对你有一定的参考价值。

获取类的字节码的Class对象。

以Person类为例:

技术图片
public class Person {
    private String name;
    private int age;
    public String a;
    protected int b;
    int c;
    private int d;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Person() {
    }
    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 void  eat(String str){
        System.out.println(str);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name=‘" + name + ‘‘‘ +
                ", age=" + age +
                ", a=‘" + a + ‘‘‘ +
                ", b=" + b +
                ", c=" + c +
                ", d=" + d +
                ‘}‘;
    }
}
Person类

1.格式:Class  类名称+Class(如personClass)=类名称.class.

例:Class  personClass=Person.class.

2.获取类的构造函数。

  • 获取有参构造器:Constructor  constructor =字节码类.getConstructor(参数类型1.class,参数类型2.class,...........)

       例:Constructor  constructor =personClass.getConstructor(String.class,int.class)

       创建对象:Objct ob=constructor.newInstance("张三",25).

  • 获取无参构造器:Constructor  constructor =字节码类.getConstructor( .)

       例:Constructor  constructor =personClass.getConstructor( )

       创建对象方法1:Objct ob=personClass.newInstance(  ).

       创建对象方法2:Objct ob=constructor.newInstance(  ).

3.获取类的成员变量。

  • 获取所有public修饰的成员变量:Field[ ]  field=字节码类.getFields( ).
  • 获取某个public修饰的成员变量:Field field=字节码类.getFields(String name ).

        修改成员变量例如:

        Person p=new Person( );

        Field name=personClass.getFields("name" )

        name.set(p,"张三");

  • 获取任意修饰的成员变量:Field[ ] field=字节码类.getDeclaredFields( ).
  • 获取某个成员变量:Field field=字节码类.getDeclaredFields(String name ).

       修改成员变量例如:

         Person p=new Person( );

        Field name=personClass.getFields("name" );

        name.setAccessible(true);//忽视修饰符

        name.set(p,"张三");

 4.获取类的成员方法。

  • 获取所有的方法(自己写的和Object类中的):Method[ ] method=字节码类.getMethods( );
  • 获取某个无参方法:Method eat=字节码类.getMethod( String  方法名);

      使用方法:Method eat=personClass.getMethod(eat);

                       Person p=new Person( );

                        eat.invoke(p);

  • 获取某个有参方法:Method eat=字节码类.getMethod( String  方法名,参数类型1.class,参数类型2.class,.........);

        使用方法:Method eat=personClass.getMethod(eat,String.class);

                         Person p=new Person( );

                         eat.invoke(p."吃饭");

  •   获取方法名:String name=method.getName(  )。
  •   获取类名称:String className=字节码类.getName( ).

以上是关于获取类的字节码的Class对象。的主要内容,如果未能解决你的问题,请参考以下文章

Java反射基础

反射学习小结

java反射

Java基础之—反射

thinking in java反射

反射是框架设计的灵魂