Java-反射

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

Class类

1、概念

Class:这个是一个类的名字叫Class,代表的是一类事物。java程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class;
java类的作用:java类是描述一类事物的共性,该类有什么属性,没有什么属性,至于这个类是什么,类是不管的,它只管你应该还有什么东西,不应该有什么东西,但是定义一个具体的值是什么,它是不管的;
举例:
|--众多的人可以用人来表示;人:姓名、年龄、身高;
|--众多的java类可以用Class来表示;java类:类的名字,这个类属于哪个包,这个类里面有哪些成员变量,方法、父类是什么?

因此通过这个Class可以得到这个类身上的方方面面的信息;

2、Class一些基本的方法:

|--String getName()  以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
|--Package getPackage()  得到自己所属的包
|--Method[] getMethods() 得到自己所有的方法列表
|--Class<?>[] getInterfaces()  得到自己所有的多个实现接口

3、Class类型的变量赋值

|--Class类是没有构造方法的,因此不能直接new对象的;
|--Class cls1 = 字节码1;
|--Class cls2 = 字节码2;
|--字节码:当用到Person类的时候,首先要从硬盘上把这个类的而进制代码(编译成class放在硬盘上以后,就是二进制代码),把这些二进制代码加载到内存里面,在用这个字节码复制出一个个对象来;
|--当java的程序里面用到了,Date,Math和Person这三个类,那么内存里面就有三份字节码,每一个字节码都是Class的实例对象;
|--Date.class-->表示Date在内存中的那份字节码;Class cls1 = Date.class;
|--Person.class-->表示Person在内存中的那份字节码
|--获取类的字节码方式:
|--p1.getClass();-->类的字节码已经加载到了内存里面了,想要得到它的字节码,就不要加载了,直接至啊到那个字节码,返回就可以了;
|--Class.forName("java.lang.String");-->这种是在虚拟机里面没有这份字节码,于是就用类加载器去加载,加载进来以后,就把那份字节码给缓存起来,这个方法返回刚才加载进来的那份字节码;

4、获取各个字节码对应的实例对象

|--类名.class-->System.class,这个是在写程序的时候就已经把System给写上了;

|--对象.getClass()-->new Data().getClass();

|--Class.forName("类名")-->Class.forName("java.util.Date");这个是反射的时候用的最多的一个,因为在写程序的时候还不知道类的名字,是在运行的时候,别人传给我一个字符串,而这个字符串里面包含一个类的名字;就是在写源程序的时候,可以把"java.util.Date"换成一个变量,就是字符串类型的变量,等到程序运行起来以后,这个变量的值从一个配置文件里面加载进来;就是类的名字在写源程序的时候,不需要知道,而是等到运行的时候,临时送进来;

|--基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。

|--以上是9个预定义的Class实例对象;

5、代码举例

<span style="font-family:Microsoft YaHei;">class  ReflectTest
{
	public static void main(String[] args) throws Exception
	{
		String str1 ="abc";
//		得到String类型的字节码
		Class cls1 = str1.getClass();
		Class cls2 = String.class;
		Class cls3 = Class.forName("java.lang.String");

		System.out.println(cls1 == cls2);
		System.out.println(cls1 == cls3);
//		看cls1的字节码是否是原始类型,String类型不是基本类型的字节码
		System.out.println(cls1.isPrimitive());
//		int的字节码是否是基本类型的字节码
		System.out.println(int.class.isPrimitive());
//		看看int类型的字节码和Integer类型的字节码是否相同
		System.out.println(int.class == Integer.class);
//		Integer.TYPE代表的是包装类型所包装的那个基本类型的字节码
		System.out.println(int.class == Integer.TYPE);
//		数组类型的int是不是元素类型,是一个数组
		System.out.println(int[].class.isPrimitive());
//		判断是不是数组
		System.out.println(int[].class.isArray());

	}
}</span>

6、运行结果

反射

1、概念

反射就是把Java类中的各种成分映射成相应的java类;例如一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等其他信息也用一个个Java类来表示的

