java的反射技术

Java反射技术是什么 Java反射技术是什么 Java反射技术是指在运行时动态获取类的信息,并对类进行操作的一种技术。Java反射技术可以让程序在运行时动态地创建对象、调用方法、获取属性等,使程序更加灵活、扩展性更强。 阅读详情
     java的反射机制:
          我们都知道,一个java类中,有成员变量、成员方法、构造方法等等,反射机制,就是动态的获取这些类中的信息,并动态的调用对象的方法。通常只有要设计框架的过程中,才会使用java反射相关的api,但是了解java反射机制的基本原理与基本方法,可以帮忙我们在日后对框架的学习与应用提供很大的帮忙。

     了解Class类:
          Class类代表着某个类的字节码,要使用反射,就需要取得对应的Class对象,然后就通过这个对象,就可解剖出类的成员变量,成员方法等等。
  Class类的常用方法:
  getConstructor() 获取构造函数
  getMethod()  获取成员方法
  getField() 获取成员变量
   
  getDeclaredConstructor() 获取私有的构造函数
  getDeclaredMethod()  获取私有的成员方法
  getDeclaredField() 获取私有的成员变量

     如何获取Class类对象:
		//通过Class的forName()方法,此方法最为常用
		Class class1 = Class.forName("com.java4fun.reflect.Person");
		//通过 Person.class
		Class class2 = Person.class;
		//通过对象获得
		Class class3 = new Person().getClass();

反射的使用,简单的讲,就是通过类的Class对象,获取对应的Field、Method 和 Constructor 对象,并进行相关操作。
下面就用反射来解剖Person类,给出Person类:
public class Person {
	
	public String name = "java";
	private int age = 2013;
	
	//无参构造函数
	public Person() {
	}
	
	public Person(int age) {
		super();
		this.age = age;
	}
	//私有构造函数
	private Person(String name) {
		super();
		this.name = name;
	}

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

	public int getAge() {
		return age;
	}

	public String getName() {
		return name;
	}

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

	public void setName(String name) {
		this.name = name;
	}

	public static void getMessage(String message){
		System.out.println(message);
	}
	
	public static void getFriends(String friends[]){
		for(String s:friends){
			System.out.print(s+"\t");
		}
	}
	
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
	private void secret(String secret){
		System.out.println(secret);
	}
	
	public void run(int num){
		System.out.println(num);
	}
}



构造函数的获取:
import java.lang.reflect.Constructor;

public class ConstructorTest {
	// 利用反射技术,完成对Person.类的相关操作
	public static void main(String[] args) throws Exception {
		 constructor1(); //无参构造函数的获取与使用
		 constructor2(); // 带参数的构造函数的获取使用
		 constructor3(); // 私有的构造函数的获取使用
	}

	// 获取私有构造函数
	private static void constructor3() throws Exception {
		// 获取Person的字节码对象。
		Class clazz = Class.forName("com.java4fun.reflect.Person");
		// 获取私有构造函数对象。
		Constructor c = clazz.getDeclaredConstructor(String.class);
		// 由于私有的构造函数无数直接构造对象,需要调用setAccessible(),
		//此方法来自于AccessibleObject 类,它是 Field、Method 和 Constructor 对象的基类
		c.setAccessible(true);
		// 利用这个构造函数,构造一个Person对象
		Person p = (Person) c.newInstance("private constructor");
		System.out.println(p);
	}

	// 访问带参数的构造函数
	private static void constructor2() throws Exception {
		// 获取Person的字节码对象。
		Class clazz = Class.forName("com.java4fun.reflect.Person");
		// 获取带参数的构造函数对象。
		Constructor c = clazz.getConstructor(String.class, int.class);
		// 利用这个构造函数,构造一个Person对象
		Person p = (Person) c.newInstance("hello", 110);
		System.out.println(p);
	}

