动态加载类的方式
import java.util.*;import java.lang.reflect.*;class ClassDemo{public static void main(String[] args) throws ClassNotFoundException{//动态加载类;hScanner scan=new Scanner(System.in);System.out.println("请输入一个你想创建的类");String className=scan.next();Class clazz=Class.forName(className);System.out.println(clazz.getName());Bird bird=new Bird("tom",2);Class clazz2=bird.getClass();System.out.println(clazz==clazz2);//一些基本操作;System.out.printf("%s是否是接口%b\n",clazz.getClass().getName(),clazz.isInterface());System.out.printf("%s是否死基本数据类型%b\n",clazz.getClass().getName(),clazz.isPrimitive());System.out.printf("%s是否是数组%b\n",clazz.getClass().getName(),clazz.isArray());System.out.printf("%s的父类是%s",clazz.getClass().getName(),clazz.getSuperclass().getName());System.out.println();//查看类的信息int m=clazz.getModifiers();System.out.printf("%s\t",Modifier.toString(m));if(clazz.isInterface()){System.out.println("interface");}else{System.out.print("class");}System.out.printf("\t");System.out.printf("%s",clazz.getSimpleName());System.out.println("\t\t{");Field [] fields=clazz.getDeclaredFields();for(Field field:fields){int n=field.getModifiers();System.out.printf("%s\t",Modifier.toString(n));System.out.printf("%s\t",field.getType().getSimpleName());System.out.printf("%s\t",field.getName());}Constructor [] cons=clazz.getDeclaredConstructors();for(Constructor con:cons){int p=clazz.getModifiers();System.out.printf("%s\t",Modifier.toString(p));System.out.printf("%s (){\n}\n",con.getName());}Method []methods=clazz.getDeclaredMethods();for(Method method:methods){int q=method.getModifiers();System.out.printf("%s\t",Modifier.toString(q));System.out.printf("%s\t ",method.getReturnType().getSimpleName());System.out.printf("%s\n; ",method.getName());}System.out.println("\t\t}");//实现类的动态加载有两个方法:一个是用forname一个是用加载器ClassLoader loader=bird.getClass().getClassLoader();Scanner scan1=new Scanner(System.in);String className1=scan1.next();Class clazz1=loader.loadClass(className1);System.out.println(clazz1.getSimpleName());}}
?