通过反射创建对应的运行时类的对象
Class clazz = Person.class;
Person obj = clazz.newInstance();
System.out.println(obj);
newInstance():调用此方法,创建对应的运行时类的对象。内部调用了运行时类的空参的构造器。
要想此方法正常的创建运行时类的对象,要求:
1.运行时类必须提供空参的构造器
2.空参的构造器的访问权限得够。通常,设置为public。
在javabean中要求提供一个public的空参构造器。原因:
1.便于通过反射,创建运行时类的对象
2.便于子类继承此运行时类时,默认调用super()时,保证父类有此构造器
获取属性结构
getFields():
获取当前运行时类及其父类中声明为public访问权限的属性
Field[] fields = clazz.getFields();
for(Field f : fields){
System.out.println(f);}
System.out.println();
getDeclaredFields():
获取当前运行时类中声明的所有属性。(不包含父类中声明的属性)
Field[] declaredFields = clazz.getDeclaredFields();
for(Field f : declaredFields){
System.out.println(f);}
权限修饰符 数据类型 变量名
public void test2(){
Class clazz = Person.class;
Field[] declaredFields = clazz.getDeclaredFields();
for(Field f : declaredFields){
权限修饰符
int modifier = f.getModifiers();
System.out.print(Modifier.toString(modifier) +"\t");
数据类型
Class type = f.getType();
System.out.print(type.getName() +"\t");
变量名
String fName = f.getName();
System.out.print(fName);
System.out.println();}}}
获取运行时类的方法结构
public void test1(){
Class clazz = Person.class;
getMethods():获取当前运行时类及其所有父类中声明为public权限的方法
Method[] methods = clazz.getMethods();
for(Method m : methods){
System.out.println(m);}
System.out.println();
getDeclaredMethods():获取当前运行时类中声明的所有方法。(不包含父类中声明的方法)
Method[] declaredMethods = clazz.getDeclaredMethods();
for(Method m : declaredMethods){
System.out.println(m);}}
获取注解,形参列表,异常
@Xxxx
权限修饰符 返回值类型 方法名(参数类型1 形参名1,...) throws XxxException{}
lic void test2(){
Class clazz = Person.class;
Method[] declaredMethods = clazz.getDeclaredMethods();
for(Method m : declaredMethods){
获取方法声明的注解
Annotation[] annos = m.getAnnotations();
for(Annotation a : annos){
System.out.println(a);}
权限修饰符
System.out.print(Modifier.toString(m.getModifiers()) +"\t");
返回值类型
System.out.print(m.getReturnType().getName() +"\t");
方法名
System.out.print(m.getName());
System.out.print("(");
形参列表
Class[] parameterTypes = m.getParameterTypes();
if(!(parameterTypes ==null && parameterTypes.length ==0)){
for(int i =0;i < parameterTypes.length;i++){
if(i == parameterTypes.length -1){
System.out.print(parameterTypes[i].getName() +" args_" + i);
break;}
System.out.print(parameterTypes[i].getName() +" args_" + i +",");}}
System.out.print(")");
抛出的异常
Class[] exceptionTypes = m.getExceptionTypes();
if(exceptionTypes.length >0){
System.out.print("throws ");
for(int i =0;i < exceptionTypes.length;i++){
if(i == exceptionTypes.length -1){
System.out.print(exceptionTypes[i].getName());
break;}
System.out.print(exceptionTypes[i].getName() +",");}}
System.out.println();}}
获取构造器结构
public void test1(){
Class clazz = Person.class;
getConstructors():获取当前运行时类中声明为public的构造器
Constructor[] constructors = clazz.getConstructors();
for(Constructor c : constructors){
System.out.println(c);}
System.out.println();
getDeclaredConstructors():获取当前运行时类中声明的所有的构造器
Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
for(Constructor c : declaredConstructors){
System.out.println(c);}}
获取运行时类的信息
获取运行时类的父类
public void test2(){
Class clazz = Person.class;
Class superclass = clazz.getSuperclass();
System.out.println(superclass);}
获取运行时类的带泛型的父类
public void test3(){
Class clazz = Person.class;
Type genericSuperclass = clazz.getGenericSuperclass();
System.out.println(genericSuperclass);}
获取运行时类的带泛型的父类的泛型
eg. 获取 public class StudentDAO extends DAO<student> 中的<student>
public void test4(){
Class clazz = Person.class;
Type genericSuperclass = clazz.getGenericSuperclass();
ParameterizedType paramType = (ParameterizedType) genericSuperclass;
获取泛型类型
Type[] actualTypeArguments = paramType.getActualTypeArguments();
System.out.println(actualTypeArguments[0].getTypeName());
System.out.println(((Class)actualTypeArguments[0]).getName());}
获取运行时类实现的接口
public void test5(){
Class clazz = Person.class;
Class[] interfaces = clazz.getInterfaces();
for(Class c : interfaces){
System.out.println(c);}
System.out.println();
获取运行时类的父类实现的接口
Class[] interfaces1 = clazz.getSuperclass().getInterfaces();
for(Class c : interfaces1){
System.out.println(c);}}
获取运行时类所在的包
public void test6(){
Class clazz = Person.class;
Package pack = clazz.getPackage();
System.out.println(pack);}
获取运行时类声明的注解
public void test7(){
Class clazz = Person.class;
Annotation[] annotations = clazz.getAnnotations();
for(Annotation annos : annotations){
System.out.println(annos);}}
网友评论