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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏晓彤 中级黑马   /  2013-3-4 15:13  /  1173 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏晓彤 于 2013-3-9 14:39 编辑

下面一断代码是得到String的所有的构造方法的代码,我想获得所有构造函数和参数类型,打印格式就不设计了,能看懂就行了,,一开始,我认为 constructor.getName();就可以直接把构造函数和参数类型搞定呢,后来翻了翻API,然后又看看了张老师后面的视频。获取参数类型有getParameterTypes()这个方法,
下面加个getParameterTypes();好多了,但是打印出来就有效果了,但是还是有看不懂的地方。namejava.lang.String paramname [C [C什么意思?,为什么不都是是namejava.lang.String paramname java.lang.StringBuffer这种形式的,还有最后为什么打印2次"下一个"?
public static void main(String[] args) throws Exception{
                Constructor[]constructors = Class.forName("java.lang.String").getConstructors();
                for(Constructor constructor:constructors){
                        String name = constructor.getName();
                        Class[] clazzs = constructor.getParameterTypes();
                        for(Class clazz : clazzs){
                                String paramname = clazz.getName();
                            System.out.println("name"+name+" name1 "+paramname);
                            }
                         System.out.println("下一个");
                }

打印结过
namejava.lang.String paramname [C
namejava.lang.String paramname int
namejava.lang.String paramname int
下一个
namejava.lang.String paramname [I
namejava.lang.String paramname int
namejava.lang.String paramname int
下一个
namejava.lang.String paramname [B
namejava.lang.String paramname int
namejava.lang.String paramname int
namejava.lang.String paramname int
下一个
namejava.lang.String paramname [B
namejava.lang.String paramname int
下一个
namejava.lang.String paramname [C
下一个
namejava.lang.String paramname java.lang.String
下一个
namejava.lang.String paramname [B
namejava.lang.String paramname java.lang.String
下一个
namejava.lang.String paramname [B
namejava.lang.String paramname int
namejava.lang.String paramname int
下一个
namejava.lang.String paramname [B
下一个
namejava.lang.String paramname java.lang.StringBuffer
下一个
namejava.lang.String paramname java.lang.StringBuilder
下一个
namejava.lang.String paramname [B
namejava.lang.String paramname int
namejava.lang.String paramname int
namejava.lang.String paramname java.lang.String
下一个
下一个


3 个回复

倒序浏览
getConstructor 与getConstructors  是有区别的,前者返回一个指定的构造函数,后面那个返回全部构造函数的数组,可能有很多个构造函数。

你String就有很多个构造函数,每个构造函数打印一个Name,所以就有很多个咯。
回复 使用道具 举报
李志卫 发表于 2013-3-4 15:21
getConstructor 与getConstructors  是有区别的,前者返回一个指定的构造函数,后面那个返回全部构造函数的 ...

我知道两者区别。我就是想获得所有构造函数和构造函数参数类型
回复 使用道具 举报
夏晓彤 发表于 2013-3-4 16:13
我知道两者区别。我就是想获得所有构造函数和构造函数参数类型

结果是
namejava.lang.String name1 [B
下一个
namejava.lang.String name1 [B
namejava.lang.String name1 int
namejava.lang.String name1 int
下一个
namejava.lang.String name1 [B
namejava.lang.String name1 java.nio.charset.
下一个
namejava.lang.String name1 [B
namejava.lang.String name1 java.lang.String
下一个
namejava.lang.String name1 [B
namejava.lang.String name1 int
namejava.lang.String name1 int
namejava.lang.String name1 java.nio.charset.
下一个
namejava.lang.String name1 java.lang.StringB
下一个
namejava.lang.String name1 java.lang.StringB
下一个
namejava.lang.String name1 [I
namejava.lang.String name1 int
namejava.lang.String name1 int
下一个
namejava.lang.String name1 [C
namejava.lang.String name1 int
namejava.lang.String name1 int
下一个
namejava.lang.String name1 [C
下一个
namejava.lang.String name1 java.lang.String
下一个
下一个
namejava.lang.String name1 [B
namejava.lang.String name1 int
namejava.lang.String name1 int
namejava.lang.String name1 java.lang.String
下一个
namejava.lang.String name1 [B
namejava.lang.String name1 int
下一个
namejava.lang.String name1 [B
namejava.lang.String name1 int
namejava.lang.String name1 int
namejava.lang.String name1 int
下一个


[ I  表示int数组 , 说明这里String的参数接收一个整形数组
[ c 表字符数组 char[]
[ B 表 byte[]

有个地方是打印两个 下一次
是因为,String中有个构造函数是空参数的,直接输出下一个。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马