一:获取Class对象:
//调用对象的getClass()方法
public void test() throws Exception {
Bbs_User user=new Bbs_User();
Class css=user.getClass();
}
//调用类的class属性
public void test() throws Exception {
Class css=Bbs_User.class;
}
//使用Class类的forName()静态方法
public void test() throws Exception {
Class css=Class.forName("cn.kgc.pojo.Bbs_User");
}
二:从Class对象获取类的信息
public void test() throws Exception {
Class css=Class.forName("cn.kgc.pojo.Bbs_User");
//返回所有public的构造方法
css.getConstructors();
//返回所有构造方法
css.getDeclaredConstructors();
//返回所有public的普通方法
css.getMethods();
//返回所有的普通方法
css.getDeclaredFields();
//访问指定的属性
css.getDeclaredField("bbsName");
//返回所有的属性
css.getDeclaredFields();
//返回类的完整名字
css.getName();
//返回类的包名
css.getPackage();
//返回类的父类对应的Class对象
css.getSuperclass();
}
三:创建对象
第1种:需要有默认构造方法
public void test() throws Exception {
Class css=Class.forName("cn.kgc.pojo.Bbs_User");
//创建Bbs_User对象,需要Bbs_User类有默认构造方法
cn.kgc.pojo.Bbs_User user=(cn.kgc.pojo.Bbs_User)css.newInstance();
}
第2种:用指定构造方法创建
public void test() throws Exception {
Class css=Class.forName("cn.kgc.pojo.Bbs_User");
//获取带一个String类型参数的构造方法
Constructor construc= css.getConstructor(String.class);
//创建Bbs_User对象
Bbs_User user=(Bbs_User) construc.newInstance("aaa");
System.out.println(user.getBbsName());
}
四:对属性取值和赋值
public void test() throws Exception {
Class css=Class.forName("cn.kgc.pojo.Bbs_User");
Bbs_User user=(Bbs_User)css.newInstance();
//获取全部属性
Field field1[]=css.getDeclaredFields();
for(Field fie:field1){
System.out.println(fie);
}
//获取指定属性
Field field=css.getDeclaredField("bbsName");
//取消访问权限检查
field.setAccessible(true);
//给属性赋值
field.set(user,"aaaaa");
System.out.println(user.getBbsName());
}
五:调用对象的方法
public void test() throws Exception {
Class css=Class.forName("cn.kgc.pojo.Bbs_User");
Bbs_User user=(Bbs_User)css.newInstance();
//获取setBbsName方法,有一个String参数
Method method=css.getMethod("setBbsName", String.class);
//执行获取setBbsName方法方法,并给定参数
method.invoke(user,"aaaa");
//获取getBbsName方法,没有参数
Method method1=css.getMethod("getBbsName",null);
//执行getBbsName方法,获取结果
String bbsName=(String) method1.invoke(user,null);
System.out.println(bbsName);
}
六:使用Array类动态创建和访问数组
public void test() throws Exception {
//建一个长度为10,类型为String的数组
Object arr=Array.newInstance(String.class,10);
//为index为5的赋值为javk
Array.set(arr,5,"jack");
//获取index为5的value值
String jack=(String) Array.get(arr,5);
System.out.println(jack);
}
混合代码:
//反射
public class RttlTest {
@Test
public void test() {
Class c1=Integer.TYPE;
Class cla = UserImpl.class;
System.out.println(cla.getName());
System.out.println(cla.getPackage());
Class cl=cla.getSuperclass();
UserImpl ui=null;
try {
ui=(UserImpl) cla.newInstance();
Method meth= cla.getDeclaredMethod("eat", int.class);
meth.invoke(ui,1);
} catch (Exception e) {
e.printStackTrace();
}
Method[] method = cla.getDeclaredMethods();
for (int i = 0; i < method.length; i++) {
//System.out.println(method[i]);
}
Class cla1 = User.class;
Field[] field = cla1.getDeclaredFields();
Constructor[] constructors=cla1.getDeclaredConstructors();
System.out.println(constructors[0]);
System.out.println(constructors[1]);
User user = null;
try {
//Constructor method2=cla1.getConstructor(new Class[]{Integer.class,String.class});
Constructor method2=cla1.getConstructor(Integer.class,String.class);
user = (User) method2.newInstance(8888888,"7777777");
System.out.println(user.getName());
System.out.println(user.getAge());
Field field2=cla1.getDeclaredField("name");
field2.setAccessible(true);
field2.set(user,"qqqqqqqqqqqqqqqqqq");
System.out.println(field2.get(user));
} catch (Exception e) {
e.printStackTrace();
}
for (int j = 0; j < field.length; j++) {
try {
field[0].setAccessible(true);
field[0].set(user, "zsc");
field[1].setAccessible(true);
field[1].set(user, 100);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Constructor[] constructor = cla.getDeclaredConstructors();
for (int i = 0; i < constructor.length; i++) {
//System.out.println(constructor[i]);
}
try {
UserImpl uimpl = (UserImpl) cla.newInstance();
//uimpl.save(user);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
try {
Method metho=cla1.getMethod("setName", String.class);
metho.invoke(user,"789456");
Method metho1=cla1.getMethod("getName");
System.out.println(metho1.invoke(user));
} catch (Exception e) {
e.printStackTrace();
}
}