| 
     
 
 import static java.lang.System.out;
 
 import java.lang.reflect.InvocationTargetException;
 
 public class Main {
 public Main() {
 }
 
 public Main(Integer i) {
 }
 
 public Main(Object o) {
 out.format("Constructor passed Object%n");
 }
 
 public Main(String s) {
 out.format("Constructor passed String%n");
 }
 
 public static void main(String... args) {
 String argType = (args.length == 0 ? "" : args[0]);
 try {
 Class<?> c = Class.forName("Main");
 if ("".equals(argType)) {
 // IllegalArgumentException: wrong number of arguments
 Object o = c.getConstructor().newInstance("foo");
 } else if ("int".equals(argType)) {
 // NoSuchMethodException - looking for int, have Integer
 Object o = c.getConstructor(int.class);
 } else if ("Object".equals(argType)) {
 // newInstance() does not perform method resolution
 Object o = c.getConstructor(Object.class).newInstance("foo");
 } else {
 assert false;
 }
 
 // production code should handle these exceptions more gracefully
 } catch (ClassNotFoundException x) {
 x.printStackTrace();
 } catch (NoSuchMethodException x) {
 x.printStackTrace();
 } catch (InvocationTargetException x) {
 x.printStackTrace();
 } catch (InstantiationException x) {
 x.printStackTrace();
 } catch (IllegalAccessException x) {
 x.printStackTrace();
 }
 }
 }
 
 
 
 
 
 
 
 |