动态加载种的方式
动态加载类的方式
import java.util.Scanner; public class ClassDemo2 { public static void main(String[] args) throws ClassNotFoundException { Cat cat=new Cat("tom",2); ClassLoader loader=cat.getClass().getClassLoader(); System.out.println(loader); Scanner scan=new Scanner(System.in); System.out.println("请输入一个类名"); String className=scan.next(); //Class clazz=Class.forName(className); //System.out.println(clazz.getName()); Class clazz=loader.loadClass(className); System.out.println(clazz.getSimpleName()); } }
看个完整的例子:
import java.util.*; import java.lang.reflect.*; class ClassDemo { public static void main(String[] args) throws ClassNotFoundException { //动态加载类;h Scanner 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()); } }