黑马程序员技术交流社区

标题: Constructor类中的问题 [打印本页]

作者: 夏晓彤    时间: 2013-3-4 15:13
标题: Constructor类中的问题
本帖最后由 夏晓彤 于 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
下一个
下一个



作者: lzw123451    时间: 2013-3-4 15:21
getConstructor 与getConstructors  是有区别的,前者返回一个指定的构造函数,后面那个返回全部构造函数的数组,可能有很多个构造函数。

你String就有很多个构造函数,每个构造函数打印一个Name,所以就有很多个咯。
作者: 夏晓彤    时间: 2013-3-4 16:13
李志卫 发表于 2013-3-4 15:21
getConstructor 与getConstructors  是有区别的,前者返回一个指定的构造函数,后面那个返回全部构造函数的 ...

我知道两者区别。我就是想获得所有构造函数和构造函数参数类型
作者: lzw123451    时间: 2013-3-4 18:31
夏晓彤 发表于 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中有个构造函数是空参数的,直接输出下一个。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2