[for not nested classes]
I assume that constructors of that class are not public. In that case you can do it this way
Lets say you have class A in some package
package package1;
public class A {
A(){
System.out.println("this is default constructor");
}
}
to create its object you can use its constructor like this
Class c = Class.forName("package1.A");//full package name
//note: getConstructor() can return only public constructors,
//you need to use
Constructor constructor = c.getDeclaredConstructor();
constructor.setAccessible(true);
Object o = constructor.newInstance(null);
[for nested classes]
If you want to get Class of inner class with Class.forName
you need to use this form
Class clazz = Class.forName("package1.Outer$Inner");
$
says that class after it is inner. Inner classes are very similar to methods, they have access to all members of its outer class, and to exists/work need instance of that outer class, so while creating instance of Inner
class you have to pass reference to instance of Outer
class.
Here is example.
package1
package package1;
public class Outer {
class Inner{
Inner(){
System.out.println("default constructor of inner class");
}
}
}
package2
package package2;
import package1.Outer;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) throws Exception {
Outer outerObject = new Outer();
Class innerClazz = Class.forName("package1.Outer$Inner");
// constructor of inner class as first argument need object of
// Outer class
Constructor constructor = innerClazz.getDeclaredConstructor(Outer.class);
//we need to make constructor accessible
constructor.setAccessible(true);
//now we need to pass instance of outer class in constructor
Object o = constructor.newInstance(outerObject);
System.out.println("we created object of class: "+o.getClass().getName());
}
}