反射

UE4-(反射)反射采集 一、现在有两个反射采集形状:球体和盒体 通常将屏幕空间反射和反射捕获相结合,两者各有优缺点,结合使用是希望同个结合两者的优点来弥补缺点。 大多情况下使用球体反射采集: 效果:不管怎么移动相机位置,屏幕上都会有反射效果。 问题: 当反射采集与屏幕空间反射过渡时,反射画面中的物体位置会发生变化。 原因:当屏幕空间反射过渡到反射捕获,引擎会切换使用两者,但是屏幕空间反射的优先级始终更高。 解释:反射采集会采集一张360度的瞬时图像,用于反射效果。图像中的物体位置与屏幕空间反射出来的物体位 阅读详情

java的反射机制是在运行状态中,对于任意一个类,都能获得这个类得所以属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法。而这种在运行阶段动态的获取信息及动态的调用对象的方法称为java的反射机制。
Class 类与java.lang.reflect 类库一起对反射的概念进行了支持,该类库包含了Field,Method,Constructor类(每个类都实现了Member 接口)。这些类型的对象时由JVM 在运行时创建的,用以表示未知类里对应的成员。
这样你就可以使用Constructor 创建新的对象,用get() 和set() 方法读取和修改与Field 对象关联的字段,用invoke() 方法调用与Method 对象关联的方法。另外,还可以调用getFields() getMethods() 和 getConstructors() 等很便利的方法,以返回表示字段,方法,以及构造器的对象的数组。这样匿名对象的信息就能在运行时被完全确定下来,而在编译时不需要知道任何事情。

反射机制的作用:
1.在运行时判断任意一个对象所属的类;
2.在运行时获取类的对象;
3.在运行时访问java对象的属性,方法,构造方法等。

获取字节码(class)对象的三种方式:
1.根据Object类中所有的.getClass()方法,想使用这种方法,则必须要有明确具体的类并且创建该类的对象。
2.所有的数据类型(对象?)都有对应的静态的属性.Class来获取对应的Class对象,还是必须要先明确到类,才能根据该类的Class对象获取到该类中的属性,方法,构造方法等…。
3.我们只有通过给定的类的字符串名称(需要的是全类目)才可以获取该类的字节码对象,这样的扩展性更强,具体则是通过Class.forName()方法完成,这种方法和前两种相比有一个缺点,由于前两种方法都是知道该类的情况下获取该类的字节码对象的,因此不会产生异常(也不一定但是很少概率),但是Class.forName()方法如果写错了该类的路径则会报ClassNotFoundException(类找不到异常)异常。
基类

package testDemo.demo.reflections;

public class Car {

	public String colour;
	public int age;
	private long length;

	public void say() {
		System.err.println("di~di~di~");
	}

	public void single(String num) {

		System.err.println("我只喜欢" + num);
	}

	private void eat(int num) {

		System.err.println("我只喜欢吃汽油和" + num);
	}

	public String getColour() {
		return colour;
	}

	public void setColour(String colour) {
		this.colour = colour;
	}

	public int getAge() {
		return age;
	}

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

	public long getLength() {
		return length;
	}

	public void setLength(long length) {
		this.length = length;
	}

	public Car(String colour, int age, long length) {
		super();
		this.colour = colour;
		this.age = age;
		this.length = length;
		System.out.println("这是有参构造器");
	}

	public Car() {
		super();
		// TODO Auto-generated constructor stub
		System.err.println("这是无参构造器");
	}

	@Override
	public String toString() {
		return "Car [colour=" + colour + ", age=" + age + ", length=" + length + "]";
	}
}

获取Class对象的三种方式:

package testDemo.demo.reflections;

public class testreflections {
//通过反射获取类(Class)对象的三种方式
	public static void main(String[] args) throws ClassNotFoundException {

		Car car = new Car();

		Class<?> class1 = car.getClass();

		Class<?> class2 = Car.class;

		Class<?> class3 = Class.forName("testDemo.demo.reflections.Car");

		System.err.println(class1);
		System.out.println(class2);
		System.err.println(class3);
	}
}

