获取类
(已知a对象)
1.Class c1=a.getClass();
2.Class c2=a.class();
3.Class c3=Class.forName(“java.lang.String”);
获取类的包名:
Package package=c1.getPackage();
String packageName=package=.getName();
获取修饰符:
int mod=c1.getModifiers(); 返回访问修饰符所对应的int数值
String modifier=Modifier.toString(mod); 使用Modifier自己的toString方法传入int返回相应的访问修饰符
获取父类
Class c1=c1.getSuperclass();
获取接口
Class[] interfaces=c1.getInterfaces();
获取属性
Field[] f=c1.getDeclaredFields(); 获取所有字段
Field[] f=c1.getFields(); 获取public字段
Class type = f.getType();//数据类型
如果数据类型是数组需进行一下操作
type=type.getComponentType();
String name = f.getName();//字段名称
Field idField=c1.getDeclaredField("id");//获取id属性
idField.setAccessible(true);//取消对文本字段的访问
idField.set(aa,100);//赋值
idField.get(aa);//获取值
获取构造方法
Constructor[] constructors=c1.getConstructor[];
Constructor[] constructors=c1.getDeclaredConstructor[];
constructors.getName(); //获取构造方法名;
Class[] parameters=constructors.getParameterTypes(); //获取参数类型
获取类的成员方法
Method[] methods=c1.getDeclaredMethods();
Class returnType=methods.getReturnType();//数组需要处理,方法同上
(获取其它属性同上)
创建对象
使用无参构造
A aa = (A)c1.newInstance();
使用带参数的构造
Class class = Class.forName(“java.util.Date);
Constructor constructor = class1.getConstructor(long.class);
Date date = (Date)constructor.newInstance(13464654L);
调用方法——public Object invoke(Object obj,Object…args) //obj某对象;args方法参数;invoke返回值类型是实际方法的返回值类型
A aa = (A)c1.newInstance();
Method method=c1.getDeclaredMethods(“setName”,String.class);
//如果方法为私有方法时添加 method.setAccessible(true);
Object obj=method.invoke(aa,”爪哇”);//得到返回值类型