前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java-反射

java-反射

原创
作者头像
Get
修改2024-04-14 15:16:10
520
修改2024-04-14 15:16:10
代码语言:java
复制
package com.test;


import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Apple {
    private int price;

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
    public static void main(String[] args) throws Exception {
        /**
         * 正常调用
         * 正射:已经知道类初始化的对象是什么,可以通过new直接初始化对象
         */
        Apple apple = new Apple();
        apple.setPrice(5);
        System.out.println("com.test.Apple Price:"+apple.getPrice());
        /**
         * 反射调用
         * 反射:一开始不知道类、初始化的对象,无法使用new创建;只能使用JDK提供的反射API反射调用
         *      反射就是在类运行时,才知道操作的类、对象是什么,并可以通过运行时的类反向获取类的完整构造,并调用其变量、方法来完成一些动作。例如创建新对象
         */
        /**
         * 例如:只知道类的路径,类的变量、方法、构造函数等一概不知,通过该路径来反向获取类的信息来创建对象
         * 前提:只知道类的路径,其他啥都不知道,才能体现出反射的价值
         */
        Class clz = Class.forName("com.test.Apple");
        /**
         * 通过反射获取类的方法、变量、构造函数
         */
        Method[] methods = clz.getDeclaredMethods();
        Field[] fields =clz.getDeclaredFields();
        Constructor[] constructors = clz.getConstructors();
        /**
         * 通过反射获取的类信息,构造新对象
         */
        Constructor appleConstructor = clz.getConstructor();
        Method setPriceMethod = clz.getMethod("setPrice", int.class);
        Object appleObj = appleConstructor.newInstance();
        setPriceMethod.invoke(appleObj,14);
        Method getPriceMethod = clz.getMethod("getPrice");
        System.out.println("Apple Price:"+getPriceMethod.invoke(appleObj));

    }
}

############################
com.test.Apple Price:5
Apple Price:14

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com