2、Class类中的一些常用的方法

|--Package getPackage()  获取方法,返回来的方法又是用一个方法来表示的

|--Method getMethod(String name, Class<?>... parameterTypes)  返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。

|--Field getField(String name) 返回的成员变量又是用一个类来表示

Class:代表一份字节码

|--Field:代表的是字节码里面的字段

|--Method:代表的是字节码里面的方法

|--Constructor:代表字节码里面的一个构造方法

|--Package:代表的是字节码里面的包

Constructor类

1、概念

|--Constructor类代表的某个类中的一个构造方法
|--Constructor:代表字节码里面的一个构造方法

2、常用方法

|-- Class<T> getDeclaringClass() 得到自己所属的类
|--  int getModifiers()  得到前面的修饰符
 |-- T newInstance(Object... initargs)  获取实例对象
|--要想得到某个类所有的构造方法
|--Constructor[] constructor = Class.forName("java.lang.String").getConstructors();

|--得到某一个构造方法

|--Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);

|--调用方法时要用到类型;

|--创建实例对象:

|--通常方式:new String(new StringBuffer("abc"));

|--反射方式:String str1 = (String)constructor1.newInstance(new StringBuffer("abc"));

|--调用获得的方法时要用到上面相同类型的实例对象;

|--Class.newInstance()方法:

|--T newInstance()   这个是Class里面的

|--T newInstance(Object... initargs) 这个是Constructor里面的

|--创建一个类的实例对象步骤:

|--Class 是把中间的环节给省略掉了 class-->new object

|--class-->constructor-->new object  这个是 Constructor 里面的

3、代码体现

<span style="font-family:Microsoft YaHei;font-size:14px;">import java.lang.reflect.Constructor;
class  ReflectTest
{
	public static void main(String[] args) throws Exception
	{
		String str1 ="abc";
//		得到String类型的字节码
		Class cls1 = str1.getClass();
		Class cls2 = String.class;
		Class cls3 = Class.forName("java.lang.String");

		System.out.println(cls1 == cls2);
		System.out.println(cls1 == cls3);
//		看cls1的字节码是否是原始类型,String类型不是基本类型的字节码
		System.out.println(cls1.isPrimitive());
//		int的字节码是否是基本类型的字节码
		System.out.println(int.class.isPrimitive());
//		看看int类型的字节码和Integer类型的字节码是否相同
		System.out.println(int.class == Integer.class);
//		Integer.TYPE代表的是包装类型所包装的那个基本类型的字节码
		System.out.println(int.class == Integer.TYPE);
//		数组类型的int是不是元素类型,是一个数组
		System.out.println(int[].class.isPrimitive());
//		判断是不是数组
		System.out.println(int[].class.isArray());

		//要想得到一个构造方法
		//String(StringBuffer buffer)
		//Constructor 对象这个构造方法;
		//要识别那个构造方法通过参数来识别的,接收的参数类型是StringBuffer
		//传了两个参数,是StringBuffer的构造方法;JDK1.5的可变参数;class对应一个类型
		//Constructor<T> getConstructor(Class<?>... parameterTypes)  
		Constructor constructor1 = String.class.getConstructor(StringBuffer.class);//StringBuffer表示选择哪个构造方法
		// T newInstance(Object... initargs)  获取实例对象,newInstance可以调用多次,每调用一次用new了一个对象
		String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));//要用一个强制类型转换;StringBuffer用这个构造方法的时候要传一个StringBuffer的对象进去;
		System.out.println(str2.charAt(2));
	}
}

