package fanshe.ConstructorDemo;
import java.lang.reflect.Constructor;
class Person
{
private int age;
private String name;
Person()
{
}
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return this.name;
}
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return this.age;
}
public String toString()
{
return "姓名:"+this.name+"\r\n"+"年龄:"+this.age;
}
}
public class InstanceDemo04
{
public static void main(String[] args)
{
Class<?> c=null;
try
{
c=Class.forName("fanshe.instanceDmeo.Person");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
Person per=null;
Constructor<?>[] cons = null ;
cons=c.getConstructors();
try
{
per=(Person)cons[1].newInstance("java爱好者",20);
//per=(Person)cons[0].newInstance();
}
catch(Exception e2)
{
e2.printStackTrace();
}
//per.setAge(20);per.setName("java爱好者");
System.out.println(per);
}
}
为什么我调用不了第二个构造方法呢?
import java.lang.reflect.Constructor;
class Person
{
private int age;
private String name;
Person()
{
}
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return this.name;
}
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return this.age;
}
public String toString()
{
return "姓名:"+this.name+"\r\n"+"年龄:"+this.age;
}
}
public class InstanceDemo04
{
public static void main(String[] args)
{
Class<?> c=null;
try
{
c=Class.forName("fanshe.instanceDmeo.Person");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
Person per=null;
Constructor<?>[] cons = null ;
cons=c.getConstructors();
try
{
per=(Person)cons[1].newInstance("java爱好者",20);
//per=(Person)cons[0].newInstance();
}
catch(Exception e2)
{
e2.printStackTrace();
}
//per.setAge(20);per.setName("java爱好者");
System.out.println(per);
}
}
为什么我调用不了第二个构造方法呢?
c=Class.forName("fanshe.ConstructorDemo.Person");
含main()方法的类是 InstanceDemo04,但报错的是 InstanceDemo03。
final Class startupClass =Class.forName("fanshe.ConstructorDemo.Person");
final Constructor constructor =startupClass.getConstructor(new Class[] {String[].class , Integer.class});
constructor.newInstance(new Object[] {"Java爱好者",20});
可以试试这种取构造器的方法
cons=c.getConstructors();
应改为:
cons=c.getDeclaredConstructors();改成这样的话,也有可能出错,返回的构造方法不一定是按定义顺序的。
如果用con[1],报错的话,用con[0]试试。
(之前有篇帖子,关于通过反射得到的构造方法在数组里的顺序,我查查,是什么结论来,一下子忘了)。
http://bbs.csdn.net/topics/390183924