日期:2014-05-20  浏览次数:20773 次

为什么使用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类是干什么的
------解决方案--------------------
学习