class ConstructorExists { void foo(Object o, Class c) throws Exception { Class ca = A.class; ca.getConstructor(int.class); ca.getConstructor(float.class); ca.getConstructor(boolean.class); ca.getConstructor(String.class); ca.getConstructor(Exception.class); ca.getConstructor(int.class, boolean.class, String.class); ca.getConstructor(int.class, c, String.class); ca.getConstructor(int.class, o.getClass(), String.class); ca.getDeclaredConstructor(int.class); ca.getDeclaredConstructor(float.class); ca.getDeclaredConstructor(boolean.class); ca.getDeclaredConstructor(String.class); ca.getDeclaredConstructor(Exception.class); ca.getDeclaredConstructor(int.class, boolean.class, String.class); ca.getDeclaredConstructor(int.class, c, String.class); ca.getDeclaredConstructor(int.class, o.getClass(), String.class); C.class.getConstructor(int.class); C.class.getConstructor(boolean.class); A.class.getConstructor(Integer.TYPE); A.class.getConstructor(Boolean.TYPE); A.class.getConstructor(Double.TYPE); C.class.getConstructor(); C.class.getConstructor(new Class[0]); C.class.getConstructor(null); A.class.getConstructor(); A.class.getConstructor(new Class[0]); A.class.getConstructor(null); C.class.getDeclaredConstructor(); C.class.getDeclaredConstructor(new Class[0]); C.class.getDeclaredConstructor(null); A.class.getDeclaredConstructor(); A.class.getDeclaredConstructor(new Class[0]); A.class.getDeclaredConstructor(null); } static class A { public A(int n) {} protected A(float f) {} A(boolean b) {} private A(String s) {} public A(int n, boolean b, String s) {} public A(int n, boolean b, float f) {} } static final class C extends A { public C(int n) { super(n); } public C() { super(0); } } }