用Class类进行动态加载

用Class类进行动态加载

       今天我学习了Class类,并且用于程序的动态加载,这让我的Java技术有了更深的进步。因为以前写的程序的类都是静态加载的,没有考虑以后的动态拓展,也就是说在不关闭程序的情况下进行动态的类更新加载,以拓展程序的功能。以前我对new 一个对象这样的实例化对象方法根深蒂固,现在才知道还有像Class.forName("类名").newInstance();这样的方法,真是一串好代码。下面我就来说说动态加载的步骤。

第一步:获得类的类类型

Class c=“类名”.class;这其实是一个类的对象,也就是说类也是一个对象,是Class类的对象,但准确的说c应该是类类型。或得类类型有三种方法

(1)Class c=“类名”.class;

(2)Class c=Class.forName("类名")

(3)Class c=“类名”.getClass();

第二步:为需要加载的类写一个父类

为什么要给要加载的类写一个父类呢?请看第三步

第三步:用类类型实例化需要加载的新类的对象

父类名  新对象=(父类名)c.newInstance();这样写的好处就是就是我们可以不关心需要加载一个什么类,只要把这个类继承父类就可以用于加载了,这就是为什么要写一个父类的原因。

下面来看一个我写的demo

public class Zoo {
	
	public static void main(String[] args) {
		
		while(true){
			System.out.println("请输入要新加入动物园的类名:");
			Scanner s=new Scanner(System.in);
			String classname=s.next();
			if("OK".equals(classname)){
				System.out.println("动物加入完毕");
				break;
			}
			try {
				Class c=Class.forName(classname);
				Animal animal=(Animal)c.newInstance();
				animal.speak();
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

 这个模拟动物园动物跟新,我们不知道要加入什么动物所以先写一个动物的父类,如下

//所有动物的父类
public class Animal {
	public void speak(){
		System.out.println("====我是一种不具体动物====");
	}
}

 下面假如程序已经跑起来了,我们此时要写了一个大象类,并要加入

//大象的类
public class Elephant extends Animal {
	public void speak(){
		System.out.println("我是一只大象====很高兴加入动物园");
	}
}

 这里我们输入大象的类名就可以了,注意要带包名com.demo.reflect.Elephant.同样的道理,想要加什么类就写好类的代码且继承Animal类,就可以随心所欲地加载了

猜你喜欢

转载自938743180.iteye.com/blog/2196905