public class buttoncla{
String s;
int i,i2,i3;
private buttoncla(){}
protected buttoncla(String s,int i) {
this.s=s;
this.i=i;
}
public buttoncla(String...strings) throws NumberFormatException{//strings是一个字符串数组,传经来的参数为数组元素
if(0<strings.length)
i=Integer.valueOf(strings[0]);//返回保存指定的String值的Integer对象
if(1<strings.length)
i2=Integer.valueOf(strings[1]);
if(2<strings.length)
i3=Integer.valueOf(strings[2]);
}
public void print() {
System.out.println("s="+s);
System.out.println("i="+i);
System.out.println("i2="+i2);
System.out.println("i3="+i3);
}
}
///
import java.lang.reflect.Constructor;
public class MyException{
@SuppressWarnings("rawtypes")
public static void main(String[]args) {
buttoncla button=new buttoncla();//创建一个buttoncla类对象
Class buttonC=button.getClass();//输出button是buttoncla类
Constructor declaredConstructors[]=buttonC.getDeclaredConstructors();//访问buttonc的构造方法,返回值是一个Constructors对象或数组
for(int x=0;x<declaredConstructors.length;x++)
{
Constructor constructor=declaredConstructors[x];
System.out.println("查看是否允许带有可变数量的参数:"+constructor.isVarArgs());//查看该构造方法是否允许带有可变数量的参数,是(true)
System.out.println("该构造方法的入口参数类型依次为:");
Class parameterTypes[]=constructor.getParameterTypes();//获得构造方法各个参数的类型
for(int j=0;j<parameterTypes.length;j++)
{
System.out.println(""+parameterTypes[j]);//输出参数类型
}
System.out.println("该构造方法可能抛出的异常类型为:");
Class[] exceptionTypes=constructor.getExceptionTypes();//获取构造方法可能抛出的异常类型
for(int j=0;j<exceptionTypes.length;j++)
{
System.out.println(""+exceptionTypes[j]);//输出异常类型
}
buttoncla button2=null;
while(button2==null)
{
try {//如果该成员变量的访问权限为private,则抛出异常,即不允许访问,无法通过私有的方法创建对象,否则会抛出异常
if(x==2)//通过执行默认没有参数的构造方法创建对象
button2=(buttoncla)constructor.newInstance();
else if(x==1)
button2=(buttoncla)constructor.newInstance("7",5);
else {
Object[] parameters=new Object[] {
new String[] {"100","200","300"}
};
button2=(buttoncla)constructor.newInstance(parameters);
}
}catch(Exception e) {
System.out.println("在创建对象时抛出异常,下面执行setAccessible()方法"+e);
constructor.setAccessible(true);//该构造方法设置为可以访问
}
}
button2.print();
System.out.println();
}
}
}