您的位置:首页 > 编程语言 > Java开发

Java知识三:对象的另一种实例化方式

2016-01-08 20:22 369 查看
Class.ForName()
返回一个类(注意不是类的对象)。作用是要求jvm查找并加载指定的类,也就是说jvm会执行该类的静态代码段。

newInstance()
声明一个类对象,等同于new 类名()。

1、new和Class.forName()区别

A a = new A();

A a = Class.forName("包名.类名").newInstance();

上面两句话都返回一个对象,不同的是下面一句还执行了类A的静态代码段。Class.forName("包名.类名")只是返回该类。

2、为什么在加载数据库驱动包时用的是Class.forName(),却没有调用newInstance()

为了执行静态代码段,只需调用Class.forName()。又用不到类对象,所以不再调用newInstance()。

3、什么时候用Class.forName()

假设要根据用户输入的字符串来创建一个对象。

分析下:根据用户输入字符串来创建对象,那么用户输入的必须是一个全类名的字符串,那么只能用forName()去实例化了。

String str;

Class clazz = Class.forName(str);

clazz.newInstance();

至此,实例化完成。

Constructor
然而,newInstance()只能调用无参的构造函数,如何调用含参的构造函数呢?这就用到getConstructor():

返回一个Constructor对象,要获取哪个构造函数,就给getConstructor()传递跟该构造函数相同类型的参数。

最后调用Constructor的newInstance(参数)即可:

Class<?> clazz = Class.forName(str);
Constructor<?> constructor = clazz.getConstructor(java.lang.String.class);
Object obj = constructor.newInstance("abc");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: