Java反射机制生成实例和普通实话化对比

Java反射机制与安全问题 Java反射机制与安全问题 0x00前言 近日,笔者在总结Java反序列化漏洞的过程中发现一个怎么也绕不开的词“Java反射机制“,以前笔者只知道这是一个实现Java”准动态“语言,方便开发人员调试程序的机制而已,没想到“反射”竟成了反序列化漏洞攻击的手段之一,所以在这篇文章中好好的总结一下,反射机制的原理以及存在还哪些安全问题。 反射机制思维导图: 0x01 Java反射机制定义 Java反射... 阅读详情
package Reflect.Peng;
/* 对比正常new对象和reflect创建对象,假设存在str_obj中对象运行中未知,从外部导入*/

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

class Apple{
    private float price;
    public String type = "Iphone 100SE";

    public void setPrice(float price) {
        this.price = price;
    }

    public float getPrice() {
        return price;
    }
}

public class P0107ReflectExample {
    public static void main(String[] args)
            throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException,
            InvocationTargetException, InstantiationException, NoSuchFieldException {
        Apple direct_creat = new Apple();
        direct_creat.setPrice((float) 3999.5);
        System.out.println("直接创建Apple对象,调用方法:" + direct_creat.getPrice());

        //Reflect方法:forName得到导入的类型,getMethod调用方法, getConstructor构造,.instance实例化
        String str = "Reflect.Peng.Apple";
        String[] mtd = {"setPrice", "getPrice"};
        Class clazz = Class.forName(str);//throw找不到方法的异常
        Method setPr = clazz.getMethod(mtd[0], float.class); //找不到方法的异常处理
        Object reflect_obj = clazz.getDeclaredConstructor().newInstance();
        //调用设置方法
        setPr.invoke(reflect_obj, (float)5999.5);
        //调用get获取方法
        Method getPr = clazz.getDeclaredMethod(mtd[1]);
        System.out.println("反射的apple对象创建,调用方法返回结果" + getPr.invoke(reflect_obj));

        /*直接创建很方便,new一下,直接.点调用即可;
        * 反射创建看似比较复杂,需要forname得到Class类,然后对象要用getDeclaredConstructor进行newInstance,
        *                   方法需要用clazz的getMethod返回Method对象,通过invoke来执行调用; getFields获取属性
        * 然而,这种好处是对象类型和执行完全解耦了,这对于企业编程,大型程序的配置、运行分离非常关键;大为简化运行难度,提升配置灵活性;
        * 所以这称为大名鼎鼎的Spring编程的关键思想,配置、数据、运行解耦 */

        Field val = clazz.getField(clazz.getField("type").getName());
        System.out.println("变量名:" + clazz.getField("type") +
                "\nApple型号: " + val.get(reflect_obj));

    }

}

output

直接创建Apple对象,调用方法:3999.5
反射的apple对象创建,调用方法返回结果5999.5
变量名:public java.lang.String Reflect.Peng.Apple.type
Apple型号: Iphone 100SE

Java反射机制:动态创建类实例的深入探索 Java反射机制是Java语言中一个重要的特性,它允许程序在运行时动态地访问类的属性、方法、构造器等信息,并且能够创建对象、调用方法、获取和设置字段的值。反射提供了一种在程序运行时进行系统监控、诊断和调试的有效手段,是Java动态编程的核心技术之一。在实现自定义类加载器时,可以通过修改查找类的路径来实现类加载的策略定制。比如,可以指定不同的目录或URL作为类文件的来源,或者实现类的加密和解密逻辑以增强安全性。自定义类加载器还可以用于实现热部署功能,在不重启应用的情况下,动态地替换或更新类文件。 阅读详情

相关推荐

S32K3 eMIOS使用介绍(PWM输出与输入捕获)——基于MCAL

本文基于 S32K3xx系列芯片、S32 Design Studio for S32 Platform开发平台以及EB tresos 28.0.0、 MCAL层,介绍pwm的输出及输入捕获。

HeFlyYoung的博客 2万+

windows的rancherDesktop修改镜像源

Rancher Desktop中的“Allowed Images”功能(通常在 Preferences -> Container Engine -> Allowed Images 中找到)是用来定义一个允许拉取和推送的镜像列表的规则,例如,只允许从您组织或特定的受信任的仓库中获取镜像。如果问题依旧,请提供您Rancher Desktop的版本和当前选择的容器运行时,以便进一步协助。总结一下,对于Windows上的Rancher Desktop,如果您使用默认的。,镜像源的配置通常通过一个名为。

zwjapple的专栏 2700

__ne__()函数详解

