用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类,就可以随心所欲地加载了