In the normal case there's not much difference. One correction - you want a String name in class.forName("classname");
I use a lot of class.forName(name).newInstance() where the classname comes from configuration. We can add new classes at run time without changing any code, compiling or deploying jars. You can't do that trick with new.
newInstance has optional parameters for custom or non-default class loaders. For example, we found a place in J2EE where the default classloader doesn't know about classpaths that were added in server configuration after the JVM started up. So we have go get the classloader that loaded the current class and use that to load another class. If that made no sense, just file away a note that someday when you get a "class not found" error on a perfectly good class, you may have to research classloaders.
A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi
The second one works when you don't know the class name at compile time.
The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus