比如:
.....
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 实例化?
.....
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 实例化?
具体是怎么实现的我们并不知道
因为他最终调用了本地方法(native)
在这些本地方法中应该就没有new这个概念了
因为Class的静态方法forName返回的就已经是一个Class
工厂
克隆
new
都可以产生对像.
java的RTTI机制介绍...
具体请参阅:http://book.csdn.net/bookfiles/49/100491554.shtml
比如forName("A"); 会查找是否有个Class类的实例A.Class已被创建,如果没有则会创建这个实例.具体怎么创建的,就像zdjray(PubSoft)说的用的是个本地方法.
而getClass()也是为了得到这个实例的引用.也是个本地方法
至于getDeclaredConstructors,看一下源代码
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 API中看看Class类是干什么的
我觉得楼主有个误区,不是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();
}
}
________________________________________对于楼上的.
我觉得,A a1=A.getInstance(); 调用的是他自已的方法,而和对像实例化扯不上关系吧.
建议看一下JAVA反射机制
可以先在JAVA API中看看Class类是干什么的
---------------------------------
对于楼上的.
我不知道Class类是干什么的,那还问它forName方法做什么?
有点不知所云吧.