	// 访问无参构造函数
	private static void constructor1() throws Exception {
		// 获取Person的字节码对象。
		Class clazz = Class.forName("com.java4fun.reflect.Person");
		// 获取无参的构造函数对象。
		Constructor c = clazz.getConstructor(null);
		// 利用这个构造函数,构造一个Person对象
		Person p = (Person) c.newInstance(null);
		System.out.println(p);

		// Class类也提供了一个可直接用无参构造函数构造对象的方法
		// Person person = (Person) clazz.newInstance();
		// System.out.println(person);
	}
}

成员方法的获取:
import java.lang.reflect.Method;

public class MethodTest {
	// 利用反射技术,完成对Person.类的相关操作
	public static void main(String[] args) throws Exception {
		 //method1(); //无参成员方法的获取与使用
		// method2(); // 带参数成员方法的获取使用
		 //method3(); // 私有成员方法的获取使用
		method4(); // 参数是数组的方法解决方法
	}

	// 获取无参成员方法
	private static void method1() throws Exception {
		// 获取Person的字节码对象。
		Class clazz = Class.forName("com.java4fun.reflect.Person");
		// 获取无参的方法, 反射Person类的中 public String getName(){}方法
		Method m = clazz.getMethod("getName", null);
		//运行这个方法,由于方法的运行需要对象,为了方便,在这里直接通过传统的方法创建一个对象。
		Person p = new Person("HelloWorld",23);
		String name = (String) m.invoke(p, null);
		System.out.println(name);
	}
	
	// 获取带参数的成员方法
	private static void method2() throws Exception {
		// 获取Person的字节码对象。
		Class clazz = Class.forName("com.java4fun.reflect.Person");
		// 获取带参数的方法, 反射Person类的中 public void run(int num){}方法
		Method m = clazz.getMethod("run", int.class);
		//运行这个方法,由于方法的运行需要对象,为了方便,在这里直接通过传统的方法创建一个对象。
		Person p = new Person("HelloWorld",23);
		m.invoke(p, 11111);
	}
	
	// 获取私有的成员方法
	private static void method3() throws Exception {
		// 获取Person的字节码对象。
		Class clazz = Class.forName("com.java4fun.reflect.Person");
		// 获私有的方法, 反射Person类的中 private void secret(String secret){}方法
		Method m = clazz.getDeclaredMethod("secret", String.class);
		//让私有方法可以访问
		m.setAccessible(true);
		//运行这个方法,由于方法的运行需要对象,为了方便,在这里直接通过传统的方法创建一个对象。
		Person p = new Person("HelloWorld",23);
		m.invoke(p, "最近变胖了");
	}

	// 参数是数组的方法解决方法
	private static void method4() throws Exception {
		// 获取Person的字节码对象。
		Class clazz = Class.forName("com.java4fun.reflect.Person");
		// 获静态方法, 反射Person类的中 public static void getFriends(String friends[]){}方法
		Method m = clazz.getMethod("getFriends", String[].class);
		
		//这样调用方法会出错,由于版本的遗留问题,new String[]{"java","c","c++"}会被认为是"java" "c"  "c++"
		//m.invoke(null, new String[]{"java","c","c++"});
		//相当于getFriends("java","c","c++");
		
		//正确调用方法,相当于把数组当成一个对象传入
		m.invoke(null, (Object)new String[]{"java","c","c++"});
	}
}

成员属性的获取:
import java.lang.reflect.Field;

public class FieldTest {
	// 利用反射技术,完成对Person.类的相关操作
	public static void main(String[] args) throws Exception {
		 method1(); // 获取属性
		 method2(); // 获取私有属性
	}

	// 获取属性
	private static void method1() throws Exception {
		// 获取Person的字节码对象。
		Class clazz = Class.forName("com.java4fun.reflect.Person");
		// 获取属性, 反射Person类的中 public String name = "java";属性
		Field f = clazz.getField("name");
		// 使用属性,需指定对象,为了方便,在这里直接通过传统的方法创建一个对象。
		Person p = new Person();
		Class type = f.getType();
		if (type.equals(String.class)) {
			String name = (String) f.get(p);
			System.out.println(name);
		}
	}

