栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

27.反射

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

27.反射

1. 反射(重点)
1.1 反射概述

 概述:反射对象,就是类对象,是类加载的产物,
     只要有了类对象,就可以知道类的所有信息(类名,接口,包名,属性,方法等)
    获取类对象方式:
    1.类名.class  (常用)  
    2.对象.getClass()   
    3.Clas.forname("包名.类名")  (常用)
    结论:无论哪种方式获取的类对象,都是同一个

Class class1 = Person.class;
		Class class2 = new Person().getClass();
		Class class3 = Class.forName("com.qf.d_reflect.Person");
		
		System.out.println(class1==class2); //true
		System.out.println(class1==class3); //true

1.2 反射常用方法
 

Class clazz1 = Person.class;  //获取反射对象
		
		System.out.println(clazz1.getName()); //获取类名
		System.out.println(clazz1.getPackage());  //获取包名
		System.out.println(clazz1.getSuperclass()); //获取父类
		System.out.println(Arrays.toString(clazz1.getInterfaces())); //获取接口
		System.out.println(Arrays.toString(clazz1.getFields())); //性能高,不能处理私有权限属性
		System.out.println(Arrays.toString(clazz1.getDeclaredFields())); //(常用)可以处理私有权限
		System.out.println(Arrays.toString(clazz1.getMethods()));//(常用)
		System.out.println(Arrays.toString(clazz1.getConstructors())); //获取所有构造器
		System.out.println(clazz1.getDeclaredField("name"));  //(常用) 获取Field对象
		System.out.println(clazz1.getMethod("test"));  //(常用) 获取Method对象 
		System.out.println(clazz1.newInstance()); //调无参构造 (常用)

1.3 反射操作属性

通过反射对象,给私有属性赋值及取值
1.获取反射对象
2.获取Field对象
3.调用set方法赋值 ,通过get方法取值

        Class clazz = Student.class;
		Field field = clazz.getDeclaredField("name");
		field.setAccessible(true);  //开启私有权限
		Student st = (Student) clazz.newInstance();
		field.set(st, "zsf");

1.4 反射操作方法

1.获取反射对象
2.通过反射获取Method对象,传方法名和反射类型
3.通过Method对象调invoke方法

反射作用:可以灵活动态操作属性和方法

        Class class1 = Student.class;
		//获取Method对象,参数1:方法名    后面参数:参数类型反射对象
		Method method = class1.getMethod("hello", String.class,int.class);
		method.invoke(class1.newInstance(), "小明",28);
	}

1.5 反射应用场景

//使用反射灵活获取对象
		Teacher t1 = Tool.getObject(Teacher.class);
		Student s1 = Tool.getObject(Student.class);
		System.out.println(t1+"---"+s1);

//泛型方法
	public static  T getObject(Class class1) throws InstantiationException, IllegalAccessException {
		return class1.newInstance();
	}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号