通过反射机制获取类信息:
下面这段代码分别在运行期间创建了一个无参与有参的对象实例。由于getConstructor() 方法与newInstance() 方法抛出了很多异常(你可以通过源代码查看它们),这里就简写了直接抛出一个Exception,下同。

package testDemo.demo.reflections;

import java.lang.reflect.Constructor;

public class testreflections1 {

	public static void main(String[] args) throws Exception, Exception {
		Car car = new Car();
		Class<?> class1 = car.getClass();
		// 获取类加载器
		ClassLoader classLoader = class1.getClassLoader();
		// 获取这个类的无参构造器
		Constructor<?> constructor = class1.getConstructor();
		// 获取这个类的有参构造器()
		Constructor<?> constructor1 = class1.getConstructor(String.class, int.class, long.class);

		Object newInstance = constructor.newInstance();
		Object newInstance2 = constructor1.newInstance("apple", 12, 22);
		System.err.println(classLoader);
		System.out.println(constructor);
		System.err.println(constructor1);
		System.out.println(newInstance);
		System.out.println(newInstance2);
	}
}

小知识点:
********* getConstructor()和getDeclaredConstructor()区别:*********
getDeclaredConstructor(Class<?>… parameterTypes)
这个方法会返回制定参数类型的所有构造器,包括public的和非public的,当然也包括private的。
getDeclaredConstructors()的返回结果就没有参数类型的过滤了。

再来看getConstructor(Class<?>… parameterTypes)
这个方法返回的是上面那个方法返回结果的子集,只返回制定参数类型访问权限是public的构造器。
getConstructors()的返回结果同样也没有参数类型的过滤。

通过反射机制获取Class 中的属性:

package testDemo.demo.reflections;

import java.lang.reflect.Field;

public class testreflections2 {

	public static void main(String[] args) throws Exception {

		Class<?> class3 = Class.forName("testDemo.demo.reflections.Car");

		// 通过反射获取类中的属性
		Field field = class3.getField("colour");

		// 如果类中没有这个属性会报(java.lang.NoSuchFieldException)这个异常
		// 也不能使用这个方法去获取类中私有的属性
		// Field field = class3.getField("like");

		// 获取私有属性需要用getDeclaredField()这个方法
		Field declaredField = class3.getDeclaredField("length");
		// 当然这个方法可以获取不是私有属性(private)的属性
		Field declaredField1 = class3.getDeclaredField("colour");

		// 创建无参对象实例
		Object newInstance = class3.newInstance();
		// 为无参对象实例属性赋值 Car
		field.set(newInstance, "li");
		// 通过newInstance对象获取属性值
		Object object = field.get(newInstance);

		System.out.println(field);
		System.out.println(declaredField);
		System.out.println(declaredField1);
		System.out.println(newInstance);
		System.out.println(object);
	}
}

通过反射机制获取Class 中的方法并运行:
package testDemo.demo.reflections;

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

public class testreflections3 {

	public static void main(String[] args) throws Exception {

		Class<?> class3 = Class.forName("testDemo.demo.reflections.Car");
		// 通过反射获取及使用类中的方法的时候,首先要获得类的构造器(构造函数)(必须是有参构造器)(这里不太确定是否是必须的)
		Constructor<?> constructor1 = class3.getConstructor(String.class, int.class, long.class);
		// 然后创建有参对象实例(这里不太确定是否是必须的)
		Object newInstance = constructor1.newInstance("is", 1, 2);
		String string = newInstance.toString();

		// 获取空参数say方法
		Method m = class3.getMethod("say", null);
		// 执行无参方法
		m.invoke(newInstance, null);

		// 获取有参数say方法
		Method method = class3.getMethod("single", String.class);
		// 执行有参方法
		method.invoke(newInstance, "唱歌");

		// 如果想执行类中的私有方法需要使用这个 getDeclaredMethods()这个方法
		// 获取私有方法(有参数的)eat方法
		Method s = class3.getDeclaredMethod("eat", int.class);
		// 将检查取消(重点)
		s.setAccessible(true);
		// 执行有参方法
		s.invoke(newInstance, 10);

		System.err.println(m);
		System.err.println(string);
	}
}


