class cum {}
Class c=Class.forName("cum");这样写是获取 cum类的Class对象.
我有一点不明白 既然c以经是对象了,为什么还要使用 .newInstance()对c来实例化呢?
一般的说法不是 创建类的对象就是对该类实例化吗? c以经是个Class对象了,那为什么还要实例化?
以我的理解方式我只是不明白 c倒底是个类还是个对象? 请高手指教,最好说详细点,谢谢!
Class c=Class.forName("cum");这样写是获取 cum类的Class对象.
我有一点不明白 既然c以经是对象了,为什么还要使用 .newInstance()对c来实例化呢?
一般的说法不是 创建类的对象就是对该类实例化吗? c以经是个Class对象了,那为什么还要实例化?
以我的理解方式我只是不明白 c倒底是个类还是个对象? 请高手指教,最好说详细点,谢谢!
c还不是 cum类 的 实例 。只是获得了这个类的类对象。 .newInstance()才能转化为真正的实例
就是可以cum obj = (cum )(Class.forName("cum").newInstance());
如果 cum obj =(cum)Class.forName("cum") 这样是不行的。
这一行是告诉java虚拟机从路径中找cum.class文件,并加载到虚拟机内存中。
c.newInstance()才是调用类cum的默认构造函数,获得类实例。
这样获得的是这个对象的Class对象 cum obj = Class.forName("cum");
这样获得的是这个类的Class对象!两码事!
Class.forName("cum").获得的就是这个类对象
Class.forName("cum").newInstance(); 才是真正的的类对象
2,Class.forName("cum").newInstance(); 才是真正的实例化后的类对象
Class.forName("xyz").newInstance(); 通过Class的一个特定对象,生成xyz这个类的对象.
虽然一些基础数据类型不是对象,但是他们可以变成对象,例如int可以变成Integer对象,double可以变成Double对象。Class c=Class.forName("java.lang.String");
这个是一个Class对象。
而c c1=c.newInstance;这是一个String类的对象。
只是将String类加载到内存中而已,并没有创建实例,虚拟机默认给每个加载到内存中的类一个class引用,来作为该类的操作句柄,用这个句柄来创建对象。
package hellomyworld;public class Test {
public Test() {
System.out.println("hello world");
}
}
此时在cmd下运行 javac Test.java就会产生一个Test.class的文件另一个类Test2.class如何使用这个文件呢?首先通知虚拟机从硬盘加载这个Test.class到内存中 Class testclass = Class.forName("hellomyworld.Test"); //test.Test代表路径
或者 Class testclass = hellomyworld.Test.classtestclass代表这个类的所有信息,注意他代表的是类的信息 不是类本身!1 我想知道这个类叫什么? testclass.getName()
2 它有多少个方法呢?testclass.getDeclaredMethods()
3 它有多少个字段? testclass.getDeclaredFields()
以上的这3步就叫反射,当然还可以做更多的反射
然后告诉虚拟机初始化这个类 Object obj= testclass.newInstance(); 因为我先在想用了
Test test = (Test)obj;上面的用法太麻烦的有没有更简单一点的使用办法呢?ok
hellomyworld.Test mytest = new hellomyworld.Test()
但是我还是想的到这个类的信息怎么办????
mytest.getClass()