
No.3ベストアンサー
- 回答日時:
いきなりで申し訳ないですが、まず訂正です。
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() が活躍します。
No.2
- 回答日時:
ややこしいようですが、実は全く違います。
Class t = Class.forName("java.lang.Thread");
は、Threadクラスに対応するClassクラスのインスタンスを取得しています。
Classクラスは、「クラスを表すクラス」です。
この場合では、Threadクラスを表す、Classクラスのインスタンスを取得しています。ここでは、Threadクラスのインスタンスは登場しません。
Thread t=new Thread();
は、実際にThreadクラスのインスタンスを作成しています。ここでは、Classクラスは登場しません。
さらにややこしい話をして申し訳ないですが、Threadクラスを表すClassクラスのインスタンスから、実際のThreadクラスのインスタンスを作ることもできます。つまり、
Thread t = Class.forName("java.lang.Thread").newInstance();
と
Thread t = new Thread();
は同じ結果になります。
この回答への補足
ありがとうございます。
Thread t = Class.forName("Thread").newInstance();
をときどきみるのですが敢えて
Thread t = new Thread();
と書かないのは何か意図があるのでしょうか?
いっぱい書かなければならないのでメリットが無いと不合理だと思うのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どこからも呼ばれていない無意...
-
C# テキストボックスにマウスが...
-
java eclipse 型に解決できません
-
ドキュメントクラスの取得方法
-
標準モジュールとクラスモジュ...
-
「天声人語」をインターネット...
-
クラスモジュールの使い方が詳...
-
tomcat上でのpropertiesファイ...
-
そんなにお金がなくても年に1度...
-
今日は こどもの日 で、良い天...
-
同一パッケージにあるクラスが...
-
EclipseでJSPのコンパイルエラー
-
グローバルIPとプライベートIP...
-
IPアドレスのクラスAを取得して...
-
エクセルVBAでのwitheventsにつ...
-
ネスカフェ エクセラ と UCCク...
-
Eclipseのリファクタリング機能...
-
「エンクロージング型」と「外...
-
僕の出身中学校は200人同級生が...
-
main()を持つクラスが2つ以上...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
僕の出身中学校は200人同級生が...
-
今日は こどもの日 で、良い天...
-
どこからも呼ばれていない無意...
-
そんなにお金がなくても年に1度...
-
中学生です。 私は教室の黒板に...
-
恋愛
-
EclipseでJSPのコンパイルエラー
-
java eclipse 型に解決できません
-
共通で使う関数を集めたクラス...
-
同一パッケージにあるクラスが...
-
main()を持つクラスが2つ以上...
-
配列の重複する値とその個数を...
-
「隣の芝生は青く見える」現象...
-
重複エラーを解決するには
-
UMLのクラス図はmain()も含むん...
-
複数のクラスで共通した関数を...
-
VBAもしくはVB6:クラスの中で...
-
命名規約は連番でいいのか?
-
eclipse でクラスに色
-
3年間同じクラスになる確率
おすすめ情報