A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闾丘日月 中级黑马   /  2012-5-23 14:55  /  1562 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

听完张老师的反射讲解以后,自以为对万物皆对象又多一层理解,但是张老师的反射中没有提到静态代码块和构造代码块的问题。
于是自己去查api,也没有发现类似的方法能够捕捉代码块的,除了Class,Method,Field和布尔以外有几个不太懂的方法,但是返回类型好像都不是我想要的,于是我百度,关键词构造代码块 反射,出来一堆乱七八糟的,到这里我基本肯定一个结论,java中并没有一个对象是用来表示代码块的,这是为啥?
我自己想到一个解释,因为最初我是想着,代码块中也会定义static变量存放在静态区中,但是我测试的时候编译不通过,就是说编译器不允许代码块访问静态区,它只能操作栈与堆区的数据,因此java觉得代码块足够简单,所以不用用一个专门的对象来表示它。
这个也就勉强自己骗一下自己,感觉还是和拿出来大家一起讨论一下的好。。

3 个回复

倒序浏览
另外,求一份String类的练习题,能包含String类的基本和高级用法的练习,网上找的怕没有针对性
回复 使用道具 举报
本帖最后由 栗培文 于 2012-5-23 16:44 编辑

Class<?> sp = null;
Constructor<?> cons[] = sp.getConstructors();//取得构造函数
obj = cons[0].newInstance();//创建新实例,如果存在构造代码块,构造代码块先执行,再执行构造函数
method = sp.getMethod("print");//取得print方法
method.invoke(obj);
在方法中定义的变量是局部变量,定义不了static变量的,可以把方法用static修饰。
回复 使用道具 举报
楼上的我不太明白。
好像就是执行了一个构造函数和一个print方法,是我的问题描述有问题么?
我的意思是为什么代码块在java中不搞个对象来表示它,因为它足够简单?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马