动态加载种的方式

动态加载类的方式
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());

	}
}