获得对象的几种方法
Test test= new Test();
//通过对象获得
Class t1 = people.getClass();
//通过forname
//使用Class类中的forName()静态方法(最安全,性能最好)即:Class.forName(“类的全路径”)
Class t2 = Class.forname("com.jopo.Test");
//通过类名.Class
Class t3 = test.Class;
//通过构造方法 ---- 确保实体类有无参无,参构造方法
//getConstructor--获取构造方法对象---------有参数传参,无参数不写
Constructor constructor = t1.getConstructor(String.class);
Object newins = constructor.newInstance("王五");
System.out.println(newins);
//调用成员方法
//getMethod(); 第一个参数"方法名" , 有参写参数类型,无参不写
Method test0 = t1.getMethod("test",String.class);
//invoke() 开启调用方法 参数1是对象,2需要传递的参数
test0.invoke(new Test(),"吃啥");
-
比较常用重要的标红了,其他看一下了解就好
- .getPackage().getName()//包名
- .getSimpleName()//类名
- .getName()//完整类名
- //获取成员变量定义信息
- getFields()//获取所有公开的成员变量,包括继承变量
- getDeclaredFields()//获取本类定义的成员变量,包括私有,但不包括继承的变量
- getField(变量名)
- getDeclaredField(变量名)
-
//获取构造方法定义信息
- getConstructor(参数类型列表) //获取公开的构造方法
- getConstructors() //获取所有的公开的构造方法
- getDeclaredConstructor(int.class,String.class) //获取所有的构造方法
- getDeclaredConstructors() //获取所有的构造方法,包括私有
-
//获取方法定义信息
- getMethod("方法名",参数类型列表)
- getMethods() //获取所有可见的方法,包括继承的方法
- getDeclaredMethod("方法名",int.class,String.class)
- getDeclaredMethods()//获取本类定义的的方法,包括私有,不包括继承的方法
- //反射新建实例
- class.newInstance();//执行无参构造创建对象
- class.newInstance(参数,"参数");//执行有参构造创建对象
- //反射调用成员变量
- clazz.getDeclaredField(变量名);//获取变量
- class.setAccessible(true); //使私有成员允许访问 (暴力反射)
- f.set(实例,值);//为指定实例的变量赋值,静态变量,第一参数给null
- f.get(实例);//访问指定实例变量的值,静态变量,第一参数给null
- //反射调用成员方法
- Method m = Class.getDeclaredMethod(方法名,参数类型列表);
- m.invoke(实例,参数数据);//让指定实例来执行该方法