反射机制

反射机制

反射的定义:
	反射是指在程序运行期间,能够观察和修改类或者类的对象的属性和行为的特性
项目开发中常见的使用反射的场景 
    使用JDBC连接数据库 
    Servlet在Web容器中的加载和运行

反射机制的作用:
Java反射机制提供了以下的功能
	1、在运行时获取类的修饰符,包名,类名,实现的接口,继承的父类 
	2、在运行时获取类的所有属性名,修饰符,属性类型 
	3、在运行时获取所有方法,方法的返回值类型,方法名,方法参数数量,方法参数类型 
	4、在运行时调用加载类的方法

Java反射API常用的类:
	java.lang.Class   //反射的核心类,通过Class类可以获取类的属性、方法等信息
	java.lang.reflect.Method   //类的方法
	java.lang.Constructor    //类的构造方法
	java.lang.Field   //类的属性
	java.lang.Modifier  


访问类包含的构造方法的常用方法
	Constructor getConstructor(Class[] params)
		例如:Constructor co=cla.getConstructor(lString.class,List.clss);
	Constructor[] getConstructors()   //返回所有public构造方法
	Constructor getDeclaredConstructor(Class[] params)  //返回Class对象所包含的类的指定构造方法
	Constructor[] getDeclaredConstructors()   //返回Class对象所包含的类的全部构造方法

访问类包含的方法的常用方法
	Method getMethod(String name,Class[] params)  //name参数用于指定方法名称
    	例如:Method met=cla.getMethod("setName", String.class);
	Method[] getMethods()  //返回所有public方法
	Method getDeclaredMethod(String name,Class[] params)  //返回Class对象所包含的类的指定方法
	Method[] getDeclaredMethods()  //返回Class对象所包含的类的全部方法


访问类包含的属性的常用方法
	Field getField(String name)   //name参数用于指定属性名称
		例如:Field field=cla.getField("age"); 
	Field[] getFields()   //返回所有public属性
	Field getDeclaredField(String name)  //返回Class对象所包含的类的指定属性
	例如:Field nameField=cla.getDeclaredField("name");
	Field[] getDeclaredFields()  //返回Class对象所包含的类的全部属性

反射实战:
	使用Java反射获取类的信息
	使用Java反射获取类的构造函数的参数列表,并通过构造函数实例化类 
	使用Java反射获取类的所有方法的信息,并调用类的setter方法进行属性的赋值 
	使用Java反射获取类的所有属性的名称和类型,并为其中一个属性赋值

反射的应用:
	1、获取类的信息
	2、创建对象
    	两种方式:
       	 	a)使用Class对象的newInstance()方法创建对象
        	b)使用Constructor对象创建对象
	3、访问类的属性
	4、访问类的方法
	5、使用Array类动态创建和访问数组

获取类对象的三种方式
	1、类型.class
		Class<Student> stu=Student.class;
	2、class.forName("类型的全路径名");
		Class ss = Class.forName("cn.kgc.kb09.Student");
	3、对象.getClass()
		TestStudent s=new TestStudent();
		Class sc=s.getClass();


通过类对象获取构造方法
	方法1
		Constructor<Student> con=stu.getConstructor();
	方法2
		Constructor<Student> con=stu.getDeclaredConstructor();
		con.setAccessible(true);

单例模式

单例模式:一个系统中,只允许存在该类的一个对象

public class Teacher {
	private static Teacher t=null;//自己本类的私有对象
	private Teacher(){
    	//不允许随意创建对象
	}
	/* //懒汉式
    public synchronized static Teacher getInstance(){
    	if (t==null){
    	t=new Teacher();
	}
 	return t;
	}*/

	/* //饿汉式
	static {
    	t=new Teacher();
	}
	public static Teacher getInstance(){
    	return t;
	}*/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值