![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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で質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- HTML・CSS cssが効かなくて困ってます 1 2023/01/01 23:57
- Java java final 1 2022/06/10 22:49
- Ruby No route matches [GET] "/posts/5/destroy" 1 2022/03/24 13:00
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS flex の各子要素を横幅 100% にしたい 1 2022/09/22 21:25
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列の重複する値とその個数を...
-
数学の計算問題。 3年間同じク...
-
共通で使う関数を集めたクラス...
-
クラスにアクセスできません。
-
java eclipse 型に解決できません
-
packageとimport の違いって?
-
EclipseでJSPのコンパイルエラー
-
どこからも呼ばれていない無意...
-
アルキメデスの大戦の櫂はなぜ2...
-
複数のクラスで共通した関数を...
-
進学校通ってたんですけど、眼...
-
ViewGroup.LayoutParamsクラス
-
グローバルIPとプライベートIP...
-
「天声人語」をインターネット...
-
VB2008: クラスライブラ...
-
河合塾
-
中学2年です‼︎ 明日.学級の級長...
-
main()を持つクラスが2つ以上...
-
Java import.text.* とは?
-
VC++でMFCアプリ作成中です。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の重複する値とその個数を...
-
「天声人語」をインターネット...
-
java eclipse 型に解決できません
-
グローバルIPとプライベートIP...
-
ポータブル電源を買おうと思う...
-
容姿について
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
UMLのクラス図はmain()も含むん...
-
同一パッケージにあるクラスが...
-
main()を持つクラスが2つ以上...
-
1 つのヘッダファイルに複数の...
-
アルキメデスの大戦の櫂はなぜ2...
-
dllと同じプロジェクトにする方法
-
IPアドレスの3バイト目の呼び方
-
3年間同じクラスになる確率
-
重複エラーを解決するには
-
同じパッケージ、クラス名が含...
-
コンボボックスのマウスホイー...
-
共通で使う関数を集めたクラス...
おすすめ情報