为什么使用Class类时,没有对Class对像NEW实例化?
比如:
.....
Class c=Class.forName(args[0]); /*c 没有用NEW实例化*/
Constructor[] cons=c.getDeclaredConstructors[];/* cons 没有用NEW实例化*/
......
为什么在创建c 和 cons 时,没用NEW实例化?难不成在forName 和 getDeclaredConstructor 中用了?
那
point pt=new point();
Class c1= pt.getClass();
中的c1也是在pt.getClass中实例化了?
岂不是每个Class的方法中都有NEW 实例化?
------解决方案--------------------这个是java 的RTTI机制,具体的你可以看下《thinking in java》的介绍。
------解决方案--------------------Class.forName()
具体是怎么实现的我们并不知道
因为他最终调用了本地方法(native)
在这些本地方法中应该就没有new这个概念了
------解决方案--------------------class1.newInstance()
------解决方案-------------------- 因为Class的静态方法forName返回的就已经是一个Class
------解决方案--------------------mark一下
学习学习
------解决方案--------------------反射
工厂
克隆
new
都可以产生对像.
------解决方案--------------------http://www.bianceng.cn/webkf/Java/jc/200705/1638.htm
java的RTTI机制介绍...
------解决方案--------------------静态工厂方法:创建类的实例的最常见的方式是用new语句调用类的构造方法。在这种情况下,程序可以创建类的任意多个实例,每执行一条new语句,都会导致Java虚拟机的堆区中产生一个新的对象。假如类需要进一步封装创建自身实例的细节,并且控制自身实例的数目,那么可以提供静态工厂方法。
具体请参阅:http://book.csdn.net/bookfiles/49/100491554.shtml
------解决方案--------------------Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段
Class实例应该是Class内部new的。
------解决方案--------------------每一个被加载的类在堆上都有一个对应的Class类的实例.
比如forName( "A "); 会查找是否有个Class类的实例A.Class已被创建,如果没有则会创建这个实例.具体怎么创建的,就像zdjray(PubSoft)说的用的是个本地方法.
而getClass()也是为了得到这个实例的引用.也是个本地方法
至于getDeclaredConstructors,看一下源代码
------解决方案--------------------去看看设计模式
简单工厂模式,工厂方法模式,抽象工厂模式
------解决方案--------------------我觉得楼主有个误区,不是new就可以实例化对象
一个简单的例子,单例模式:就是通过静态方法getInstance();来实例化对象
class A{
private static A a1=new a();
public static A getInstance(){
return a1;
}
public static void main(String []args){
A a1=A.getInstance();
}
}
------解决方案--------------------建议看一下JAVA反射机制
可以先在JAVA API中看看Class类是干什么的
------解决方案--------------------学习