八、反射

[STC32G144K246入门第三步]驱动串口收发(接收不定长数据) 本文介绍了STC32G144K246单片机的串口功能配置与使用。该芯片具有8组独立USART,支持异步/同步模式,各串口可独立配置波特率并支持DMA传输。重点讲解了串口寄存器配置方法,包括引脚设置、波特率计算和中断处理。特别指出RX引脚需配置为开漏或准双向口以避免接收乱码。还介绍了通过定时器实现不定长数据接收的技术方案,并提供了完整的初始化代码和中断处理函数示例。文中包含串口时序图、寄存器配置表等实用参考信息,适合嵌入式开发者快速上手多串口应用开发。 阅读详情

1.反射?

   反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2.如何得到类对象

   <1>类名.class
   <2>对象.getClass()
   <3>Class.forName("全限定名");
   <4>类加载的loadClass("全限定名");
   <5>子类.class.getSuperClass();

   <6>包装类.class

package com.zking.test;

import org.junit.Test;

import com.zking.entity.Person;
import com.zking.entity.Son;

public class TestReflect {
	   /**
	    * 获取类对象
	    */
	   @Test
	   public void test1(){
		      try {
			      //第一种方式:实体类.class
//				  Class clazz=Person.class;
//				  System.out.println(clazz);//打印出:class com.zking.entity.Person
				  
			      //2:对象.getClass()
//				  Person per=new Person();
//				  Class clazz=per.getClass();
//				  System.out.println(clazz);//打印出:class com.zking.entity.Person
				  
			      //3:Class.forName("全限定名");
//				  Class clazz=Class.forName("com.zking.entity.Person");
//				  System.out.println(clazz);//打印出:class com.zking.entity.Person
				  
				  //4:类加载的loadClass("全限定名");
//				  ClassLoader cl=Person.class.getClassLoader();
//				  Class clazz=cl.loadClass("com.zking.entity.Person");
//				  System.out.println(clazz);//打印出:class com.zking.entity.Person
				  
				  //5:子类.class.getSuperClass();
//				  Class clazz=Son.class.getSuperclass();
//				  System.out.println(clazz);//打印出:class com.zking.entity.Person
		    	  
		    	  //6:获取包装类的类对象   包装类.class
//		    	  Class clazz=Integer.class;
//		  		  System.out.println(clazz);//打印出:class java.lang.Integer
		  		  
		      } catch (Exception e) {
				   e.printStackTrace();
			  }
	   }
 }


3.根据类得到类名(全限定名)

    c.getName()------------>全限定名
    c.getSimpleName() ---->类名

    c.getPackage()---------->包名

 /**
	    * 根据类对象  获取 类名(全限定名  包名)
	    */
	   @Test
	   public void test2(){
		      Class clazz=Person.class;
		      System.out.println(clazz.getName());//获取全限定名     打印出:com.zking.entity.Person
		      System.out.println(clazz.getSimpleName());//获取类名(不包括包名)   打印出:Person
		      System.out.println(clazz.getPackage().getName());//获取包名     打印出:com.zking.entity
	   }


4.根据类得到类的属性    

    c.getField("field属性名");
    属性名:f.getName()
    属性修饰符:f.getModifiers()
    属性的数据类型:f.getType().getName()
    给属性设值:f.set()
    得到属性的值:f.get()
    得到私有的属性:f.getDeclaredField("属性名");

    得到所有的声明的属性 c.getDeclaredFields()

 
	   /**
	    * 根据类对象 获取 类的属性
	    */
	   @Test
	   public void test3(){
		      try {
		    	    //之前
//					Person person=new Person();
//					//person.setPid(1);
//					Person person2=new Person();
//					//person2.setPid(100);
//					Class clazz=Person.class;
//					Field[] fields=clazz.getFields();//只能获取public修饰的属性
//					Field[] fields2=clazz.getDeclaredFields();//获取所有的属性(包括私有)
//					for (Field field : fields2) {
//						//获取所有属性的属性名
//						System.out.println(field.getName());
//					}
//					
//					System.out.println(fields2.length);
//					//获取单个属性(获取的public)
//					Field field=clazz.getField("pid");
//					//给属性设值
//					field.setInt(person, 100);
//					//获取属性的值
//					System.out.println(field.getInt(person));
//					
//					//获取单个属性(修饰符为private)
//					//Field fieldPname=clazz.getField("pname");
//					Field fieldPname=clazz.getDeclaredField("color");
//					System.out.println(fieldPname);
//					
//					System.out.println("psex的数据类型为:"+fieldPname.getType().getSimpleName());
//					//private 2
//					//public 1
//					//protected 4
//					//默认 0
//					//static 8
//					//final 16
//					
//					System.out.println(Modifier.isPublic(25));
//					
//					System.out.println("color的修饰符为:"+fieldPname.getModifiers());
//					
//					//设置可以访问
//					fieldPname.setAccessible(true);
//					
//					//给私有的属性设值
//					fieldPname.set(person, "admin");
//					
//					//获取私有属性的值
//					System.out.println(fieldPname.get(person));
//					
		    	  
			  } catch (Exception e) {
				  e.printStackTrace();
			  }
	   }
	

  