//new String(new StringBuffer("abc"));
// Class<T> getDeclaringClass() 得到自己所属的类
// int getModifiers()  得到前面的修饰符
// T newInstance(Object... initargs)  获取实例对象
//
//Package getPackage()  获取方法,返回来的方法又是用一个方法来表示的
//Method getMethod(String name, Class<?>... parameterTypes)  返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
//Field getField(String name) 返回的成员变量又是用一个类来表示
//java类身上的每一个产成分,解析成一个相应的类
//Field
//Method
//Constructor
//Package
//System里面有个exit和getProperties()
//两个方法
//不管你是什么方法,这些类型都可以用Method方法来表示
//而每一个不同的方法,对应的是methodobj1,和methodobj2
//但是这两个对象属于同一个类型,就是Method,Method代表这个类型,而methodobj1代表的是一个具体的方法;</span>

Field类

1、概念

|--Field:代表的是字节码里面的字段,就是成员变量
|--Field代表的是某个字节码身上的变量,不代表某个对象身上的变量

2、代码体现

<span style="font-family:Microsoft YaHei;font-size:14px;">package com.itheima;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

public class ReflectTest {

	public static void main(String[] args)throws Exception {
		String str1 ="abc";
//		得到String类型的字节码
		Class cls1 = str1.getClass();
		Class cls2 = String.class;
		Class cls3 = Class.forName("java.lang.String");

		System.out.println(cls1 == cls2);
		System.out.println(cls1 == cls3);
//		看cls1的字节码是否是原始类型,String类型不是基本类型的字节码
		System.out.println(cls1.isPrimitive());
//		int的字节码是否是基本类型的字节码
		System.out.println(int.class.isPrimitive());
//		看看int类型的字节码和Integer类型的字节码是否相同
		System.out.println(int.class == Integer.class);
//		Integer.TYPE代表的是包装类型所包装的那个基本类型的字节码
		System.out.println(int.class == Integer.TYPE);
//		数组类型的int是不是元素类型,是一个数组
		System.out.println(int[].class.isPrimitive());
//		判断是不是数组
		System.out.println(int[].class.isArray());

		//要想得到一个构造方法
		//String(StringBuffer buffer)
		//Constructor 对象这个构造方法;
		//要识别那个构造方法通过参数来识别的,接收的参数类型是StringBuffer
		//传了两个参数,是StringBuffer的构造方法;JDK1.5的可变参数;class对应一个类型
		//Constructor<T> getConstructor(Class<?>... parameterTypes)  
		Constructor constructor1 = String.class.getConstructor(StringBuffer.class);//StringBuffer表示选择哪个构造方法
		// T newInstance(Object... initargs)  获取实例对象,newInstance可以调用多次,每调用一次用new了一个对象
		String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));//要用一个强制类型转换;StringBuffer用这个构造方法的时候要传一个StringBuffer的对象进去;
		System.out.println(str2.charAt(2));
		
		ReflectPoint pt1 = new ReflectPoint(3,5);
//		要得到某个类身上的字段,也就是成员变量,要先得到类的字节码,类的字节码里面有成员变量的信息
//		要得到字节码,在然后得到某个字段,要想得到那个字段,就要用变量的名字来区别,变量名就是字符串
		Field fieldX = pt1.getClass().getDeclaredField("x");//getDeclaredField可以获取私有的,只要是声明过的都可以获取;
		fieldX.setAccessible(true);//设置为可以访问,暴力反射;
//		fieldY 的值是多少?是5  错!  fieldY只是代表类字节码身上的变量,没有对应到对象,也就是说fieldY不是代表一个具体的值,而是代表一个变量
//		要想取出某个变量在某个对象身上所对应的值
//		fieldY.get(pt1);//在哪个对象身上去取这个y的值;代表的是类身上的东西
		
		Field fieldY= pt1.getClass().getField("y");
		System.out.println("y="+fieldY.get(pt1));
		System.out.println("x="+fieldX.get(pt1));
	}

}</span><span style="font-size:18px;">
</span>

3、运行结果

4、Field练习

需求:将任意一个对象中的所有String类型的成员变量所对应的字符串内容中能够的"b"改成"a".

就是说把String类型中的b改成a;

该一个对象,可以讲其全部修改了,比如在配置文件里面配置了好多东西,自动扫描配置文件,把里面有的东西有的换掉,一个模拟程序,换掉一个对象里面的字段;

