Java反射机制学习总结

版权声明:未经允许禁止转载 https://blog.csdn.net/weixin_38481963/article/details/87900786

1、什么是java反射机制

java反射机制是在运行状态 中,对任意一个实体类,都能够知道这个类的所有属性和方法,对任意一个对象,都能调用它的任意方法和属性,这种动态获取信息以及动态调用对象方法的功能称为java反射机制

2、如何获取Class对象

  1. 类名.class;
  2. 对象名.getClass()
  3. Class.forName(全限定名)
package com.test;

class People{
    private String name;
    private int age;
    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void show(){
        System.out.println(name+"  "+age);
    }
}

public class Test   {


    public static void main(String[] args) throws ClassNotFoundException {
        People p = new People("tom",18);

        Class<People> c = People.class;

        System.out.println("根据类名.class获取\t\t" + People.class);
        System.out.println("根据对象名.getClass()获取" + p.getClass());
        System.out.println("根据Class.forName()获取\t" + Class.forName("com.test.People"));

        System.out.println("获取全限定名\t\t\t\t" + c.getName());
        System.out.println("获取简单类名\t\t\t\t" + c.getSimpleName());
    }
}

结果:

根据类名.class获取		class com.test.People
根据对象名.getClass()获取class com.test.People
根据Class.forName()获取	class com.test.People
获取全限定名				com.test.People
获取简单类名				People

3、获取构造函数

package com.test;
import java.lang.reflect.*;
class People{
    private String name;
    private int age;

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void show(){
        System.out.println(name+"  "+age);
    }
}

public class Test   {
    public static void main(String[] args) throws Exception {
        Class<People> userClass = People.class;
        Constructor<?> constructors[] = userClass.getConstructors();
        People people = (People)constructors[0].newInstance("Tom",18);
        people.show();
    }
}

结果:

Tom  18

4、获取属性

package com.test;
import java.lang.reflect.*;
class People{
    private String name;
    private int age;

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void show(){
        System.out.println(name+"  "+age);
    }
}

public class Test   {
    public static void main(String[] args) throws Exception {
        Class<People> userClass = People.class;
        Constructor<?> constructors[] = userClass.getConstructors();
        People people = (People)constructors[0].newInstance("Tom",18);
        Field fields[] = userClass.getDeclaredFields();
        Field.setAccessible(fields,true);
        for(Field field:fields)
        {
            System.out.print("属性名:"+field.getName());
            System.out.print("\t属性值:"+field.get(people));
            System.out.print("\t属性类型:"+field.getType());
            System.out.println();
        }
    }
}

结果:

属性名:name	属性值:Tom	属性类型:class java.lang.String
属性名:age	属性值:18	属性类型:int

5、获取方法

package com.test;
import java.lang.reflect.*;
class People{
    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void show(){
        System.out.println(name+"  "+age);
    }
}

public class Test   {
    public static void main(String[] args) throws Exception {
        Class<People> userClass = People.class;
        Constructor<?> constructors[] = userClass.getConstructors();
        People people = (People)constructors[0].newInstance("Tom",18);
        Method methods[] = userClass.getDeclaredMethods();
        Method.setAccessible(methods,true);
        for(Method method:methods)
        {
            System.out.print("方法名:"+method.getName());
            System.out.println("\t返回类型:"+method.getReturnType().getName());
        }
    }
}

结果:

方法名:getName	返回类型:java.lang.String
方法名:setName	返回类型:void
方法名:setAge	返回类型:void
方法名:getAge	返回类型:int
方法名:show	返回类型:void

猜你喜欢

转载自blog.csdn.net/weixin_38481963/article/details/87900786