• ベストアンサー

Classオブジェクトとは?

Classオブジェクトとは、どのようなものなのですか? Sun Microのホームページに”実行中の Java アプリケーションのクラスおよびインタフェースを表します。”と書いていますが、意味がわかりません。詳しく教えて下さい。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • deadlock
  • ベストアンサー率67% (59/87)
回答No.2

エラー処理は無しですが… 実行するクラス名とメソッド名(引数なしのもの)を引数にして実行してみてください。 <例> java java.util.Date getTime そのクラスのClassインスタンスを取得して、いろんな情報を取り出したり、メソッドを実行したりします。 ソース中にはDateクラスは出てきませんが、実際にインスタンスを生成してgetTime()メソッドを呼び出しています。 指定するクラスとメソッドは自分で作成したものでも大丈夫です。 コンストラクタとメソッドはpublicで引数なしにしてください…ちょっと手抜きなので(^^; public class ReflectSample { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { if (args.length <= 1) {return;} // 対象クラスのClassオブジェクトを取得 Class clazz = null; clazz = Class.forName(args[0]); // 持っているメソッドを表示 Method[] methods = clazz.getDeclaredMethods(); for (int i = 0; i < methods.length; i++) { System.out.println(methods[i]); } // 親クラスやインターフェース System.out.println(clazz.getSuperclass()); Class[] interfaces = clazz.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { System.out.println(interfaces[i]); } // 第二引数で指定された名前のメソッドを実行 Object target = clazz.newInstance(); // 引数なしコンストラクタでインスタンス作成 // 指定された名前を持つメソッド(引数なし) Method method = clazz.getMethod(args[1], new Class[0]); // メソッド実行 System.out.println(method.invoke(target, new Object[0])); } }

ab5
質問者

お礼

ありがとうございました。Classクラスに関して、わかりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.1

そのまま、クラスの情報です。以下Class(=java.lang.Class)とクラスを分けて書きます。 あるクラス(たとえば、java.lang.String)を考えると、 そのクラスにはメソッドやフィールド、コンストラクタ、親クラス、 implementsしているインターフェースなどの情報があります。 これらの情報を表現しているのがClassクラス(のインスタンス。Classオブジェクトでも可)です。 java.lang.reflectパッケージのクラスと合わせると、使用するメソッドや 生成するインスタンスを実行時に動的に切り替えることができます。 フレームワークなどを作成するときには必須です。 実際に見てみるほうが分かりやすいかもしれませんね。 Classクラスとリフレクションを使った例を書いてみるので、ちょっと待ってください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Object.class

    Object.classをWindowsXPの検索機能で調べると  java/langというホルダーが表示されますが 普通のC:\java\・・・表現ではないので戸惑っています。java/langは何処にあるのですか。

    • ベストアンサー
    • Java
  • あるclassのオブジェクトをVectorで作るには

    以下のプログラムのようにあるクラスを定義してそのクラスの オブジェクトを配列として作成する方法は知ってるんですが、 Vectorとして作成するにはどうしたらいいですか? public class Test {  public static void main(String[] args) {   Book book[] = Book[5];   book[0] = new Book("English");  } } class Book{  String name;  Book(String name){   this.name = name; } }

    • ベストアンサー
    • Java
  • オブジェクト指向について

    オブジェクト指向における  オブジェクト、インターフェース、実装、クラス という概念を教えてください>< 実例があると助かります。。

  • Servlet上でのClass#forName()について

    こんにちは。三田と申します。 Class#forName()で取得したClassオブジェクトが、Servlet上とそうでない場合で結果が違っていました。 実際、行っている処理は、あるクラスのClassオブジェクトをClass#forName()で取得して、次にそのクラスのインスタンスを生成して、Class#isInstance()をしているだけです。 上記の処理を行った場合に、Servlet上ではfalseで そうでない場合は、trueになるのです。 デバックしてみたところ、インスタンスを生成したときにServlet上では、Classオブジェクトの変数に値が入っていないのに対し、Servletを使用しない場合は、Classオブジェクトの変数に値が入っていました。 その違いは発見したのですが、なぜそうなるのかがわかりません。理由を知っている方がいらっしゃいましたら、ぜひご教授をお願いします。 以上、よろしくお願いします。

  • オブジェクトの作成

    あるHPで以下のようなことがかかれていました。 ------------------------------------------------- この例では Java 環境ですでに存在するクラスからオブジェクトを作成する。しばしば、 Java オブジェクトは次のような文で作成される。 Date today = new Date(); これにより、新規 Dateオブジェクトが作成される。 ------------------------------------------------- で、どれがオブジェクトなんですか? todayがオブジェクトなんでしょうか? BASICならわかるのですが、オブジェクト指向ってさっぱりまかりません。だれか助けてください。

    • ベストアンサー
    • Java
  • 「Class<?>」てなんですか???

    あるサンプルソースで、 public Class<?> getColumnClass (int column) {return getValueAt (0, column) .getClass () ;} } ; というクラスがでてきました。 Classの後の「<?>」が何なのか気になります。 あっても無くてもプログラムの実行には問題ないようなのですが、 これは、一体何のためにあるのでしょうか? ご存知の方教えてください。

  • jarファイル内のクラスをインスタンス化する

    http://homepage3.nifty.com/satoshis/java/memo.html#extension 上記のサイトを参考に、jarファイル内のクラスをインスタンス化しようとしているのですが、 clazz.newInstance(); を実行しようとすると、以下のようなエラーが発生します。 java.lang.IllegalAccessException: Class jp.co.AAAAA.BBBBB can not access a member of class CCCCC with modifiers "" at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57) at java.lang.Class.newInstance0(Class.java:302) at java.lang.Class.newInstance(Class.java:261) at jp.co.loft.LogCut.main(LogCut.java:58) ※jp.co.AAAAA.BBBBB は実行クラス、CCCCCはjarファイル内のクラスです。 開発環境は、以下です。 eclipse2.1.1 + jdk1.5.0_02 どんな些細なことでもよいので、ご存知の方、ご教授願えないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 子クラスのオブジェクトに親クラスのオブジェクトを代入

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが 子クラスのオブジェクトに、親クラスのオブジェクトを代入する方法が分からなくて困っています><。 ソースコードで説明すると class Car { } class Bike:Car { } Car oya = new Car(); Bike kodomo = new Car(); kodomo = oya;//これはエラーになる というかんじです。 これが代入できるような方法はないでしょうか? かなり抽象的な質問ですが、よろしければ御回答をお願いします。

  • オブジェクト・・・参照代入・・・???

    問題(1) class ApBase extends Object implements Runnable (省略) ApBase aBase = new ApBase(); Runnable aR = aBase; ○ オブジェクトにインターフェースが実装されていることがわかる限りオブジェクト参照をインターフェイス参照に 代入することは可能です。 問題2 class ApBase extends Object implements Runnable (省略) Object obj = aBase; Runnable rn = obj; × コンパイラにとってobjはObjectなのでRunnnableインターフェイス参照への代入は認められません。 同じほんの問題です。 矛盾していませんか??? ・・・・多分僕の理解が足りないだけです(^_^;) もう少しわかりやすく教えてください・・・ お願いいたします

    • ベストアンサー
    • Java
  • オブジェクトの関連について

    クラスAAAとクラスBBBをインスタンス化し、それぞれ、aとbのオブジェクトとします。 mainメソッドから、bのbmethメソッドを呼び出し、さらに、Amethメソッドを呼び出し また、mainからもaのAmethメソッドを呼び出し可能にする方法はありませんでしょうか? まだ、Java初心者なもので説明も不十分かと思いますがよろしくお願いします。 class AAA{ void Ameth() { System.out.println("Aメソッド"); } } class BBB{ public AAA a; void bmeth(){ a.Ameth(); } } public class test{ public static void main(String arg[]) { AAA a = new AAA(); BBB b = new BBB(); b.bmeth(); a.Ameth(); } }