码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-30 12:34:34      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:gif   onclick   style   技术   red   eth   ons   isp   methods   

获取类的字节码的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对象。

标签:gif   onclick   style   技术   red   eth   ons   isp   methods   

原文地址:https://www.cnblogs.com/morefreedomofselfdiscipine/p/12236003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!