反射的初次相遇

本文深入探讨了Java反射的概念,它允许程序在运行时动态获取类信息并操作类的属性和方法。通过示例代码展示了如何通过反射创建对象、获取类属性和调用方法。反射在公共代码封装和特定场景下具有优势,如增强灵活性和代码复用,但同时也存在性能损耗和安全风险。此外,文章还讨论了反射的优缺点及其应用场景。
摘要由CSDN通过智能技术生成

反射内容很重要,且不太好理解

反射的定义

反射即反向探知,有点像考古学家根据发掘的物品来探知以前的事情(对于过去很多的事情都不知道,通过一个东西了解过去未知的一些事情)
在这里插入图片描述
反射在Java指的是程序在运行状态中,

1.对于给定的一个类(Class)对象,可以获取这个类(Class)对象的所有属性和方法;

2.对于给定的一个对象(new XXXClassName<? extends Object>),都能够调用它的任意一个属性和方法;

总结:程序中通过类对象去探索和操作类的信息,这种动态的获取类的信息以及动态的调用对象的方法和获取属性的机制,就叫做Java反射机制。

通过类对象获取类的属性和调用类的方法

package com.example.demo;

import com.example.entity.User;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 通过类对象获取类的属性和调用类的方法
 *
 * @author Administrator
 * @date 2022/09/10
 */
public class ReflexDemo01 {
    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
        // 获取类对象
        Class<User> userClass = User.class;
        // 获取类对象对应的属性和方法
        String name = userClass.getName();
        System.out.println("name:" + name);
        Package classPackage = userClass.getPackage();
        System.out.println("classPackage:" + classPackage);
        ClassLoader classLoader = userClass.getClassLoader();
        System.out.println("classLoader:" + classLoader);
        Class<? super User> superclass = userClass.getSuperclass();
        System.out.println("superclass:" + superclass);
        // 获取一个实例对象
        User user = userClass.newInstance();
        // 获取类型中的方法
        Method method = userClass.getDeclaredMethod("jump");
        // 通过反射执行方法
        method.invoke(user);
    }
}

通过反射可以操作类的属性和方法,之前都是通过使用new XXXClassName()的方式创建对象,然后通过创建的对象来操作类的属性和方法。

反射的应用场景

工作中编写业务代码的时候不会使用反射,创建对象是通过new XXXClassName()的方式创建,而反射一般会应用于公共代码提取和封装的时候。

反射的优缺点

优点:

  • 增加程序的灵活性,避免固有的逻辑写死到程序中
  • 代码相对简洁,可以提高程序的复用性

缺点:

  • 相比于直接调用,反射有较大的性能销毁
  • 内部暴漏和安全隐患

反射慢在哪里

  • 调用了native方法
  • 每次newInstance都会做安全检查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值