5、字段练习

<span style="font-family:Microsoft YaHei;font-size:14px;">class  ReflectPoint
{
	public static void main(String[] args) 
	{
		private int x;
		private int y;
	}
}
package com.itheima;
//ReflectPoint上的String类型所有的b都改成a;
public class ReflectPoint {
	private int x;
	public int y;
	public String str1 ="ball";
	public String str2 ="basketball";
	public String str3 ="itcast";
	
	public ReflectPoint(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
//为了打印效果好,将toString方法覆盖
	@Override
	public String toString() {
		return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3="
				+ str3 + "]";
	}
}
private static void changeStringVlaue(Object obj) throws Exception{
//		 扫描这个ReflectPoint对象上所有的String类型的变量
//		获取对象的字节码,在获取字段
		Field[] fields = obj.getClass().getFields();
//		对字段进行迭代
		for(Field field : fields){
//			得到字段自己的类型field.getType(),如果field的类型是String类型的,两个都是String类型的,两个不好比
//			if(field.getType().equals(String.class)){
//			这里应该用的是==,因为是同一份字节码,只要是字节码用等号比较;
			if(field.getType() == String.class){
//				在obj对象上拿到一个值,用一个强转,
				String oldValue = (String)field.get(obj);
				String newValue = oldValue.replace('b', 'a');
//				要字段身上的值进行设置值;对象身上的值被修改了
				field.set(obj, newValue);
			}
		}
		
	}

public class ReflectTest {

	public static void main(String[] args)throws Exception {
		changeStringVlaue(pt1);
		System.out.println(pt1);
	}
}</span><span style="font-size:18px;">
	</span>

Method类

1、概念

|--Method:代表某一类中的一个成员方法;
|--Method:代表的是字节码里面的方法,不是对象上面的方法,然后拿着这个方法去调用对象;

2、代码体现

<span style="font-family:Microsoft YaHei;font-size:14px;">//		str1.charAt(1);
//		用反射的方式得到字节码里面的方法
		Method methodCharAt = String.class.getMethod("charAt", int.class);
//		拿着这个方法去作用于某个对象;invoke:调用;
		System.out.println(methodCharAt.invoke(str1, 1));</span>
面向对象:调用方法,是方法去调用一下,所以是methodCharAt方法去调用一下;谁拥有这个数据,谁就能操作这个数据;
<span style="font-family:Microsoft YaHei;font-size:14px;">//		str1.charAt(1);
//		用反射的方式得到字节码里面的方法
		Method methodCharAt = String.class.getMethod("charAt", int.class);
//		拿着这个方法去作用于某个对象;invoke:调用;
		System.out.println(methodCharAt.invoke(str1, 1));
//		按照1.4的语法来调用的
		System.out.println(methodCharAt.invoke(str1, new Object[]{2}));//2是一个数值,该数组的长度是1,数值是2,也就是角标为2的对应值
//		new Object(new String("abc"),8);
	
//		这个是正常一般的方法;
//		TestArguments.main(new String[]{"111","222","333"});
		String startingClassName = args[0];
		Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
//		报一个参数的个数不对;这个是三个参数,包成了一包,而java把这个包给拆开了,它认为是一个三个参数
//		现在用 new Object,给了包的东西,现在是一个数组,就是一个东西;
//		把数组打包起来
		mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
//		这个动作是让不要拆包,做了一个强制动作;
		mainMethod.invoke(null, (Object)new String[]{"111","222","333"});
	
//		是数组的话,就差包,不是数组的话,就不拆包</span>

数组的反射

<span style="font-family:Microsoft YaHei;font-size:14px;">int [] a1 = new int[]{1,2,3};
		int [] a2 = new int[4];
		int[] [] a3 = new int[2] [3];
		String[] a4 = new String[]{"a","b","c"};
//		a1和
		System.out.println(a1.getClass() == a2.getClass());
//		System.out.println(a1.getClass() == a4.getClass());  false
//		System.out.println(a1.getClass() == a3.getClass());  false
		System.out.println(a1.getClass().getName());   //-->[I
//		获取父类名  发现父类的名字都是Object
		System.out.println(a1.getClass().getSuperclass().getName()); 
//		二位数组;  发现父类的名字都是Object
		System.out.println(a4.getClass().getSuperclass().getName());
		
//		Object是一个数组
		Object aObj1 = a1;
		Object aObj2 = a4;
//		int是不能转成Object,因为是int类型的和Integer不同,而一维是int[] 是Object,String类型的也是Object的
//		Object[] aObj3 = a1;这个是编译失败
//		表示有一个数组,这个数组里面装的是Object,int类型的数组int[]就是Object
		Object[] aObj4 = a3;
		Object[] aObj5 = a4;
		
		System.out.println(a1);
		System.out.println(a4);
//		想要打印元素;
//		整数按照的是一个参数走的
		System.out.println(Arrays.asList(a1));//整数的没有转过来
//		数组等效于多个元素;
		System.out.println(Arrays.asList(a4));//字符串的转过来了</span>

数组反射的应用

<span style="font-family:Microsoft YaHei;font-size:14px;">//	数组也是Object
	private static void printObject(Object obj) {
		Class clazz = obj.getClass();
//		判断是否是数组
		if(clazz.isArray()){
//			是数组的话就要取出每一个
			int len = Array.getLength(obj);
			for(int i =0;i<len;i++){
//				打印数组
				System.out.println(Array.get(obj, i));
			}
		}else{
			System.out.println(obj);
		}
		
	}</span>

 

我的总结

|--每一份字节码文件都是Class的实例对象;
|--有8个基本的数据类型,就对应了8个基本的实例对象
|--数组类型的Class实例对象,用的是Class.isArray();
|--总之是在源程序中出现的类型,都有各自的Class实例对象,例如int[],void类型;
|--反射就是把java类中的各种成分映射成相应的java类;
|--要的到各个成分所对应的对象,用这个对象做一些事情;
|--要创建一个类的实例对象步骤;
|--反射比较耗时;因为要把功能缓冲起来;导致程序性能严重下降
|--反射构造方法:得到类身上的字节码构造方法,在用构造方法去new一个实例对象
|--反射的字段的用途:可以写一个模拟程序,换掉一个对象里面的字段
|--字节码里面的方法主要是:先拿到方法,再针对某个对象去调用方法;
|--如果传递给Method对象的invoke()方法的第一个参数是null,意味着:该Method方法对象对一个的是有一个静态方法;
|--对于main的方法反射如何去调用;
|--如何不要当作多个参数:有两种方案;
|--把数组打包成为另外一个数组,拆了一个数组,剩下的就是另外一个数组;
|--还有一种就是,你就把它当成object,不要拆包;

|--Arrays.asList()方法处理int[]和String[]时的差异。

|--Arrays用于完成对数组的反射操作;

|--数组的反射:给的如果是数组,就把数组拆下来,拆成每一个,一个个的打印,如果不是数组类型的,那么就一起打印;

|--反射的作用主要是用来实现框架。

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

相关推荐

时间序列聚类在股票市场分析中的实践与优化

时间序列聚类是一种面向动态行为建模的无监督学习方法,其核心在于通过语义感知的距离度量(如DTW)捕捉价格形态的相位弹性与结构相似性,而非依赖静态数值或标签驱动。相比K-Means等传统算法,它能有效缓解金融时序中普遍存在的噪声敏感、对齐失效与形态失真问题,从而提升聚类结果的市场可解释性与策略鲁棒性。该技术已广泛应用于市场状态识别、行业行为分群、异常交易监测等场景,并成为构建可验证量化分析框架的关键预处理层。本文聚焦A股真实行情数据,详解从原始OHLCV到可聚类时间序列的完整链路,涵盖DTW距离计算、层次聚类

weixin_34220179的博客 832

Java之反射

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

柠檬精 4万+

免费,Python蓝桥杯等级考试真题--第10级(含答案解析和代码)

Python中蓝桥杯算是含金量和难度最大的比赛之一,网上可以找到不少真题,不过要么零零散散要么付费才能解锁,而且大都是没答案和解析的,给学习者造成很大困扰。因此本文档打算整理历年等级考试、STEMA、省赛、国赛真题卷和解析,供大家学习参考。

1579

Java 反射

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

2301_76161469的博客 8778

显示发光---LED/OLED/LCD/AMOLED原理图介绍

显示发光不同原理介绍

Classical_Man的博客 2856

Zemax操作41--公差分析(一)

zemax公差

lzy750750的博客 5974

java反射&python反射

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

远处 1475

SPI扩展CAN方案:从寄存器配置到多路通信实战

本文详细介绍了SPI扩展CAN方案的实现方法,从寄存器配置到多路通信实战。通过使用MCP2517FD芯片和SPI接口,可低成本扩展多路CAN通道,适用于工业控制领域。文章涵盖硬件设计、寄存器配置、中断优化及性能调优等核心内容,帮助开发者高效解决设备节点过多的问题。

weixin_42657024的博客 362

Java 的反射

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

weixin_73916358的博客 1252

电影台词预测类型:NLP小样本多标签分类实战

电影类型预测本质上是短文本语义建模问题,核心在于从高度碎片化、低语义密度的台词(平均仅12.7词)中挖掘隐含的类型学编码规则。其技术难点在于:需应对省略主语、倒装、拟声词等非规范表达;处理Drama与Comedy等类型强共现的多标签耦合;并克服领域迁移障碍——维基文本预训练模型在台词上性能骤降0.11。解决方案聚焦RoBERTa微调、类型感知注意力机制与标签平滑策略,兼顾小样本鲁棒性与业务可解释性,广泛适用于影视元数据标注、智能推荐系统及NLP教学实践。

weixin_33309048的博客 291

【学习系列】SAP RAP 16:RAP应用部署集成至Fiori Launchpad 【On-Premise】

本文详细介绍了如何将开发完成的RAP应用部署到S4HANA 2023 On-Premise环境并集成到Fiori Launchpad的完整流程。主要内容包括:1)通过ADT工具创建Fiori项目并配置外部IDE(VSCode);2)使用npm命令部署应用到系统;3)通过事务代码创建语义对象、磁贴目录和目标映射;4)配置PFCG角色分配;5)补充了部署失败解决方案、翻译问题处理、自定义主题设置以及登录页面LOGO修改等内容。文章提供了step-by-step的操作指南,帮助开发者将预览模式的应用正式部署到生产

