質問: class.forname("java.lang.thread"); と thread t=new thread(); の 違いを教えてください。
回答: いきなりで申し訳ないですが、まず訂正です。 thread t = class.forname("java.lang.thread").newinstance(); ではなくて thread t = (thread) class.forname("java.lang.thread").newinstance(); でした。失礼いたしました。 さて前の回答の補足についてですが、実際には、単純にクラスをインスタンス化するのに、いちいち thread t = (thread) class.forname("java.lang.thread").newinstance(); というような長い命令を書かなくても、 thread t = new thread(); と書くだけで十分です。 ただ、上の newinstance() を使う方法が完全に無意味であるかというと、そうでもないのです。 new thread() と書くと、インスタンス化されるクラスはコンパイルの時点で thread に固定されてしまいますが、場合によっては、どのクラスをインスタンスかするのか実際にプログラムを動かしてみるまでわからないということもあります。 こういう場合、例えば object obj; if ("java.lang.object".equals(classname)) { obj = new object(); } else if ("java.lang.thread".equals(classname)) { obj = new thread(); } else if ("java.lang.string".equals(classname)) { obj = new string(); } というようにいちいち書き分けるよりも、 object obj = class.forname(classname).newinstance(); と書いたほうが分かりやすく、かつ柔軟に対応できるのです。こういう場面では、newinstance() が活躍します。