Java 反射机制学习(一)

本文深入探讨了Java反射API的原理与应用,通过具体示例展示了如何利用反射API获取类信息、调用方法和访问属性,以及在实际开发中的常见应用场景。包括对象的getClass()方法、Class.forName()静态方法、类名直接引用、Java封装类的反射等,并介绍了反射API在创建对象、获取构造方法、获取方法与字段等方面的应用。

定义:在运行过程状态中,对于任意一个类,都能够知道这个类所有属性和方法;任意的一个类,可以调用它的方法;

应用: Spring 框架 IOC(控制反转);Hibernate 关联映射;白盒测试

反射API:java.lang: Class<T>:表示一个正在运行的java应用程序的类和接口 ,是Reflection的起源



package TestPacageX;

public class ReflectTest {
	public static void main(String[] args){
	 Class<?> c1=null;	
	 Class<?> c2=null;
	 Class<?> c3=null;
	 Class<?> c4=null;
//方式一:使用对象的getClass()
	Person p=new Person("test",100);
	c1=p.getClass();
	System.out.println(c1.getName());
    //方式二: static method Class.forName() 最常使用
	
	try{
		c2=Class.forName("TestPacageX.Person");
	}catch(Exception e){
		e.printStackTrace();
		
	}
    // 方式三:使用。class语法
	c3=Person.class;
	
	//方式四:如果是机JAVA封装类,使用Type语法
	c4 = Integer.TYPE;
	System.out.println(c2.getName());
	System.out.println(c3.getName());
	System.out.println(c4.getName());
	
	}
}
class Person{
	private String name;
	private int age;
	
	public Person(){
		
	}
     public Person(String name, int age){
    	 this.name=name;
    	 this.age=age;
    	 System.out.println(name);
    	 System.out.println(age);
	}
     public Person(String name){
    	 this.name=name;
    	 System.out.println(name);
		
	}
     public Person(int age){
    	 this.age=age;	
    	 System.out.println(age);
	}
    
}
<pre name="code" class="html">test
100
TestPacageX.Person
TestPacageX.Person
TestPacageX.Person
int


package TestPacageX;

import java.lang.reflect.Constructor;

public class ReflectTest {
	public static void main(String[] args){
		// 获得所有的公有的构造方法
	try{
		Class<?> c =Class.forName("TestPacageX.Person");
		System.out.println("指定参数类型所有的公有的构造方法");
		Constructor[] constructors1=c.getConstructors();
		for(int i=0;i<constructors1.length;i++)
			System.out.println(constructors1[i].toGenericString());
		//获得特定参数类型的公有构造方法
		System.out.println("指定参数类型的公有的构造方法");
		try{
		Constructor constructors2=c.getConstructor(new Class[]{String.class,int.class});
		System.out.println(constructors2.toGenericString());
		}catch(Exception e){
			e.printStackTrace();		
		}
		//获得特定参数类型的构造方法
		System.out.println("指定参数类型的构造方法");
		try{
		Constructor constructors3=c.getDeclaredConstructor(new Class[]{String.class,int.class});
		System.out.println(constructors3.toGenericString());
		}catch(Exception e){
			e.printStackTrace();		
		}
		// 获得所有的构造方法
		System.out.println("获得所有的构造方法");
		Constructor[] constructors4=c.getDeclaredConstructors();
		for(int i=0;i<constructors4.length;i++)
			System.out.println(constructors4[i].toGenericString());
		
	}catch(ClassNotFoundException e){
		e.printStackTrace();
		
	}
	
 }
}
class Person{
	private String name;
	private int age;
	
	public Person(){
		
	}
     public Person(String name, int age){
    	 this.name=name;
    	 this.age=age;
    	 System.out.println(name);
    	 System.out.println(age);
	}
     private Person(String name){
    	 this.name=name;
    	 System.out.println(name);
		
	}
     public Person(int age){
    	 this.age=age;	
    	 System.out.println(age);
	}    
}
指定参数类型所有的公有的构造方法
public TestPacageX.Person(int)
public TestPacageX.Person(java.lang.String,int)
public TestPacageX.Person()
指定参数类型的公有的构造方法
public TestPacageX.Person(java.lang.String,int)
指定参数类型的构造方法
public TestPacageX.Person(java.lang.String,int)
获得所有的构造方法
public TestPacageX.Person(int)
private TestPacageX.Person(java.lang.String)
public TestPacageX.Person(java.lang.String,int)
public TestPacageX.Person()






内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值