	// 获取私有属性  
	private static void method2() throws Exception {
		// 获取Person的字节码对象。
		Class clazz = Class.forName("com.java4fun.reflect.Person");
		// 获取私有属性, 反射Person类的中 private int age = 2013;属性
		Field f = clazz.getDeclaredField("age");
		f.setAccessible(true);
		// 使用属性,需指定对象,为了方便,在这里直接通过传统的方法创建一个对象。
		Person p = new Person();
		Class type = f.getType();
		if (type.equals(int.class)) {
			int age = f.getInt(p);
			System.out.println(age);
		}
	}
}




全面掌握Java反射技术课程 本文还有配套的精品资源,点击获取 简介:Java反射技术是一项允许程序在运行时检查和操作其他类、接口、对象和方法的强大工具。本培训课程深入讲解了Java反射机制的基础知识,包括Class类的使用、类结构的获取、高级反射操作、动态代理机制以及反射在工厂设计模式中的应用。课程旨在帮助开发者掌握Java的动态特性,提升编程的灵活性和扩展性。 1. Java反射技术概述 ... 阅读详情

相关推荐

嵌入式开发 DSP芯片运行方式(挖坑-填坑中-坑已平 :))

TMS320F28335 DSP 芯片 如何将运行代码放在不同的位置

FOOLCODE的专栏 1306

反射

1、什么是反射技术? 动态获取指定类以及类中的内容(成员),并运行其内容。 应用程序已经运行,无法在其中进行new对象的建立,就无法使用对象。这时可以根据配置文件的类全名去找对应的字节码文件,并加载进内存,并创建该类对象实例。这就需要使用反射技术完成 2、获取class对象的三种方式 获取Class对象的方式一: 通过对象具备的getClass方法(源于Object类的方法)。有点不方便...

qq_42611148的博客 285

GitLab社区版vs企业版:本地部署性能对比与选型建议(含实测数据)

本文深入对比GitLab社区版(CE)与企业版(EE)在本地部署中的性能差异与功能特性,提供实测数据与选型建议。测试显示EE版在并发克隆、CI流水线启动等场景性能提升显著,尤其适合需要高级安全合规与CI/CD功能的团队。文章还包含硬件配置指南与成本效益分析,帮助技术决策者做出明智选择。

weixin_28828243的博客 294

JavaEE之反射

反射定义简单表述: 对于任意一个(动态的)运行中的类,我们都可以解剖它,获取类中的构造方法,成员变量,成员方法. 类的加载 (1)加载 就是指将class文件读入内存,并为之创建一个Class对象。 任何类被使用时系统都会建立一个Class对象 (2)连接 验证是否有正确的内部结构,并和其他类协调一致 准备负责为类的静态成员分配内存,并设置默认初始化值 解析将类的二进制数据中的符...

weixin_30851409的博客 224

Android14_MTK调试LCD屏功能

android14 MTK平台调试LCD屏

m0_37786046的博客 1472

如何用谷歌插件Apollo.io高效开发客户?手把手教你避开常见坑点

本文详细介绍了如何利用谷歌插件Apollo.io高效开发外贸客户,包括核心功能解析、免费额度最大化利用策略、多插件协同技巧以及常见陷阱规避方法。通过Apollo.io的智能匹配算法和庞大数据库,外贸从业者可以精准锁定目标客户,提升开发效率。

banana的博客 885

JavaEE中Reflect反射的作用是?

通过反射机制可以动态的实例化对象、读写属性、调用方法。 反射(Reflection)是一种机制,是框架的必学技,是框架设计的灵魂 框架的底层代码都是采用了反射机制。 Java反射相关的主要API java.lang.Class 代表一个类 java.lang.reflect.Method 代表类的方法 java.lang.reflect.Field 代表类的成员变量(属性) java.lang.reflect.Constructor 代表类的构造方法 使用反射机制的前提条件:必须先得到

