Java_反射

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

反射     程序在运行时获得
会降低程序的运行效率,可以通过一些方法找到一些私有方法和属性,但是会打破程序,尽量不要使用,可以得到父类接口


一:创建一个实体类

public class Person {
	private String name;
	public int age;

	public Person() {
	}

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

	// 私有的方法
	private void method1() {
		System.out.println("我是私有的方法没有返回值");
	}

	private String method2() {
		return "我是私有的,有返回值";
	}

	public void method3() {
		System.out.println("共有,无返回值");
	}

	public String method4() {
		return "共有   有返回值";
	}

	public void method5(String str) {
		System.out.println("传入的值是:" + str);
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}

}


二:反射使用

1:

/**
 * 反射:
 * 
 * 1.  使用反射创建对象
 * 2.  调用成员变量,方法(私有的,共有的)
 * 
 */
public class ConstructorTest {
	public static void main(String[] args) throws Exception {
		//Person p = new Person();调用方法和属性。但是私有的调不到
		//Class 类,和反射相关的类
		//封装类每个类的构造,属性,方法
		//有三种方式获取的一个类的class对象
		
//		Class.forName(className)  通过forName方法加载类。 com.bwei.day14.Person
		Class class1 = Class.forName("com.bwei.day14.Person");//返回值class 类型,就代表Person类
		//获取构造
//		class1.getConstructor(parameterTypes) 有参或者无参,无参,就什么也不填,有参,就将参数类型填上 
//		class1.getConstructors()--------获取全部的构造,返回的是数组
		//获取无参构造
		Constructor constructor = class1.getConstructor();//返回的是构造器
		Object object = constructor.newInstance();//通过构造器构造   构造方法。
		System.out.println(object);
		
		//有参构造
		Constructor constructor2 = class1.getConstructor(String.class,int.class);
		Object object2 = constructor2.newInstance("张三",100);
		System.out.println(object2);
	}
}

2:

/**
 * 	获取属性
 * 	给属性复制
 */
public class FieldTest {
	public static void main(String[] args) throws Exception {
		//获取字节码文件
		Class class1 = Class.forName("com.bwei.day14.Person");
//		//获取属性 Field
//		Field[] fields = class1.getFields();//获取所有的属性,但是只是公有的
//		for (Field field : fields) {
//			System.out.println(field);
//		}
//		System.out.println("-----------------------------------------");
////		class1.getField(name)  参数:变量名字
		Field field = class1.getField("age");
//		//赋值
////		p.setAge(10);
////		field.set(obj  要赋值的对象, value 要赋的值)
		Constructor constructor = class1.getConstructor();
		Object object = constructor.newInstance();
		
		field.set(object, 1000);//给属性赋值
		
		System.out.println(object);
		System.out.println("-------------私有属性如何获取-------------------");
		
		Class class2 = Class.forName("com.bwei.day14.Person");
		
//		class2.getDeclaredField(name) 获取私有属性
		
		Field field2 = class2.getDeclaredField("name");
		//java.lang.IllegalAccessException 非法访问
		field2.setAccessible(true);//设置变量可以访问。暴力破解
		//赋值
		field2.set(object, "李四");
		
		System.out.println(object);
	}
}


3:

/**
 * 
 * 	通过反射:
 * 		1.获取共有方法
 * 		2.获取私有方法
 * 
 */
public class MethodTest {
	public static void main(String[] args) throws Exception {
		//获取字节码文件
		Class class1 = Class.forName("com.bwei.day14.Person");
		//获取共有的方法,包括父类的共有的方法
//		Method[] methods = class1.getMethods();
//		for (Method method : methods) {
//			System.out.println(method);
//		}
		//获取method1
		Method m1 = class1.getDeclaredMethod("method1", null);//参数1.方法名字。参数2. 方法的参数类型
		m1.setAccessible(true);
		//怎么调用invoke
		Constructor constructor = class1.getConstructor();
		Object object = constructor.newInstance();
//		m1.invoke(obj,对象 args 参数列表)
//		Exception in thread "main" java.lang.NoSuchMethodException: com.bwei.day14.Person.method1()
		m1.invoke(object, null);
		//有返回o值
		Method method = class1.getDeclaredMethod("method2", null);
		method.setAccessible(true);
		Object obj = method.invoke(object, null);
		System.out.println(obj);
	}
}




东方财富 vs 新浪 vs AKShare:3 种股票实时数据接口性能与稳定性实测对比 本文深度评测了东方财富、新浪和AKShare三种股票实时数据接口的性能与稳定性。通过实际测试数据,从延迟、成功率和数据完整性三个维度进行全面对比,为量化交易和数据分析开发者提供选型参考。结果显示,东方财富接口在实时性和稳定性方面表现最优,适合高频交易场景。 阅读详情

相关推荐

LM Studio 模型加载与转换实战指南:从GGUF格式到本地部署

本文提供了使用LM Studio加载与转换GGUF格式大语言模型的完整实战指南。详细阐述了为何GGUF格式是本地部署的最佳选择,并逐步指导用户如何将非GGUF模型(如Transformers格式)转换为GGUF格式,以及在LM Studio中进行加载、配置GPU卸载等关键优化,最终实现流畅的本地离线对话体验。

weixin_29061425的博客 918

Java 反射

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

2301_76161469的博客 8774

鸿蒙平板PC应用开发:在termux中安装ubuntu

打开AVNC点击右上角的设置图标,然后点击 输入 , 点击手势栏目中的 单指轻扫 ,选择滚动远程内容

DMZDAMS的博客 5200

Java之反射

1.什么是反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于 任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的 方法的功能称为java语言的反射机制。 2.Class类对象的三种实例化模式 在默认情况下我们是根据包名.类名找到类。而反射是根据对象来取得对象的信息来源。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所 以先要获取到每一个字节码文件对应的Clas....