操作符来比较两个类的实例时,Python会自动调用这个方法。如果这个方法没有在你的类中定义,那么!当 person1 和 person2 的 name 或 age 属性不同时,person1!方法的结果是一致的。即,如果 a == b 返回 True,那么 a!这是因为有时即使两个对象不相等,你也可能想要提供一些额外的逻辑来判断它们为何不相等。例如,你可能想要提供更详细的错误信息或者执行一些额外的检查。= 操作符提供更具体的逻辑,你可以在。方法来定义等于(==)操作符的行为时,也应该实现。

记录学习过程 801

unity中判断是否联网,判断网络状态的两种方式

unity中判断是否联网,判断网络状态的两种方式

wla2996gpy032的博客 1876

Docker安装Nacos(详细教程)

Docker安装Nacos的步骤相对直接,但需要注意一些细节以确保安装成功。

weixin_73060959的博客 1406

python运算符重载编程__ne__怎么用_Python运算符重载详解及实例代码

Python运算符重载Python语言提供了运算符重载功能,增强了语言的灵活性,这一点与C++有点类似又有些不同。鉴于它的特殊性,今天就来讨论一下Python运算符重载。Python语言本身提供了很多魔法方法,它的运算符重载就是通过重写这些Python内置魔法方法实现的。这些魔法方法都是以双下划线开头和结尾的,类似于__X__的形式,python通过这种特殊的命名方式来拦截操作符,以实现重载。当P...

weixin_42339991的博客 637

嵌入式:简单的service框架

在嵌入式中,我们获取一个资源、设置一个变量、更新数据的话最直接的方式就是直接调用一个函数。这样的写法也可以满足基本的功能,前提是这个系统是只要一个任务,只有一个while(1)如图1.1。图1.1当有两个或者两个以上的任务的时候,同时调用一个函数(设置一个状态值、操作同一个资源、操作指针等行为)的流程如图1.2。图1.2当两个任务同时操作一个资源的时候,就会有重入的问题,会导致想不到的异常问题(数据不对、指针异常等)。

stupid的博客 986

Python面向对象以及封装、继承、多态初识

python面向对象 面向对象与面向过程,不多说 类和对象 类和对象是面向编程的两个核心概念,java中亦是如此 总而言之,类是模板,对象是实例 类的模板 class Human: """ 此类主要是构建人类 """ mind = '有思想' # 第一部分:静态属性 属性 静态变量 静态字段 dic = {} l1 = [] def work(self): # 第二部分:方法 函数 动态属性 print('人类会工作') #

weixin_44178366的博客 363

深入解析Matlab phantom函数:从基础模体到自定义头部仿真

本文深入解析了Matlab中的phantom函数,它是医学图像处理算法测试的核心工具。文章详细介绍了如何使用内置的Shepp-Logan及其改良版头部仿真模体,并重点讲解了通过自定义参数矩阵来构建专属模体的方法。通过从生成模体到模拟投影(正弦图)再到图像重建的完整实战流程,展示了phantom函数在CT等算法开发与验证中的关键作用。

m3n5b7v8c9x的博客 951

WiFi基本概念(六)(L-STF,L-LTF)

L-STF它由10个OFDM symbol(1,0,1,0,1,0,1,0,1,0)构成,每个symbol是0.8us,GI是0.2us,总计10us。Symbol的长度是正常长度的1/4,因此称为Short training field,主要用于快速进行信号检测,信号同步,自动增益控制,接收天线选择(Diversity Selection)。 由于symbol长度是正常的1/4,子载波的宽度是正常的4倍,能进行初略的信道估计,其使用了-24, -20, -16, -12, -8, -4, 4, 8, 1

reekyli的专栏 6864

python运算符重载_Python运算符重载用法实例分析

本文实例讲述了Python运算符重载用法。分享给大家供大家参考。具体如下:在Python语言中提供了类似于C++的运算符重在功能:一下为Python运算符重在调用的方法如下:Method Overloads Call for__init__ 构造函数 X=Class()__del__ 析构函数 对象销毁_...

weixin_39605347的博客 221

模型实战(16)之StrongSort (OSNET)配合YOLOv5、v7、v8 实现多目标跟踪详解

StrongSort (OSNET)配合YOLOv5、v7、v8 实现多目标跟踪详解

yohnyang的博客 1770

java反射机制

1. 什么是反射机制? 首先大家应该先了解两个概念,编译期和运行期,编译期就是编译器帮你把源代码翻译成机器能识别的代码,比如编译器把java代码编译成jvm识别的字节码文件,而运行期指的是将可执行文件交给操作系统去执行,JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为ja...

Yoke 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JAVA的反射机制简析

正常访问java类的方式是先导入要访问的类所在的包,然后实例化对象,最后调用包里面的方法。但是有时候也会存在这样的情况,你需要的类所在的包并不在你的开发套件(SDK)中,而且你也不能把相关的包导入到你的开发工程当中来,但是你又必须要使用这个包中的相关类。有没有一种方式可以在不需要包的情况下也能访问包中的类呢,在这种情况下就可以使用反射机制。关于反射机制的具体原理可以参考相关的书籍和文章,本文主要举

TECH_PRO的博客 467

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java反射机制是什么?Class有什么特点?怎么获取Class类实例?

文章目录一、什么是java反射机制?二、Class类有什么特点?1.Class的特点 一、什么是java反射机制? Java反射机制是在运行状态中,对于任何一个类我们都可以调用其中的属性和方法,对于任意一个对象我们都可以调用它的属性和方法,这种动态操作类和对象的属性和方法的机制叫Java反射机制。 Java反射机制为了实现对成员变量,普通方法,构造方法的操作,需要借助Java自身提供的java.l...

kjw888的博客 1513

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java 反射机制(Reflection)

Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。反射机制允许程序在运行时通过 API 检查和操作类、方法、字段等,提供了极大的灵活性,但也伴随着一定的性能开销。通过对 Java 反射机制的学习,我们掌握了一种强大的运行时类操作工具。反射机制在框架开发、工具类实现、ORM 映射等场景中发挥着重要作用,它允许程序在运行时动态获取类的信息并操作对象。

SSSYUsssyu的博客 1659

JAVA进阶(反射机制)

文章目录一、反射机制是什么?二、反射调用1.Class类2.反射实例化对象3.反射调用构造方法4.反射调用普通方法5.反射调用私有成员 一、反射机制是什么? java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制 二、反射调用 1.Class类 java.util.Class是一个类,这个类是反射操作

huicoker的博客 420

Java反射机制

本篇博客解释了Java中的一个很重要的机制--反射机制,这个机制在Java中的框架都有所使用,可以让大家更好地理解框架的底层是如何实现的,为后面学习框架,了解框架的底层逻辑有很大的帮助,所以反射机制必须要理解掌握。制作不易,如果对大家的学习有帮助的话,希望大家可以三连多多支持一下!!!

2302_78078800的博客 1151

Java8——反射机制

反射机制的认识: "反":就是指可以利用对象找到对象的出处; 取得class对象:public final Class<?> getClass() 范例:观察反 public class test { public static void main(String args[]) throws Exception { Date date = new Date(); System.out.println(date.getClass()); // class java.util.Da

小金是个小菜鸡 867

Java中的反射机制和例子

然后,我们调用了getMethods方法来获取String类的所有公共方法,并遍历输出它们的名称。最后,我们通过getMethod方法获取了String类的length方法,并使用invoke方法调用了它,传递了"Hello"作为参数,并输出了结果。Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。Class:表示类的实体,所有的Java类都是Class的实例。在运行时调用任意一个对象的方法。

weixin_42095178的博客 499

Java 的反射机制

反射机制允许程序在运行时获取关于类、接口、字段和方法的信息,而不需要在编译时知道这些信息。获取某个类的所有字段、方法和构造方法。访问某个字段的值,调用某个方法,甚至可以修改其访问权限。动态创建对象和调用方法。反射主要通过 Java 提供的包实现,其中包括了 ClassMethodField 等反射类。

小萌学习笔记 1131

Java反射机制!

Java反射机制

梁凉的博客 5276

java反射机制总结

反射 1. 认识反射机制 什么是java的反射机制呢?众所周知,java的特征之一也是java最大特征是它的重用性。而反射机制就是java重用性的核心。反射机制主要体现的是一个“正”和“反”的不同。所谓正操作就是指在使用一个类时,一定要先导入程序的包,而后根据类进行对象的实例化,通俗来说也就是使用new来实例化对象。而所谓反操作是指可以根据实例化对象反推出其类型,即其所在的类。 2. Class ...

suwnbs的博客 182

如何获取Class类实例化对象

什么是反射 Java反射(Reflection)是一种新的操作类中成员变量、构造方法和普通方法的机制,为了实现对成员变量、构造方法和普通方法的操作,我们需要借助Java自身提供的java.lang包下的Class类和java.lang.reflect包下的反射API 。 什么是Class类 Class类是Java 反射机制的入口,封装了一个类或接口的运行时信息,通过调用Class...

hsx_cassy的博客 1830

java 反射机制编程_Java 反射机制的实例详解

Java 反射机制的实例详解发布时间:2020-09-21 06:23:08来源:脚本之家阅读:62作者:子沐阿Java 反射机制的实例详解前言今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来。那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现。正文Java反射机制定义Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;...

weixin_30604459的博客 217
上一篇: 反射机制:ClassLoader类加载器 和 reflect中的array使用
下一篇: java多线程sync同步 和 安全
飞凡可期
博客等级 码龄11年 34粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值