Do_LaLi的博客 272

Java 简易版 UDP 多人聊天室

【代码】Java 简易版 UDP 多人聊天室。

nmy15570188135的博客 1187

Java反射技术详解

前言 相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替代了,java反射有个开源框架jOOR相信很多人都用过,不过我们还是要学习发射的基础语法,这样才能自己写出优秀的框架,当然这里所讲的反射技术,是学习Android插件化技术、Hook技术等必不可...

黄林晴 24万+

2021秋招IC验证面经-ARM中国/中科芯/飞腾/地平线/中兴

中科芯 (央企福利待遇好,但是百分百不解决户口,适合当地人进去躺平。) 现场面试,三个面试官,时间大约40min 首先介绍一下自己,介绍一下项目。所做项目用到了FIFO吗,深度是多少,位宽是多少,仲裁算法是什么? 验证环境中的reference model是自己写的还是本身就有的,仲裁怎么在参考模型中实现,参考模型怎么获取寄存器的值? 怎么配置RTL寄存器,通过平台的寄存器模型进行寄存器配置,寄存器模型里边的方法,写一个寄存器或读一个寄存器怎么实现? 寄存器如何实现前门访问和后门访问,后门访问时

weixin_48014653的博客 6319

第4章-07-将WebDriver获取的Cookie传递给Requests

在使用Selenium WebDriver获取了浏览器的Cookies之后,你可以将这些Cookies传递给requests库,以便在后续的HTTP请求中使用这些Cookies。这样做可以让你模拟浏览器会话,使得请求看起来像是从之前使用Selenium WebDriver控制的浏览器发出的。

黑夜开发者的博客 692

java反射(转)

Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。 那么什么是Java的反射呢? 大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类如果不被Java虚拟机加载,是不能正常运行的。现在我们运行的所有的程序都是在编译期的时候就已经知道了你所需要的那个类的...

lorry1113的专栏 1250

Windows 11 WSL2环境下OpenClaw部署的兼容性问题分析与解决方案研究

