//* 首先获取到Class类-// 获取Class类
Class clazz1= Person.class;
Class clazz2=newPerson().getClass();
Class clazz3= Class.forName("cn.itcast.test09.Person");//* 比如: 要对一个类进行实例化,可以new,不使用new,怎么获取?-//得到Class
Class c3= Class.forName("cn.itcast.test09.Person");//得到Person类的实例
Person p =(Person) c3.newInstance();//操作无参数的构造方法@Testpublicvoidtest1()throws Exception {//得到Class
Class c3= Class.forName("cn.itcast.test09.Person");//得到Person类的实例
Person p =(Person) c3.newInstance();//设置值
p.setName("zhangsan");
System.out.println(p.getName());}
```
## 使用反射操作有参数的构造方法
```java
//操作有参数的构造方法@Testpublicvoidtest2()throws Exception {//得到Class
Class c1= Class.forName("cn.itcast.test09.Person");//使用有参数的构造方法//c1.getConstructors();//获取所有的构造方法//传递是有参数的构造方法里面参数类型,类型使用class形式传递
Constructor cs = c1.getConstructor(String.class,String.class);//通过有参数的构造方法设置值//通过有参数的构造方法创建Person实例
Person p1 =(Person) cs.newInstance("lisi","100");
System.out.println(p1.getId()+" "+p1.getName());}
使用反射操作属性
//操作name属性@Testpublicvoidtest3(){try{//得到Class类
Class c2= Class.forName("cn.itcast.test09.Person");//得到name属性//c2.getDeclaredFields();//表示得到所有的属性//得到Person类的实例
Person p11 =(Person) c2.newInstance();//通过这个方法得到属性,参数是属性的名称
Field f1 = c2.getDeclaredField("name");//操作的是私有的属性,不让操作,需要设置可以操作私有属性setAccessible(true),可以操作私有属性
f1.setAccessible(true);//设置name值 set方法,两个参数:第一个参数类的实例,第二个参数是设置的值
f1.set(p11,"wangwu");//相当于 在 p.name = "wangwu";
System.out.println(f1.get(p11));//相当于 p.name}catch(Exception e){
e.printStackTrace();}}