浅谈反射
来源:互联网 发布:科目二驾考模拟软件 编辑:程序博客网 时间:2024/06/06 07:07
1.如何得到类对象
<1>类名.class<2>对象.getClass()
<3>Class.forName("全限定名");
<4>类加载的loadClass("全限定名");
<5>子类.class.getSuperClass();
<6>包装类.class
2.根据类得到类名(全限定名)
c.getName()------------>全限定名
c.getSimpleName() ---->类名
c.getPackage()---------->包名
3.根据类得到类的属性
c.getField("field属性名");
属性名:f.getName()
属性修饰符:f.getModifiers()
属性的数据类型:f.getType().getName()
给属性设值:f.set()
得到属性的值:f.get()
得到私有的属性:f.getDeclaredField("属性名");
得到所有的声明的属性
c.getDeclaredFields()
4.根据类得到类的方法
c.getMethod()
c.getDeclaredMethod();
代码实例:
package com.zking.test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import org.junit.Test;import com.zking.entity.Person;public class TestRe {/** * 获取实现该类的所有接口 及 父类 */@Testpublic void test6(){Class clazz=Person.class;System.out.println(clazz.getSuperclass().getSimpleName());//实现的接口Class clazzInterface[]=clazz.getInterfaces();for (Class c : clazzInterface) {System.out.println(c.getSimpleName());}}/** * 获取该类所有的构造方法,并执行 */@Testpublic void test5(){Class clazz=Person.class;Constructor constructor[]=clazz.getDeclaredConstructors();for (Constructor c : constructor) {System.out.println(c.getModifiers());Class clazzType[]=c.getParameterTypes();for (Class cc : clazzType) {System.out.println(" "+cc.getSimpleName());}}//调用构造方法(使用构造方法进行实例化对象)try {//clazz.newInstance();//调用无参构造//调用有参构造Constructor constru=clazz.getDeclaredConstructor(Integer.class,String.class,Integer.class);constru.newInstance(1,"123",2);} catch (Exception e) {e.printStackTrace();} }/** * 根据类对象 获取 类的所有的方法 */@Testpublic void test4(){//获取所有的方法Class clazz=Person.class;Method methods[]=clazz.getDeclaredMethods();System.out.println(methods.length);for (Method method : methods) {//获取每个方法的名字System.out.println(method.getName());//每个方法的返回值类型System.out.println(" "+method.getReturnType().getName());//每个方法的修饰符System.out.println(" "+method.getModifiers());//获取每个方法的参数列表Class[] classType=method.getParameterTypes();for (Class c : classType) {System.out.println(" "+c.getSimpleName());}}//调用方法(无参数)try {Person person=new Person();Method method=clazz.getDeclaredMethod("sleep", String.class,String.class);//设置可访问method.setAccessible(true);//执行方法method.invoke(person, "aa","bb");} catch (Exception e) {e.printStackTrace();}}/** * 根据类对象 获取 类的属性 */@Testpublic void test3(){try {//之前Person person=new Person();//person.setPid(1);Person person2=new Person();//person2.setPid(100);Class clazz=Person.class;Field[] fields=clazz.getFields();//只能获取public修饰的属性Field[] fields2=clazz.getDeclaredFields();//获取所有的属性(包括私有)for (Field field : fields2) {//获取所有属性的属性名System.out.println(field.getName());}System.out.println(fields2.length);//获取单个属性(获取的public)Field field=clazz.getField("pid");//给属性设值field.setInt(person, 100);//获取属性的值System.out.println(field.getInt(person));//获取单个属性(修饰符为private)//Field fieldPname=clazz.getField("pname");Field fieldPname=clazz.getDeclaredField("color");System.out.println(fieldPname);System.out.println("psex的数据类型为:"+fieldPname.getType().getSimpleName());//private 2//public 1//protected 4//默认 0//static 8//final 16System.out.println(Modifier.isPublic(25));System.out.println("color的修饰符为:"+fieldPname.getModifiers());//设置可以访问fieldPname.setAccessible(true);//给私有的属性设值fieldPname.set(person, "tt");//获取私有属性的值System.out.println(fieldPname.get(person));} catch (Exception e) {e.printStackTrace();}}/** * 根据类对象 获取 类名(全限定名 包名) */@Testpublic void test2(){Class clazz=Person.class;//获取全限定名System.out.println(clazz.getName());//获取类名(不包括包名)System.out.println(clazz.getSimpleName());//获取包名System.out.println(clazz.getPackage().getName());}/** * 获取类对象 */@Testpublic void test1() {try {// 1.实体类.class// Class clazz=Person.class;// 2.对象.getClass// Person person=new Person();// Class clazz=person.getClass();// 3.Class.forName()//Class clazz = Class.forName("com.zking.entity.Person");//4.通过类加载的loadClass//ClassLoader classLoader=Person.class.getClassLoader();//Class clazz =classLoader.loadClass("com.zking.entity.Person");//5.通过子类.class.getSuperClass()//Class clazz =Son.class.getSuperclass();//System.out.println(clazz);//[6].获取包装类的类对象Class clazz=Integer.class;System.out.println(clazz);} catch (Exception e) {e.printStackTrace();}}}
阅读全文
0 0
- 浅谈反射
- 浅谈反射
- 浅谈反射与属性
- c#的反射浅谈
- 浅谈JAVA反射机制
- 浅谈 JavaBean与反射
- 反射浅谈一
- 浅谈反射二
- 浅谈反射 method方法
- 浅谈Java反射机制
- 浅谈java反射机制
- 浅谈反射基础
- 浅谈Java反射机制
- 浅谈.Net反射
- 浅谈java反射问题
- 【C#】:浅谈反射机制
- Java反射机制浅谈
- Java反射浅谈
- Word文档插图片问题
- 写接口请求类型为get或post的时,参数定义的几种方式,如何用注解(原创)--雷锋
- Linux C 进程间的IPC通信 之 共享内存(一)
- Ubuntu16.04搜狗拼音输入法候选栏无法显示中文(英文乱码)
- pstree使用缺少命令
- 浅谈反射
- MyBatis概述
- 只能输入3-5个英文字符的正则
- DataGridView控件——绑定数据
- gcc是通过文件名后缀来判断源代码语言类型的。
- 【Java】代理模式
- [leetCode刷题笔记]598. Range Addition II
- ssh连接树莓派出现"network error:connection refused"的解决办法
- TRIP数据库的1到1000