本文研究了OpenClaw在Windows 11 WSL2环境下的部署方案。WSL2通过无缝集成Linux与Windows系统,为OpenClaw提供了良好的运行环境,支持GPU加速和跨平台开发。文章详细分析了硬件配置要求(推荐8核CPU/16GB内存/NVMe SSD)、系统选择(Windows 11 Pro+Ubuntu 22.04)以及部署步骤,包括WSL2启用、Linux发行版安装、Python/Node.js/Redis等依赖配置。通过优化.wslconfig文件参数(如内存分

博客 2279

java反射技术

反射技术代码: package myreflect; import org.junit.Test; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.Propertie...

Java2020xiaoxian的博客 239

深度学习工具包 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")

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java 反射技术实例,什么是反射技术?Java中最常用的反射技术实例

什么是反射技术?动态获取指定类以及类中的内容(成员),并运行其内容。应用程序已经运行,无法在其中进行new对象的建立,就无法使用对象。这时可以根据配置文件的类全名去找对应的字节码文件,并加载进内存,并创建该类对象实例。这就需要使用反射技术完成,还有就是在一个类中,为了不让外界访问到有的属性和方法,通常将其设置为private,这时我们就可以java反射带来的便利访问类的私有属性及方法:最常用的反射...

weixin_31884143的博客 123

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java反射技术

Java反射技术 概述 反射:主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 直白的讲,大家可以把java中的反射理解为:使用一种技术在程序运行时就能去操作java对象中的属性、方法、构造方法等。 正常编程逻辑中,我们的代码都是先编译成.class再运行,在程序运行时是不能去添加一些代码或者改变一些属性的,...

蔡茂的博客 712

JAVA中的反射技术

之前的学习一直都没有文字记录,发现过一段时间之后某些知识点就会遗忘,所以今后所学习的知识点将记录下来,以便以后用来复习。 这次来说说JAVA中的反射技术,说起反射技术我对于它一直以来都是一种懵逼的状态,有一种非常排斥它的心理。在实际中JAVA的反射机制非常重要,我们使用的许多的开发框架都是基于反射实现的。如果不能很好的理解学习反射技术将会对今后的学习或技术提升将是一个非常大的阻碍。 什么是反射? ...

zbj17602900546的博客 1448

JAVA之反射技术总结

目录概述好处三个阶段获取class对象Source源代码阶段获取Class类对象阶段获取Runtime运行阶段获取样例使用class对象Student类源码获取成员变量使用成员变量综合样例获取构造方法使用构造方法综合样例获取成员方法使用成员方法综合样例反射技术综合案例---创建任意对象 概述   设计框架的灵魂 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码。 反射:将类的各个组成部分封装为其他对象 好处 可以在程序运行过程中,操作这些对象。 可以解耦,提高程序的可扩展性。 三个阶段

Eva_xiaoxi的博客 326

java反射技术_Java反射技术详解

反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员。简单说:反射技术可以对一个类进行解剖。反射的好处:大大的增强了程序的扩展性。反射的基本步骤:1、获得Class对象,就是获取到指定的名称的字节码文件对象。2、实例化对象,获得类的属性、方法或构造函数。3、访问属性、调用方法、调用构造函数创建对象。获...

weixin_35599418的博客 126

Java 反射技术

       Java 反射技术应用广泛,它能够配置:类的全限定名、方法和参数,完成对象的初始化,甚至是反射某些方法。这样就可以大大增强 Java 的可配置性,Spring IoC 的基本原理也是如此,当然 Spring IoC 的代码要复杂的多。        Java 的反射内容繁多,包括对象构建、反射方法、注解、参数、接口等。本文主要讲解对象构建(包括没有参数的和有参数的构建方法)和方法的反...

chunqizhi 482

Java中的反射技术

在上面的示例代码中,我们使用了Java中的反射技术获取了ArrayList类的信息,操作了它的属性和调用了它的方法,最后还创建了一个新的ArrayList实例。Java中的Class类提供了获取类的信息的方法,例如getName()方法可以获取类的名称,getFields()方法可以获取类的公共属性,getMethods()方法可以获取类的公共方法等。Java中的反射技术是一种强大的工具,它可以让程序员在运行时动态地获取类的信息并操作类的属性、方法和构造函数等。

码奴一只猿 104

java的反射技术_Java:反射技术

本文内容: 产生反射技术的需求反射技术的使用一个小示例首发日期:2018-05-10产生反射技术的需求:项目完成以后,发现需要增加功能,并且希望增加功能并不需要停止项目运行。在希望不关停项目运行的情况下,于是考虑到将功能都放到一个单独的项目之外的模块中,每一个功能实现都从这个模块中获取【实际上这个考虑应该是项目开始前就考虑,这个例子可能不是很好】。于是就有了反射的产生。(这种思想有点类似工厂模式,...

weixin_33387339的博客 107

Java的反射技术

1、Java 反射技术   Java反射技术应用广泛,它能够配置:类的全限定名、方法和参数,完成对象的初始化,甚至是反射某些方法。这样可以大大增强Java的可配置性,如Spring IoC 的基本原理也是反射,当然Spring IoC 的代码要复炸得多,还有其他的技术结合。   Java 的反射内容繁多, 包括对象的构建、反射方法、注解、参数、接口等。这次主要讲一下对象的构建和反射的方法。在Java中,反射是通过包java.lang.reflect.* 来实现的。 2、通过反射构建对象   在...

gman344的博客 166
上一篇: 工厂设计模式
下一篇: java的内省
Sweeter
博客等级 码龄14年 81粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值