5.根据类得到类的方法

    c.getMethod()

    c.getDeclaredMethod();       

6.根据类得到类的构造方法

	
	/**
	 * 获取该类所有的构造方法,并执行
	 */
	@Test
	public void test5(){
		Class clazz=Person.class;
		Constructor constructor[]=clazz.getDeclaredConstructors();
		for (Constructor c : constructor) {
			System.out.println(c.getModifiers());
			Class clazzType[]=c.getParameterTypes();
			for (Class cc : clazzType) {
				System.out.println(" "+cc.getSimpleName());
			}
		}
		//调用构造方法(使用构造方法进行实例化对象)
		try {
			//clazz.newInstance();//调用无参构造
			//调用有参构造
			Constructor constru=clazz.getDeclaredConstructor(Integer.class,String.class,Integer.class);
			constru.newInstance(1,"123",2);
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	
	
	
	/**
	 * 根据类对象 获取 类的所有的方法
	 */
	@Test
	public void test4(){
		//获取所有的方法
		Class clazz=Person.class;
		Method methods[]=clazz.getDeclaredMethods();
		System.out.println(methods.length);
		for (Method method : methods) {
			//获取每个方法的名字
			System.out.println(method.getName());
			
			//每个方法的返回值类型
			System.out.println("  "+method.getReturnType().getName());
			
			//每个方法的修饰符
			System.out.println("  "+method.getModifiers());
			
			//获取每个方法的参数列表
			Class[] classType=method.getParameterTypes();
			for (Class c : classType) {
				System.out.println("   "+c.getSimpleName());
			}
		}
		
		
		//调用方法(无参数)
		try {
			Person person=new Person();
			Method method=clazz.getDeclaredMethod("sleep", String.class,String.class);
			//设置可访问
			method.setAccessible(true);
			//执行方法
			method.invoke(person, "小飞和小明","小芳");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


7.根据类得到类的实现接口列表    

/**
	 * 获取实现该类的所有接口 及 父类
	 */
	@Test
	public void test6(){
		Class clazz=Person.class;
		System.out.println(clazz.getSuperclass().getSimpleName());
		//实现的接口
		Class clazzInterface[]=clazz.getInterfaces();
		for (Class c : clazzInterface) {
			System.out.println(c.getSimpleName());
		}
	}


例子(删除实体类后再读取实体类的class文件):

package com.zking.entity;

import java.io.Serializable;

import javax.servlet.http.HttpServlet;

/**
 * 例子:
 * <1>新建实体类Person
 * <2>三个字段:pid pname psex
 * <3>要求该类有父类,并且实现多接口
 * <4>通过反射得到改类所有的属性和方法,父类和实现接口
 * 要求:在控制台打印实体类
 */
public class Person extends HttpServlet implements Serializable,Runnable{
       private Integer pid;
       private String pname;
       private String psex;
       
       //构造方法
       public Person() {
    	  
       }
       public Person(Integer pid, String pname, String psex) {
    	   super();
    	   this.pid = pid;
    	   this.pname = pname;
    	   this.psex = psex;
       }

       //封装
       public Integer getPid() {
    	   return pid;
       }
       public void setPid(Integer pid) {
    	   this.pid = pid;
       }
       public String getPname() {
    	   return pname;
       }
       public void setPname(String pname) {
    	   this.pname = pname;
       }
       public String getPsex() {
    	   return psex;
       }
       public void setPsex(String psex) {
    	   this.psex = psex;
       }
       
       //方法
       public void run() {
    	   // TODO Auto-generated method stub
       }
       public void eat(){
    	      System.out.println("打印吃的方法");
       }
       
       
       

}
package com.zking.diy;

import java.io.FileInputStream;

public class ClassLoaderDIY extends ClassLoader{

	   @Override
		protected Class<?> findClass(String name) throws ClassNotFoundException {
			      System.out.println("自定义加载器:"+name);
		          name=name.replaceAll("\\.", "/");
		          System.out.println("替换后:"+name);
		          
		          //截取
				  int a=name.lastIndexOf("/");
				  name=name.substring(a+1);
		          
		          String path="C:\\Users\\Administrator.USER-20170515AI\\Desktop\\"+name+".class";
		          try {
					  FileInputStream fis=new FileInputStream(path);
					  System.out.println(fis.available());
					  int len=0;
					  byte[] b=new byte[fis.available()];
					  len=fis.read(b);
					  return defineClass(null, b,0,len);
				  } catch (Exception e) {
					  e.printStackTrace();
				  }
			      return null;
		}
	
}
package com.zking.test;

import org.junit.Test;

import com.zking.diy.ClassLoaderDIY;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;


public class TestReflect {

	   @Test
	   public void test1() throws IOException{
		      Map<Integer, String> map=new HashMap<Integer, String>();
		      map.put(0, "\t");
			  map.put(1, "public");
			  map.put(2, "private");
			  map.put(4, "protected");
			  map.put(8, "static");
			  map.put(16, "final");
			  
			  StringBuffer sb=new StringBuffer();
			  Class clazz= null;
		      try {
				   clazz=Class.forName("com.zking.entity.Person", true, new ClassLoaderDIY());
				   sb.append("=======================================================\r\n");
		      } catch (Exception e) {
				   e.printStackTrace();
			  }
			  //拿package+(全限定名  包名);
			  sb.append("package "+clazz.getName().substring(0, clazz.getName().lastIndexOf("."))+";\r\n\r\n");
			  //拿导包(实现接口)
			  Class[] interfaces= clazz.getInterfaces();
			  for (Class cl: interfaces) {
					sb.append("import  "+cl.getName()+";\r\n\r\n");
			  }
			  //拿导包(父类)
			  sb.append("import  "+clazz.getSuperclass().getName()+";\r\n\r\n");
			  /**
			   * public class Person extends HttpServlet implements Serializable,Runnable{
			   */
			  sb.append(map.get(clazz.getModifiers())+" class "+clazz.getSimpleName());//拿public class Person 
			  sb.append(" extends "+clazz.getSuperclass().getSimpleName()+" implements ");//拿extends 父类   implements 
			  //拿实现的接口     
			  int t1=0;
			  for (Class cl : interfaces) {
					t1++;
					if(t1==interfaces.length){
						sb.append(cl.getSimpleName()+"{\r\n");
					}else{
						sb.append(cl.getSimpleName()+",");
					}
			  }
			  /**
			    * 拿属性
			    * private int pid;
				* private String pname;
				* private String psex;
				*/
				Field[] fields=clazz.getDeclaredFields();//获取所有的属性(包括私有)
				for (Field f : fields) {
					sb.append("\t");
					sb.append(map.get(f.getModifiers())+" ");
					sb.append(f.getType().getSimpleName()+" ");
					sb.append(f.getName()+";\r\n");
				}
			  
			  /**
			    *拿构造方法
			    */
				Constructor[] con=clazz.getDeclaredConstructors();
				for (Constructor c : con) {
					sb.append("\t");
					sb.append(map.get(c.getModifiers())+" ");
					sb.append(clazz.getSimpleName()+"(");
					//参数params
					Class[] params=c.getParameterTypes();
					int i=0;
					for (Class cc : params) {
						i++;
						if(i==params.length){
							sb.append(cc.getSimpleName()+" 参数"+i);
						}else{
							sb.append(cc.getSimpleName()+" 参数"+i+",");
						}
				   }
				   sb.append("){\r\n\r\n\t}\r\n");
				}
			
			  /**
				* 获取所有的方法(封装+方法)
				*/
				//拿方法
				Method[] methods=clazz.getDeclaredMethods();
				for (Method m : methods) {
					sb.append("\t");
					sb.append(map.get(m.getModifiers())+" ");
					sb.append(m.getReturnType().getSimpleName()+" ");
					sb.append(m.getName()+"(");
					//方法参数
					//获取方法的参数列表
					Class[] params=m.getParameterTypes();
					int i=0;
					for (Class c : params) {
						i++;
						if(i==params.length){
							sb.append(c.getSimpleName()+" 参数"+i);
						}else{
							sb.append(c.getSimpleName()+" 参数"+i+",");
						}
					}
					sb.append("){\r\n\r\n\t}\r\n");
				}
				sb.append("}");
			    System.out.println(sb);
				   
			   /**
			    * 写入文件   
			    */
//			    File file=new File("D:\\桌面文件\\桌面\\控制台的打印文本.txt");
			    File file=new File("YuHuiLing.java");
			    if(!file.isAbsolute()){
					file.createNewFile();
				}
			    try {
					FileOutputStream fos=new FileOutputStream(file);
					//fos.write(sb.toString().getBytes());
					//fos.close();
					OutputStreamWriter osw=new OutputStreamWriter(fos);
					osw.write(sb.toString());
					osw.close();
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				} 
			    
				   
				//如果WebRoot路径下面没有YuHuiLing.java文件,即按F5刷新一下
				   
		      
	   }
}



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

相关推荐

【SPI-NAND】Linux驱动移植实战:从规格书解析到内核适配

本文详细解析了SPI-NAND Flash的Linux驱动移植实战,从规格书关键参数提取到内核MTD子系统适配。内容涵盖存储结构解析、命令集映射、设备树配置及厂商驱动开发,特别强调ECC校验、坏块管理等NAND特性处理,并提供了性能优化与测试验证的实用技巧。

weixin_27076351的博客 351

java反射机制学习(三):通过反射获取实体类的属性、方法、接口和父类信息

使用的实体类Person: interface China { public static final String NATIONL="中国";//国籍 public static final String NAME="wjl";//姓名 public void getBasicInfo(); public String setBasicInfo(String user...

总有一天,你的日积月累,会成为别人的望尘莫及 1200

分子对接中的相互作用特征分析(目视筛查)

介绍分子对接的相互作用特征,以及如何通过这些特征进行目视筛查

recher_He1107的博客 5757

反射的原理

1.什么是反射? 反射是java语言的一种机制,利用反射机制动态的实例化对象(构造函数)、读写属性、调用方法。 反射就是把java类中的各种成分映射成一个个的Java对象 例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。(其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述) 2. 类类 所有狗 狗类 Dog 狗对象 二哈 所有猫 猫类 Cat...

m0_63814777的博客 599

视频教程-SAP S4 HANA FICO COPA 获利能力分析-ERP

SAP S4 HANA FICO COPA 获利能力分析 从业超过8年的SA...

weixin_33456805的博客 1442

Ubuntu18.04环境搭建与疑难解析:从零复现YOLO-6D姿态估计算法

本文详细介绍了在Ubuntu18.04环境下从零开始复现YOLO-6D姿态估计算法的完整流程,包括系统配置、Conda环境搭建、PyTorch安装、依赖项管理、源代码获取、数据集准备以及训练验证过程。针对Singleshotpose算法的特殊需求,提供了详细的疑难解析和性能优化技巧,帮助开发者高效完成算法复现和应用部署。

weixin_30369041的博客 454

java中使用反射获取pojo(实体)类的所有字段值

说起反射,不得不说它实在是太强大了,通过反射就可以轻轻松松拿到各种东东,如果你想在项目中解除对某个类的依赖,可以考虑用反射。        今天跟大家分享的是通过java中的反射,获取pojo类的所有字段值。        为什么要做这个操作的呢?主要是为了重写实体类的toString方法。有人会说,直接重写toString方法,返回字段.toString()的字符串不就行了。

崔成龙 . 勇往直前 2万+

【Dify系列教程重置精品版】第二章:在Windows上部署Dify

让我们的电脑允许使用Linux系统。有点兴奋是怎么回事?简单来说就是让你的电脑拥有另一个叫做Linux的系统。3.选择“适用于Linux的Windows子系统”与 “虚拟机平台”与“Hyper-V"第1章:安装 wsl (Windows Subsystem for Linux)上一章我们聊了什么是Dify,这一章我们讲一下怎么才能用Dify。好了,我们的环境部署好了,下一章我们正式进入Dify。下载完成后,我们直接一直无脑下一步,安装即可。完成上述步骤,我们就可以开始安装wsl了。我们的虚拟化也是开启的。

xiezhipu的博客 866

Java-Reflection反射-获取包括父类在内的所有字段

前言今天Android移动端要加个新功能,所以回归Android程序员的身份.开发的过程中,发现了之前的代码写的有很多问题,真的应该把时间抽出来重构一下了.其中有反射的一个坑,工具类某方法反射获取传入Model的属性值.但是当我把公共属性抽出来做基类的时候,发现获取不到基类的属性值了.原因是使用了getDeclaredFields();分析 方法 功能 getFields() 获取所有

浅浅同学的开发笔记 7万+

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

AI人人懂 370

3. Matérn协方差模型与随机偏微分方程

对应的高斯马尔可夫随机场 (GMRF)可以通过使用某种随机偏微分方程(SPDE)明确构造,当由高斯白噪声驱动时,随机偏微分方程的解是具有 Matérn 协方差函数的高斯场(GF)

weixin_40614311的博客 1745

(反射):获取一个类的父类和父类的泛型

一、解决问题 获取一个类的父类和父类的泛型 二、实现 Student.java package Test3; public class Student { private String name; private String sex; private String age; public String getNa...

weixin_33758863的博客 335

MicroBlaze系列教程(5):AXI_UART16550的使用

axi-uart16550是Xilinx的一款串口IP核,支持配置成16450或16550模式,16550和16450是指的早期电脑主板上的串口芯片型号,16550相比于16450多了FIFO,现在已经很少使用。相比于,16550支持1或2位停止位,包括uartlite所有的功能,而且支持在SDK中灵活对波特率、数据、校验方式进行配置。与uartlite不同的是,不能单独指定发送中断和接收中断函数,只有一个中断函数,通过event参数来区分当前是发送或接收中断。

whik1194的博客 4541

八、Kotlin 反射

反射是允许在运行时期访问程序结构的一类特性(程序结构包括:类、接口、方法、属性等)。

zengkaiqiang562的博客 1597

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

面试题总结——如何理解反射(“反射”八问)

面试题总结——如何理解反射(“反射”六问)   1、Java的反射机制到底是什么?   Java反射机制是指:在运行状态中,对于任意一个类,都能获得这个类的所有属性和方法,对于任意一个对象都,都能调用他的任意一个属性和方法。这种在运行时动态的获取信息以及动态调用对象的方法的功能成为Java反射机制。   2、为什么要使用反射?反射有什么作用?   反射可以使java代码更灵活,体现在以下方...

xiaoaxiao 1763

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

八、Java之反射

反射 一、获得数据: 获得反射机制: c1=Class.forname(“全类名地址”); c2=new Stident().getClasss(); c3Student.class 获取基本信息 getName 得到包名+类名 getPackageName 得到包名 getSimpleName 得到类名 获得字段名 getField(key) 获得指定修饰符为public的字段,如果有父类且父类中修饰符为public字段也会被找到。 getDeclaredField(key) 获得指定的字段

qq_41343166的博客 187

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

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

八、golang基础之reflect反射

反射可以大大提高程序的灵活性,使得interface{}有更大的发挥余地反射必须结合interface才玩得转 变量的type要是concrete type的(也就是interface变量)才有反射一说反射可以将“接口类型变量”转换为“反射类型对象”反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息反射可以将“反射类型对象”转换为“接口类型变量reflect.value.Interface().(已知的类型)遍历reflect.Type的Field获取其Field。

weixin_54447296的博客 1401

Java笔记八——反射

Class类 class是JVM在执行过程中动态加载的。每加载一种class,创建一个class类型(这个类型的名字就是class)的唯一对象(实例/instance),并关联起来,该实例保存着该class的所有信息,包括类名、报名、父类、实现的接口、所有方法、字段等,可以通过该实例获得class对应的所有信息,这就叫反射,实例反射出class信息。 获取class的class实例 通过一个class的静态变量class获取 Class cls = String.class; 通过实例变量提供的getCl

和风天气ouc 190

八、枚举注解与反射

文章目录一、枚举二、注解三、反射 一、枚举 一、概述 1、JDK1.5引入了新的类型——枚举。 2、在JDK1.5 之前,我们定义常量都是: public static fianl… 很难管理。 3、枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 4、类的对象只有有限个 5、当需要定义一组常量时,强烈建议使用枚举类 二、定义 方式一、jdk5.0之前,自定义枚举类 //自定义枚举类 public class Season { //1、声明Season对象的属性 pri

qq_42643165的博客 368

【Java_Senior】八、反射

反射是允许程序在执行期间获取类的内部信息并操作类内部的属性和方法的特殊机制。静态语言:Java、C、C++;动态语言:Object-c、C#、Python、PHP等类在加载完成后,堆的方法区中会生成一个class对象,反射就是透过这个class对象看到类的完整信息的机制。反射可以在运行时调用类、也可以调用类的私有构造器、属性、方法。注:由于在实际运行过程中,类是动态的,用户要使用什么样的功能,就要创建什么样的类,则就需要反射来创建类。一般在开发过程中,还是优先使用new来创建对象。

weixin_41365204的博客 776

JVM(八)--关于反射

JVM(八)–关于反射 写在前面: 什么是java反射机制?我们又为什么要学它? 当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。我们认为java并不是动态语言,但是它却有一个非常突出的动态相关机制,俗称:反射。 反射就是指程序在运行的时候可以知道一个类的自身信息。 对于任何一个类:可以知道这个类的属性和方法。 对于任何一个对象:可以调用这个对象的任何一个方法和属性。 1. 什么是反射机制? Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一

chen772209的博客 354

Golang通用代码生成器:仙童 电音仙女尝鲜版八,从MySQL8自动反射生成项目

Go语言通用代码生成器:仙童,基于Java通用代码生成器:光的架构。生成的代码基于go语言,使用gin作为web框架。目前支持MariaDB,MySQL,PostgreSQL和Oracle四种数据库。支持生成Vue和ElementUI的基于Node.js的独立前端。支持Excel,PDF两种数据导出格式。

jerryshen的专栏 1025

八、反射与动态代理

八、反射 1、反射的概念 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期间借助于Reflection API获取任何类的内部信息,并能直接操作任意对象的内部属性及方法 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构 2、关于Class类 Object类中定义了public final Class getClass()方法,此方法被所有的子类继承 一个Cl

weixin_46203713的博客 246

Java反射八 数组

在jdk里 java.lang.reflect 包下,专门提供了一个类 public final class Array 用来动态的创建和访问数组.

皂白 594

Java基础(八)——反射机制

前言 啥子是反射机制? Class类 基本概念 获取Class对象的五种方式 newInstance方法(过时) Class类的其他方法 Constructor类 常用方法 来个栗子 我要全部的构造方法! Field类 常用方法 又来个栗子 Method类 常用方法 双来个栗子 获取子类方法时,有无declared的区别

荆州拉人去编程 346

【注解与反射八】通过反射获取注解信息

简单使用: import java.lang.annotation.*; import java.lang.reflect.Field; //练习反射操作注解 public class Test06 { public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException { Class c1 = Class.forName("注解与反射.Student");

hbdhaj的博客 107
上一篇: 七、类加载器
下一篇: 4.常用控件(一)
_北冥有鱼_
博客等级 码龄10年 41粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值