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);
	}
}




基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性和先进性。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值