反射的其他用法(比如通过创建一个工厂类)
参考文章:
https://blog.youkuaiyun.com/houguofei123/article/details/81454807
https://www.cnblogs.com/ktlshy/p/4716838.html
萌新一个有错误希望指正,一起探讨!!!

Java反射 Java的反射(reflection)机制是指在程序的运行状态中,借助取得任何类的内部信息,可以动态地构造任意一个类的对象,并能直接操作任意对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。反射主要用到java.lang.Class类和包下的一些类,是 Java 反射机制的核心包,提供了操作类及其成员(字段、方法、构造函数等)的类和接口。表示类的对象。提供了获取类的字段、方法、构造函数等方法。 阅读详情

相关推荐

反射一、反射的基本概念

Java程序在编写完成之后,为了能够运行,首先会被编译为class文件。然后,在Java程序的运行过程当中,每当需要一个新的类,就需要将其对应的class文件加载到JVM虚拟机当中。加载class文件的叫作ClassLoader。 JDK具有多个层次的ClassLoader,最根上的那个叫作BootStrap ClassLoader,负责加载JDK中最核心的类。BootStrap ClassLo...

sun_lm的博客 2677

java反射中的T_Java反射:Web学习的灵魂

反射:Web学习的灵魂我们从最初的 javac -HelloWorld.java,到面向对象部分,我们可以将Java代码在计算机中经历的阶段分为三部分:Scource源代码阶段 —— Class类对象阶段 —— Runtime运行时阶段 而我们知道,Java中一个类在源代码阶段,是存储在硬盘中的,而编译后,就已经被加载到内存中区,那么有没有一种方法可以在这种情况下,获取或者修改它的方法或者属性呢?...

weixin_42520448的博客 251

正反射和负反射的含义:

​正反射和负反射的含义: 前两节我们讨论反射的过程中,一直使用电压数值来计算反射量的大小。使用电压数值来计算理想方波信号(上升时间为0)的上升沿引起的反射现象的确很方便,尽管在数值上是正确的,但是这种方式有可能会造成理解上的误区。问题的关键在于:使用数值是否合理?该如何处理数值? 接下来讨论一个很有趣的问题:理想方波下降沿的反射。如果传输线末端开路,驱动器输出阻抗小于传输线的特征阻抗,末端波形会是什么样的?下降沿后信号电平为0V,信号到达末端,由于末端开路,反射系数为1。如果使用电压数值计算,根据反射电

2401_87854160的博客 914

java反射中的T_java反射 之 反射基础

