Java反射使用实例

Java反射使用实例

                                        ——Javee

Java反射机制是指,在Java运行的过程中可以获取到任意一个类的属性和方法;也可以获取任意一个对象的属性或执行对象的方法。

反射方法的简介:

package cn.edu.ncu.online.work2;

import cn.edu.ncu.online.work1.Student;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
* @Author Javee
* @Date 2019/8/15 11:05
* @Description
*/
public class Test {
    public static void main(String[] args) {
        String classPath = "cn.edu.ncu.online.work1.Student";
        Student student = new Student("Javee", 20);
        printProperty(classPath);
    }

    /*
     *一般情况下,含有Declared的方法获取到的属性为不含父类属性
     * 反之,获取到的属性含有父类属性
     */
    public static void printProperty(String classPath){
        try {
            //解析传进来的类的路径名,通过路径获取类
            Class<?> clazz = Class.forName(classPath);
            //return clazz.newInstance();        //使用反射创建对象

            //获取这个字节码所有的public字段(含父类)
            Field[] fields = clazz.getFields();
            //获取当前类的所有字段
            Field[] myFilds = clazz.getDeclaredFields();

            //获取所有public方法(含父类)
            Method[] myMethods = clazz.getMethods();

            //动态获取当前类的类名
            System.out.println(clazz.getName());

            //获取当前类的public构造方法
            Constructor<?>[] constructors = clazz.getConstructors();

            System.out.println(constructors.length);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

通过反射将类的属性以Json的格式打印到控制台:

//People.java
package cn.edu.ncu.online.work1;

/**
* @Author Javee
* @Date 2019/8/15 11:06
* @Description
*/
public class People {
    public People(){}
    private double height;
    private int gender;
    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }
}
//Student.java
package cn.edu.ncu.online.work1;

/**
* @Author Javee
* @Date 2019/8/15 10:17
* @Description
*/
public class Student extends People{
    private String name;
    private int age;

    private Student() {}

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

    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;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
//ObjectToJson.java
package cn.edu.ncu.online.work2;

import cn.edu.ncu.online.work1.Student;
import java.lang.reflect.Method;

/**
* @Author Javee
* @Date 2019/8/15 14:37
* @Description
*/
public class ObjectToJson {
    public static void main(String[] args) throws Exception {
        Student student = new Student("Javee", 18);
        student.setGender(1);
        student.setHeight(181);


        String json = getJson(student);
        System.out.println(json);
    }

    private static String getJson(Object obj) throws Exception{
        StringBuilder jsonStr = new StringBuilder("{");

        //解析传过来的对象,通过对象获取类
        Class<?> clazz = obj.getClass();
        //获取所有方法
        Method[] methods = clazz.getMethods();

        for(Method method : methods){
            if(method.getName().startsWith("get")){
                //获取属性名
                String jsonKey = method.getName().substring(3).toLowerCase();

                //如果是Object类中的getClass方法,则跳过
                if(jsonKey.equals("class")) continue;
                //method.invoke(obj)  表示运行obj对象中的method方法
                String jsonValue = method.invoke(obj).toString();
                jsonStr.append("\"" + jsonKey + "\"");
                jsonStr.append(":");
                jsonStr.append("\"" + jsonValue + "\"");
                jsonStr.append(",");
            }
        }
        jsonStr.deleteCharAt(jsonStr.length() - 1); //删除添加的最后一个逗号
        jsonStr.append("}");
        return jsonStr.toString();
    }
}

运行结果:{"name":"Javee","age":"18","height":"181.0","gender":"1"}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值