@Test
public void Test01() throws ClassNotFoundException {
//方式一:通过类名创建class对象(字节码文件)
Class c1 = Emps.class;
//方式二:通过对象名创建
Class c2 = new Emps().getClass();
//方式三:通过forName(实体类包名)
Class c3 = Class.forName("com.frr.pojo.Emps");
}
//class对象c,调用实体类的无参构造(通用的方式)
@Test
//异常类型为非法的权限异常,实例化异常(不可为接口实现类)
public void test02() throws IllegalAccessException, InstantiationException {
//获取class文件
Class<Emps> c = Emps.class;
//使用newInstance构造一个对象
Emps emps = c.newInstance();//本质调用了无参构造
Emps emps1=new Emps();
}
@Test
//调用实体类的有参构造
public void test03() throws Exception{
Class<Emps> c = Emps.class;
//通过构造器创建对象,调用有参构造
Constructor<Emps> con= c.getDeclaredConstructor(String.class,String.class,String.class);
Emps emps = con.newInstance("a001", "姜姜", "男");
System.out.println(emps);
}
@Test
//Class对象c 给实体类的属性赋值
//通过反射操作属性
public void test4() throws NoSuchFieldException, IllegalAccessException, InstantiationException {
Class<Emps> c = Emps.class;
Emps emps = c.newInstance();
//f是salary的托管类
Field f = c.getDeclaredField("salary");
//不能直接操作私有属性,我们需要关闭程序的安全检测
//属性或者方法的setAccessible(true)
f.setAccessible(true);//关掉(默认为false)
f.set(emps,10000.0);
System.out.println(emps);
}
//通过反射调用普通方法
@Test
public void test5() throws Exception {
//传统的方式
Emps e = new Emps();
e.setSalary(12000.0);
System.out.println(e);
//反射的方法
Class<Emps> c = Emps.class;
Emps emps = c.newInstance();
//通过反射获取一个方法
Method m = c.getDeclaredMethod("setSalary",Double.class);
//invoke:激活的意思
//使用:(对象,“方法的值”)
m.invoke(emps,13000.0);
System.out.println(emps);
}
三种方式获取class类的对象@Test public void Test01() throws ClassNotFoundException { //方式一:通过类名创建class对象(字节码文件) Class c1 = Emps.class; //方式二:通过对象名创建 Class c2 = new Emps().getClass(); //方式三:通过forName(实体类包名) Class c3 = Cla