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(参数)即可:
返回一个类(注意不是类的对象)。作用是要求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");
相关文章推荐
- 对象的上转型对象
- 【慕课笔记】第二章 变量和常量 第1节 JAVA中的关键字
- java -jar classpath设置
- kafka文档(2)----kafka API(java版本)
- Java学习笔记之一个蛋疼的小细节
- Eclipse启动 org.eclipse.swt.SWTException: Invalid thread access问题解决方法
- 【项目实战】——Java根据奖品权重计算中奖概率实现抽奖(适用于砸金蛋、大转盘等抽奖活动)
- Spring MVC文件上传
- [Spring MVC] - @ModelAttribute使用
- Java多线程-wait(), notify(), notifyAll()、yield()、sleep()、join()、interrupt()原理及使用
- Java 除法 保留 n 为小数
- java 开关
- sql2012和java链接
- java日期格式大全 format SimpleDateFormat
- SpringMvc + Mybatis + Spring - 工程总结 ,基础知识结语篇
- 深入java虚拟机---Java内存区域与内存溢出
- java不用循环语句打印数组元素
- myeclipse热部署
- Eclipse安装主题(Color Theme)
- 《JAVA与模式》之装饰模式