DeveloperMrMeng的博客 637

Java 反射体系

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

weixin_47363690的博客 1513

【K8S系列】Kubernetes 中 Pod 无法通过 Service 名称访问服务的 DNS 解析失败问题【已解决】

在 Kubernetes 中,Service 提供了一种稳定的方式,通过名称访问一组 Pod。当其他 Pod 无法通过 Service 名称访问服务,并且出现 DNS 解析失败时,通常会导致应用无法正常工作。本文将详细分析此问题的常见原因及其解决方案。

颜淡慕潇 1万+

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

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

weixin_39713578的博客 139

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

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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的专栏 2693

深度学习工具包 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反射概念及类的反射

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

wangliaizq10000的专栏 7390

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java 反射机制[Method反射]

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

Stop Tears 1970

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

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

weixin_39586353的博客 2390

java反射

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

qq_74947724的博客 955

JAVA反射

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

qq_39239864的博客 959

Java 反射 VS Kotlin 反射

Kotlin 跟 Java 可以无缝衔接,因此 Kotlin 能够使用 Java 的反射机制。另外,Kotlin 也有自己的反射机制,需要额外地引入 kotlin-reflect.jar。...

Java与Android技术栈 1013
上一篇: Java-网络编程
下一篇: Java-面试题思路分析
fyldragonfyl
博客等级 码龄12年 9粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值