packagecom.jalja.org.base.relfect;public classPerson {privateString name;intage;publicString address;publicPerson() {}privatePerson(String name) {this.name =name;}Person(String name,intage) {this.name...

weixin_42641741的博客 388

关于反射探头的实时反射

用反射探头实现镜面反射 之前看到过一个日本人写的文章,关于如何使用Unity的反射探头来实现地板的镜面反射效果。 文章地址:http://nn-hokuson.hatenablog.com/entry/2016/10/17/202135。 核心代码很短,主要是根据下图所示实时更新反射探头的位置: 先贴一下位置计算的代码: using System.Collections; using Syste...

weixin_45979158的博客 1041

平面反射

GitHub项目地址 平面反射的实现步骤: 1、抓取屏幕图像——渲染纹理RenderTexture+额外摄像机 2、反射矩阵(ReflectMatrix)——获得反射的屏幕图像 3、斜裁剪矩阵(ObliqueMatrix)——裁剪掉反射平面以下的部分 4、高斯模糊——模糊反射的倒影 5、将反射纹理渲染到地面 1、抓取屏幕图像 之前的文章已经提过了,抓取屏幕图像有两种方法: 1、GrabPass 2、渲染纹理RenderTexture+额外摄像机 这里需要使用第二种方法: private Camera ma.

leo_hui_leo的博客 2069

java反射中的T_新手学习java反射基础

一、反射反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。对于反射的操作实际上就是通过C...

weixin_42287030的博客 393

基于R语言的现代贝叶斯统计学方法(贝叶斯参数估计、贝叶斯回归、贝叶斯计算)实践

贝叶斯统计学是一门基本思想与传统基于频率思想的统计学完全不同的统计学方法;它以其灵活性和先进性在现代的统计学中占据着重要的地位。贝叶斯统计学是开展科学研究不可缺少的重要手段,但是,因为其思想、技术和方法都与传统统计学有着较大区别;且其计算中涉及马尔科夫、蒙特卡罗和吉布斯采样等现代计算方法,对使用者经验和能力构成了很大的挑战。

AAIshangyanxiu的博客 679

反射小结

 1. Class: 是一个类; 一个描述类的类.   封装了描述方法的 Method,        描述字段的 Filed,               描述构造器的 Constructor 等属性.    2. 如何得到 Class 对象:     2.1 Person.class     2.2 person.getClass()     2.3 Class.forName("com...

wiseMale的博客 254

NVIDIA 2025 Board Design Engineer 校招笔试全解析:从基础门电路到理想放大器设计

本文详细解析了NVIDIA 2025届板级设计工程师校招笔试的核心考点与解题策略。内容涵盖从基础门电路、CMOS实现NOR门,到开关电源CCM/DCM模式波形分析与效率计算,以及理想运放电路设计与稳定性优化。旨在帮助考生构建硬件知识体系,掌握工程思维,顺利通过NVIDIA Board Design Engineer校招笔试。

weixin_29172201的博客 195

控制台模拟前端请求实现快速刷网课时长

本教程仅用于学习前端技术和网页开发,旨在提供教育与技术指导。对于任何未经授权或违反规定的使用行为,本人不承担任何责任。注意到那个serive后面有timestamp时间戳,暗示它很可能就是每30秒汇报一次进度和播放时长的命令,我们右键——复制——复制为fetch。有的网站上的网课需要的不仅仅是进度,而是时长,所以倍速插件失效,但我们可以使用控制台命令来模拟请求实现快速刷网课时长。尝试修改即可,例如我修改time为800,然后复制粘贴到控制台执行。播放视频,等待前端请求出现,然后复制前端请求为fetch。

m0_74823408的博客 2066

Java基础--反射机制简单使用(Class<T>类)

//插槽类 public interface InterfaceDemo { public void open(); public void run(); public void close(); } //手机主板类 public class CardSlotDemo { public void run() { System.out.println("主板运行中。。。"); } ...

ekayun 1553

【深度学习】通俗易懂讲解循环神经网络LSTM

目录 1、循环神经网络(Recurrent Neural Networks) 2、长依赖存在的问题 3、LSTM 网络 4、LSTMs的核心思想 5、一步一步理解LSTM 6、LSTM的变种 7、总结 1、循环神经网络(Recurrent Neural Networks) 人对一个问题的思考不会完全从头开始。比如你在阅读本片文章的时,你会根据之前理解过的信息来理解下面看到的文字。...

Nieson2012的专栏 2729

Java 反射

反射(reflection)是 Java 中的一项特性,它允许程序在运行时查询和操作类的信息。即,在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意方法和属性。获取到方法和属性后,就可以对其进行修改。这种动态获取信息以及动态调用对象方法的功能也就是Java的反射机制

2301_76161469的博客 8774

HyperLynx(二十二)DDR(五)DDRx总线时序模型设计

DDR3 的数据选通信号与时钟信号的频率是一样的,在数据选通信号写操作时,控制器典型的输出方式是数据选通信号边沿与时钟近似对齐。该界面中显示了所有需要编辑的参数,包括地址/命令信号的时序、控制信号的时序、读和写操作的数据选通和数据信号时序、写操作的数据选通和数据掩码信号时序,以及建立和保持时间的降额参数。由于DDRx总线对时序的要求非常严格,随着速率的提升,时序的要求会更高。反之也是一样的,如果数据选通信号的上升沿在时钟信号上升沿的后面到达 DRAM,那么数据选通信号的下降沿就会在时钟信号的前面到达。

小幽余生不加糖 1936

STM32实战开发(65):STM32摄像头图像采集开发教程

我们将会详细介绍如何使用STM32进行摄像头控制、图像数据采集以及如何将采集到的图像数据传输到其他设备进行处理。通过这篇博客,您将能够掌握STM32与摄像头模块的图像采集技术,应用于各种图像处理场景。为了确保STM32能够正确接收图像数据,我们需要配置STM32的GPIO引脚,并通过外部中断捕获这些信号。为了实现更高效的图像采集,可以通过DMA进行数据传输,将图像数据直接从GPIO引脚存储到内存中。通过DMA传输,我们可以将采集到的图像数据直接存储在内存中的一个缓冲区,然后进行后续的图像处理。

2201_76125393的博客 2537

UE4-(反射)平面反射

一、创建 注意:平面反射拖拽到场景后,会创建一大块平面,这个平面是临时创建的,当程序运行后,我们不会看到这个平面。 平面反射会捕获反射信息,只能用于平面反射效果,所以只适用于平整的对象,例如镜子,水池水面、窗户玻璃。任何尺寸较小表面平整的对象,都可以用平面反射覆盖。 二、属性 1.平面反射既可以实时渲染,也可以一次性捕获(属性面板中设置) 平面反射使用实时渲染,性能开销非常大,因为平面反射实际上将从反射方向再次对关卡进行渲染。所以要比屏幕空间反射更加精确。 对比: 左侧屏幕空间反射..

Stone的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java反射&python反射

作为一只主学java,次学python的猿,反射的梗,怎能不知道 一、反射是什么: 维基百科上给出的定义:在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。 以我浅薄的编程思想理解的反射: 反射可以让我们在不打开程序文件的情况下,清楚的知道该程序的内部结构...

远处 1475

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

温度PID控制PLC程序

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

java反射三种方法_反射及暴力反射

作者:逯小逯出自:SegmentFault 思否原文:segmentfault.com/a/1190000037432381反射一、概述(1)反射的定位是很重要的,JVM和底层框架都离不开反射(2)反射的原理是拿到你的class文件里的数据,进行数据的操作(CURD)(3)反射提供了丰富的方法,来操作类里的各种数据(属性/方法/构造)(4)REflection(反射)是Java程序开发语言的特征之...

weixin_39586353的博客 2389

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

如何创建反射以及通过反射拿到值

本文介绍了创建反射的三种方式,主要了解如何通过反射获取对象中的构造器、成员变量和成员方法。三种创建反射的方式熟练掌握,学会拿到对象的构造器、成员变量和成员方法,拿到这三个的方式差不多,方法不一样但都有规律,很容易记住。

qq_53118426的博客 1286

漫反射和镜面反射

学习了镜面反射和漫反射以后,不少同学总是误认为看到的物体是光亮的,就是发生了镜面反射;看到的物体是昏暗的,一定是发生了漫反射。造成错误的原因是没有完全理解镜面反射和漫反射的概念。为了帮助同学们理解,我们先通过下面的实验来认识镜面反射和漫反射。   实验让一束太阳光从室外斜射到平面镜上,反射光照在墙壁上,形成一个明亮的光斑;然后将一张白纸放在平面镜上,仍让这束太阳光斜射到白纸上,会发现墙壁上的光斑不见了,而教室里各个位置的同学都能看到这张纸变亮了。   问题为什么同样一束太阳光射到平面镜和白纸上,产生的现

jinking01的专栏 8046

什么是反射,反射用途,spring哪些地方用到了反射,我们项目中哪些地方用到了反射

在Java中,反射(Reflection)是一种强大的工具,它允许程序在运行时类、接口、构造器、方法和字段等。反射是Java语言的一个重要特性,它为开发人员提供了许多灵活性,尤其是在构建框架和库时非常有用。

zhzjn的博客 1824

反射 及 Reflections反射框架

一、类加载过程 要知道反射机制,还需要理解类的加载过程。总的来说,类加载的五个过程:加载、验证、准备、解析、初始化。 除了加载阶段,用户可以通过自定义的类加载器参与,其他阶段都完全由虚拟机主导和控制。 (1)装载 加载指的是把class字节码文件从各个来源通过类加载器装载入内存中。有两处需要说明一下: 字节码来源。一般的加载来源包括从本地路径下编译生成的.class文件,从jar包中的.cla...

1792

什么是反射,为什么要用反射,反射的知识讲解

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

2401_85358130的博客 1092
上一篇: 谈谈final、finally、 finalize有什么不同?
下一篇: 强引用、软引用、弱引用、幻象引用有什么区别?
亦难猿
博客等级 码龄8年 6粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值