The main differences between the three approaches come down to how classes are at runtime and what you can do with them.
For instance...
Class.forName("test.Employee").newInstance();
ClassLoader Employee test. , . , ...
ClassLoader.getSystemClassLoader().loadClass("test.Employee").newInstance();
"system" ClassLoader, , .
- , Class . , , .
, , , test.Employee , test.Employee , . interface .
ClassLoader , , , , , . , , interface s.
java.awt.Toolkit JDBC java.sql.Driver
ClassLoader , JVM. new ,
ClassLoader - , , ,
...