柠檬精 4万+

Docker 实战:使用 Docker Desktop 在 MacOS 上安装 Docker

在这采用 Docker Desktop 在 Mac 上来安装 Docker。Docker Desktop 是 Docker 的管理桌面 IDE,提供了一个直观的GUI(图形用户界面),允许您直接在本机上管理容器、应用程序以及镜像。适用于 Mac、Linux 以及 Windows 环境,允许您构建、共享和运行容器化应用程序和微服务。Docker Desktop 可以大大降低在复杂配置上的时间,因此您可以专注于编写代码。它负责端口映射、文件系统问题和其他默认设置,并定期更新 Bug 修复和安全更新。

SmartSi 8006

ardupilot如何让官网支持自己的硬件方案

本节主要记录ardupilot中如何让官网支持自己的硬件方案。参考1参考2。

陌城烟雨 159

java反射&python反射

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

远处 1475

为Ollama本地大模型添加持久化记忆层:openclaw-ollama-memory项目详解

在构建基于大型语言模型(LLM)的对话应用时,上下文管理是核心技术挑战之一。其原理在于模型本身不具备跨会话的持久化记忆能力,每次请求都是独立的。这导致在多轮对话中,模型无法有效利用历史信息,用户体验割裂。从技术价值看,独立的记忆层通过解耦推理与存储,能突破模型固定上下文窗口的限制,实现更智能、连贯的交互。其核心应用场景包括聊天机器人、智能助手及需要长期记忆的复杂代理。本文聚焦的 openclaw-ollama-memory 项目,正是为 Ollama 生态提供的记忆层解决方案,它通过向量检索和智能摘要等机制

weixin_42521558的博客 312

Java 的反射

Java反射机制允许程序在运行时动态获取类信息并操作对象,是Java动态性的核心体现。反射通过Class类获取类结构,包括构造方法、字段和方法,还能创建对象、调用方法和修改字段值。反射支持泛型类型信息获取,广泛应用于框架开发、动态代理等场景。尽管反射功能强大,但性能开销较大,且可能破坏封装性,需谨慎使用。

weixin_73916358的博客 1252

RTK_ROS_导航(4):接入move_base

现在我们要将之前的数据接入到Move_base中,使得机器人能够根据Map上的终点进行导航,并且实现避障效果如下图。

旋风小短腿 1946

如何程序化的将 Wire 文件转换成 STEP、CATIA、DWG、NX、FBX 等格式

Wire 文件是专有格式,只有 Autodesk Alias 软件能够直接打开和编辑。 虽然可以在 Alias 软件中手动打开文件并导出为 STEP,但在实际工作中,经常会遇到需要转换数十甚至数百个文件的场景。如果每次都手动操作软件进行转换,不仅效率低下,还容易出错,批量场景下会非常麻烦。因此,程序化、自动化的转换方案变得至关重要。

weixin_44211633的博客 450

Java 反射体系

Java反射(Reflection)是Java语言的一个重要特性,它允许运行中的Java程序对自身进行检查,并且可以直接操作程序的内部属性。通过反射,我们可以在运行时获取类的信息、创建对象、调用方法以及访问和修改字段等。Java反射体系主要包括以下几个核心类:Class类:代表一个类或接口。每个类都有一个对应的Class对象,该对象包含了类的所有信息,如名称、父类、实现的接口、构造器、方法和字段等。可以通过以下几种方式获得Class类名.class对象.getClass()

weixin_47363690的博客 1512

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

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

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

weixin_39586353的博客 2389

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java 反射_反射实例——JAVA反射机制

一、Java反射反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作...

weixin_39713578的博客 138

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JAVA反射

Java是先编译再运行的语言,程序中对象的类型在编译期就确定下来了;而当程序在运行时需要动态加载某些类时(这些类因为之前用不到没有被加载到JVM),通过反射可以在运行时动态地创建对象并调用其属性,我们不需要提前在编译期知道运行的对象是谁。Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。Java反射机制的本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取t对象的各种信息。java反射详解。

qq_39239864的博客 959

Java反射之方法反射demo

Java反射之方法反射demo package reflect; import java.lang.reflect.Method; public class ClassDemo3 { public static void main(String[] args) { String s = "hello"; ClassUtil.printClassMethodMessage(s

龙腾四海365的专栏 2692

Java 反射机制[Method反射]

Java 反射机制[Method反射] 接着上一篇Java 反射机制[Field反射],通过调用Person类的setName方法将obj的name字段的Value设置为"callPersonSetNameMethod"来了解什么是Method反射。示例代码很简单,很容易理解。 可以看到Method.invoke()实际上并不是自己实现的反射调用逻辑,而是委托给sun.reflect.MethodAccessor来处理。 真正的反射是调用MethodAccessor.invoke

Stop Tears 1970

Java反射概念及类的反射

Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接

wangliaizq10000的专栏 7390

java反射

方法说明返回一个Method类型的数组其中包含 所有公共(public)方法。返回一个Method类型的数组其中包含 所有方法。>...返回一个公共的Method方法对象。>...返回一个方法Method对象。

qq_74947724的博客 955

Java—反射

Java反射

且将&的博客 684

java 反射

参考资料: Java反射技术详解_黄林晴的博客-优快云博客_java反射 Java高级篇(四)——反射 - JAdam - 博客园 一、什么是反射   反射就是把Java类中的各个成分映射成一个个的Java对象。 即在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能调用它的任意一个方法和属性。 这种动态获取信息及动态调用对象方法的功能叫Java的反射机制。 1. 反射机制的功能   Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属

喵酱 2851
上一篇: Android_EventBus简单传值
下一篇: Android_注解与泛型
绅V科技
博客等级 码龄9年 61粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值