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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王月 中级黑马   /  2012-6-26 16:19  /  2033 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Constructor cons=String.class.getConstructor(StringBuffer.class)
在获取String类的构造方法时,怎么确定这个构造方法中是什么参数呢,也有可能是StringBuilder.class类型的啊

4 个回复

倒序浏览
String()
          初始化一个新创建的 String 对象,它表示一个空字符序列。
String(byte[] bytes)
          构造一个新的 String,方法是使用平台的默认字符集解码字节的指定数组。
String(byte[] ascii, int hibyte)
          已过时。 该方法无法将字节正确转换为字符。从 JDK 1.1 起,完成该转换的首选方法是通过 String 构造方法,该方法接受一个字符集名称或使用平台的默认字符集。
String(byte[] bytes, int offset, int length)
          构造一个新的 String,方法是使用指定的字符集解码字节的指定子数组。
String(byte[] ascii, int hibyte, int offset, int count)
          已过时。 该方法无法将字节正确转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是通过 String 构造方法,它接受一个字符集名称,或者使用平台默认的字符集。
String(byte[] bytes, int offset, int length, String charsetName)
          构造一个新的 String,方法是使用指定的字符集解码字节的指定子数组。
String(byte[] bytes, String charsetName)
          构造一个新的 String,方法是使用指定的字符集解码指定的字节数组。
String(char[] value)
          分配一个新的 String,它表示当前字符数组参数中包含的字符序列。
String(char[] value, int offset, int count)
          分配一个新的 String,它包含来自该字符数组参数的一个子数组的字符。
String(int[] codePoints, int offset, int count)
          分配一个新的 String,它包含该 Unicode 代码点数组参数的一个子数组的字符。
String(String original)
          初始化一个新创建的 String 对象,表示一个与该参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的一个副本。
String(StringBuffer buffer)

回复 使用道具 举报
你可以通过查看jdk的文档知道String有那些构造方法,然后在根据自己的需要来反射相应的构造方法。
在通过反射出来的构造方法对象来创建对应的String对象。
回复 使用道具 举报
估计你是在看张老师的反射视频吧,这里边老师只是举个例子,怎么得到String类中String(StringBuffer buffer)这个构造方法,所以传入的传入的参数是StringBuffer.class,这是在知道有String(StringBuffer buffer)这个构造函数的前提下进行的反射
假如你不知道String类有那些构造方法,、具体构造方法的参数是什么类型的也不知道,你可以通过如下方法得到每个构造方法的参数类型:

public class Test6
{
        public static void main(String[] args) throws Exception
        {
                Constructor[] cons = String.class.getDeclaredConstructors();
               
                for(Constructor con : cons)
                {
                        Class[] parameterType = con.getParameterTypes();
                       
                        for(Class clazz : parameterType)
                        {
                                System.out.print(clazz.getSimpleName() + ", ");
                        }
                       
                        System.out.println();
                }
        }
}

运行结果是
String,
char[],
char[], int, int,
int[], int, int,
byte[], int, int, int,
byte[], int,
StringBuilder,
byte[], int, int, String,
byte[], int, int, Charset,
byte[], String,
byte[], Charset,
byte[], int, int,
byte[],
StringBuffer,
int, int, char[],

你会发现里边有你想要的StringBuffer类型的参数,如果你想换别的可以根据不同类型的参数,选择不同的构造函数。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
耿鑫 发表于 2012-6-26 17:07
估计你是在看张老师的反射视频吧,这里边老师只是举个例子,怎么得到String类中String(StringBuffer buffer ...

嗯,现在已经看明白了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马