黑马程序员技术交流社区
标题:
Java 反射为什么要显示的声明默认构造方法
[打印本页]
作者:
李会成
时间:
2013-2-20 14:55
标题:
Java 反射为什么要显示的声明默认构造方法
本帖最后由 李会成 于 2013-2-20 16:28 编辑
更位大神帮忙看一下,为什么在用方式二的时候需要显示的声明默认构造方法?????
import java.lang.reflect.Field;
public class Test
{
public Object test(Object object) throws Exception
{
Class<?> classType = object.getClass();
// 方式一:
Object sample = Sample.class.newInstance();
// 方式二,为什么需要显示的声明默认构造方法:
//Object sample = classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
Field field = classType.getDeclaredField("name");
field.set(sample, "tom");
return sample;
}
public static void main(String[] args) throws Exception
{
System.out.println(new Test().test(new Sample()));
}
}
class Sample
{
String name;
// public Sample()
// {
//
// }
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String toString()
{
return this.name;
}
}
复制代码
作者:
胥文
时间:
2013-2-20 15:58
getConstructor(Class<?>... parameterTypes)
返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
用这个方法获取构造方法的时候,只能获得公共的构造方法,要想获得就就必须将构造方法Public,否则就获取不到
作者:
Rancho_Gump
时间:
2013-2-20 16:09
本帖最后由 张向辉 于 2013-2-20 16:10 编辑
正如楼上所说 补充一点 默认构造方法的修饰符和本类的修饰符一致 为默认修饰符,不是public ; 如果类修饰符是public,默认构造函数修饰符也是public
作者:
Rancho_Gump
时间:
2013-2-20 16:18
本帖最后由 张向辉 于 2013-2-20 16:20 编辑
简单做了个示例:
public class Jichenglx {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//System.out.println(Class.forName("Jichenglx").newInstance());
System.out.println(Class.forName("Jichenglx").getConstructor().newInstance());
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "运行成功";
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2