我用test1 params1=null;params1=(test1) ClassforName("asdftest1")newInstance();
这一句就已经可以使用test1里面的公有方法和参数了。
的确,没错的。你拿到了Class对象,就相当于拿到了test1的一个副本样,能拿到他的属性和方法。但是你拿到了后该干什么的?你不去调用方法吗?不去给属性设置值吗?你这个就相当于我定义了一个类,里面有属性和方法,但是我外部程序不去调用它。invoke就是调用方法的。
invoke的中文含义就是调用哎。自己百度下invoke的含义吧。
反射的核心就是要拿到该类的字节码对象---》Class对象。(真的是核心,不要看到就这几个字)
都拿到了该类的字节码了,那么该类的什么都能拿到了。比如:属性,方法,构造器,泛型,注解等等。反射使得java具有非常活跃的应用。你能想到的框架,如SSH,无一不利用了反射机制。以及一些设计模式,如动态代理(基于jdk)等,IoC、DI、AOP等等,底层都用到了反射。
至于真么用反射,我就不说了,网上多得是,随便百度一下就是一大把。
等你学完SSH,理解一些常用的设计模式,看看他们的底层实现,反射就通了。
都会被初始化,占用内存。
Java在创建类实例时,顺序如下:
1 初始化静态成员变量,执行静态语句块
2 为所有成员变量分配空间,设为默认值,包括primitive类型(int=0,boolean=false,…)和Reference类型(默认为null)。
3 调用类构造函数,不考虑super和this的情况,在构造函数中,按照书写顺序执行成员变量的初始化工作,即第二次初始化成员变量
以上就是关于java反射的问题,关于invoke和instance。全部的内容,包括:java反射的问题,关于invoke和instance。、Java中创建一个类的实例时,该类Field中定义的所有数据都会被初始化(占用内存空间)、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)