1.什么是反射?
反射是一种机制,利用反射机制动态的实例化对象、读写属性、调用方法、构造函数。
2.如何得到类对象
一切反射相关的代码都从获得类对象开始
3种获取方式:
2.1 类名.class;
2.2 对象名.getClass();
2.3 Class.forName(全限定名/全路径名) // 传统方式
Hello hello = new Hello();
System.out.println("hello=" + hello);
//反射方式
Class cls = Class.forName("com.zking.reflect.entity.Hello");
Object hello1 = cls.newInstance();
System.out.println(hello1);
// 1)一切与反射相关的操作都从获取类对象开始(3)
Class cls= Hello.class;
// 2)对象名.getClass()
// 3)Class.forName(类的全路经名/权限定名)
Class cls= Class.forName("com.zking.reflect.entity.Hello");
System.out.println("获取类的全路径名="+cls.getName());
System.out.println("获取类的简单的类名="+cls.getSimpleName());
System.out.println("获取访问修饰符="+cls.getModifiers());
System.out.println("获取包名="+cls.getPackage());
3.根据类得到类名(全限定名/全路径名)
1)cName.getName(); -->获取全限定名
2)cName.getSimpleName(); -->获取类名
3)cName.getPackage(); -->获取包名 4.根据类得到类的属性
Field field=cla.getField(“属性名”);
field.getName(); -->获取属性名
filed.getType(); -->获取属性类型
field.getModifiers(); -->获取属性访问修饰符
field.set(Object,Object); -->设置属性值,参数1:要设置属性所在对象;参数2:要设置的值;
field.get(Object); -->获取属性值,参数:要获取属性值的对象
field.getDeclaredField(“属性名”); -->获取单个属性(私有、公有、受保护、默认、静态)
field.getDeclaredFields(); -->获取所有属性(私有、公有、受保护、默认、静态)5.根据类得到类的方法
//无参无返回、无参有参会、有参无返回、有参有返回
cla.getMethod(); -->获取单个公有方法
cla.getDeclaredMethod(); -->获取当个方法(包括私有、受保护、默认、公有)
cla.getMethods(); -->获取所有公有方法
cla.getDeclaredMethods(); -->获取所有的方法(包括私有、受保护、默认、公有)// 获取类对象
Class cls = Student.class;
// 反射机制实例化对象
Student stu = (Student) cls.newInstance();
4.读取属性(Field)
1)获取单个公共的属性
Field field=cls.getField("name");
2)获取单个公共的,私有的,受保护的,最终的..属性
只要是有公开的就是用getDeclaredField("age");
Field field = cls.getDeclaredField("sid");
3)获取所有的公共的属性
Field[] fields=cls.getFields();
Field[] fields=cls.getDeclaredFields();
//4)获取所有公共的,私有的,受保护的,最终的..属性
for (Field field : fields) {
System.out.println("获取属性名="+cls.getName());
System.out.println("获取属性访问修饰符="+cls.getModifiers());
System.out.println("获取属性类型="+cls.getPackage());
}
6.根据类得到类的构造方法
cla.getConstrutor(); -->获取单个公有构造方法
cla.getDeclaredConstrutor(); -->获取单个构造方法(包括私有、受保护、默认、公有)
cla.getConstrutors(); -->获取所有的公有构造方法
cla.getDeclaredConstrutors(); -->获取所有的构造方法(包括私有、受保护、默认、公有)6.获取方法构造函数(Method)
// 有参有返,有参有返,无参有返,无参无返
// 1)获取单个公共的方法
Method method=cls.getMethod("hello", null);
// 2)获取公共的,私有的,受保护的,最终的..方法
Method method= cls.getDeclaredMethod("add", Integer.class,Integer.class);
//3)获取所有的公共的方法
Method[] methods= cls.getMethods();
// 4)获取所有的公告的,私有的,受保护的,最终的..等等方法
Method[] methods=cls.getDeclaredMethods();
for (Method method2 : methods) {
System.out.println("=======================");
System.out.println("获取方法名"+method.getName());
System.out.println("获取访问修饰符"+method.getModifiers());
System.out.println("获取访问数量"+method.getParameterCount());
System.out.println("获取访问类型"+method.getReturnType());
}
// 5)调用方法
Method method = cls.getMethod("add", Integer.class,Integer.class);
// 执行方法
Object returnvalues = method.invoke(stu, 10 ,20);
System.out.println(returnvalues);
// 6)调用构造函数
Constructor cons = cls.getConstructor(null);
cons.setAccessible(true);
cons.newInstance(20);
7.根据类得到类的实现接口列表
Class[] interface=cla.getInterfaces(); -->获取类对象中所有实现接口列表
Class cls = Person.class;
Class field = cls.getSuperclass();
// 遍历、
Class[] field1 = cls.getInterfaces();
for (Class class1 : field1) {
System.out.println(class1.getName());
}
System.out.println(field.getName());
8.作业
1)新建实体类Person
2)三个字段:pid pname psex
3)要求该类有父类,并且实现多接口
4)通过反射得到该类所有的属性和方法,父类和实现接口public class Person extends Student implements UserDao,RoleDao
pid
pname
psexpublic class Student
sname
sid
....public interface UserDao
...
public interface RoleDao
...
android 反射获取上一个avtivity
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java 如何获取一个空的DATE对象
java 如何获取一个空的DATE对象
java System Java