欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

J2EE--反射

程序员文章站 2022-05-15 11:21:02
...

反射

1.定义:
反射是一种机制,可利用反射机制动态的实例化对象,
读写属性,调用方法以及构造函数。
2.获取类对象的三种方式:
注意:一切反射相关的代码都是从获取类对象开始的
1>类名.class

Class cla = Student.class;

2>对象名.getClass()

Student stu = new Student();
Class cla = stu.getClass();

3>Class.forName(全限定名/全路径名)

		Class cla = Class.forName("com.zking.reflect.entity.Student");
		Student stu = (Student)cla.newInstance();

3.根据类得到类名(全限定名/全路径名)
cName.getName()
cName.getSimpleNname()
cName.getPackage()
cNmae.getModifiers()

		System.out.println("类的全限定名"+cla.getName());
		System.out.println("类名:"+cla.getSimpleName());
		System.out.println("获取包名:"+cla.getPackage());
		System.out.println("类的访问修饰符:"+cla.getModifiers());

4.根据类名得到类的属性:

		//1.获取类的属性(公共的,私有的,受保护的,最终的等等)
		//1.1获取类的单个属性(公共的)
		//Field field = cla.getField("age");
		
		//1.2获取类的单个属性(公共的,私有的,受保护的,最终的等)
		//Field field = cla.getDeclaredField("sname");
		//System.out.println("属性名"+field.getName());
		//System.out.println("属性的类型"+field.getType());
		//System.out.println("属性的访问修饰符"+field.getModifiers());
		
		//1.3 赋值和取值
		//参数1:类的对象
		//参数2:所要赋值的值
		//注意设置访问权限
		//field.setAccessible(true);
		//field.set(stu, "张三");
		//取值
		//Object obj = field.get(stu);
		//System.out.println("sname="+obj);
		
		//1.4获取类中的所有属性
		//Field[] fields = cla.getFields();
		//Field[] fields = cla.getDeclaredFields();
		//for (Field field : fields) {
			//System.out.println("属性名"+field.getName());
			//System.out.println("属性的类型"+field.getType());
			//System.out.println("属性的访问修饰符"+field.getModifiers());
			//System.out.println("--------------------------------------");
		//}

5.根据类得到类的方法:

		//2.获取类的方法
		//方法的种类:无参无返回,无参有返回,有参无返回,有参有返回
		//2.1获取类中的单个方法(公共的)
		//参数1:方法名
		//参数2:可变参数
		Method method =  cla.getMethod("setSid", String.class);
		//执行方法,并得到方法的返回值
		Object invoke = method.invoke(stu, "张三");
		System.out.println(invoke);
		
		//2.2获取类中的单个方法(公共的,私有的,受保护的,最终的)
		Method method = cla.getDeclaredMethod("add", Integer.class,Integer.class);
		//设置访问权限
		method.setAccessible(true);
		//执行方法
		Object value = method.invoke(stu, 10,5);
		System.out.println(value);
		
		//2.3获取类中的所有方法
		Method[] methods = cla.getMethods();
		for (Method method : methods) {
			System.out.println("方法名:"+method.getName());
			System.out.println("方法的访问修饰符:"+method.getModifiers());
			System.out.println("方法的返回值类型:"+method.getReturnType());
			System.out.println("--------------------------");
		}
		

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

		//3.构造函数
		//3.1获取类中的单个构造函数(公共的)
		Constructor con = cla.getConstructor(String.class,String.class);
		con.newInstance("p001","张三");
		
		//3.2获取单个构造方法(包括私有、受保护、默认、公有)
		Constructor con = cla.getDeclaredConstructor(Integer.class);
		con.setAccessible(true);
		con.newInstance(21);
		
		//3.3获取所有的公有构造方法
		Constructor[] const1 = cla.getConstructors();
		for (Constructor con1 : const1) {
			System.out.println(con1);
		}
		System.out.println("---------------------");
		//3.4获取所有的构造方法(包括私有、受保护、默认、公有)
		Constructor[] const2 = cla.getDeclaredConstructors();
		for (Constructor con1 : const2) {
			System.out.println(con1);
		}

7.根据类得到类食物实现接口列表:

Class[]  interfaces = cla.getInterfaces();
相关标签: J2EE