Skip to Content
Java クックブック、第 4 版
book

Java クックブック、第 4 版

by Ian F. Darwin
May 2025
Intermediate to advanced
638 pages
10h 22m
Japanese
O'Reilly Media, Inc.
Content preview from Java クックブック、第 4 版

第17章. リフレクション、あるいは "クラスという名のクラス"

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

17.0 はじめに

クラスjava.lang.Class とリフレクション・パッケージjava.lang.reflect は、Java仮想マシンから情報を収集するための多くのメカニズムを提供する。リフレクションと総称されるこれらの機能により、その場でクラスをロードしたり、クラス内のメソッドやフィールドを発見したり、それらのリストを生成したり、動的にロードされたクラス上のメソッドを呼び出したりできる。プログラムの実行中に、クラスをゼロから(実際には、バイト配列から)構築できる仕組みさえある。これは、Javaが、Javaマシンの魔法のような秘密の内部構造に近づけるのとほぼ同じである。

JVM自体は、通常はCやC++で書かれた大規模なプログラミングで、Java仮想マシンの抽象化を実装している。OpenJDKや他のJVMのソースをインターネット経由で入手することができ、何ヶ月も勉強することができる。ここでは、JVMの機能を使用するプログラマの観点から、ほんのいくつかの点に焦点を当てる。

既存のクラスを動的にロードすることから始め、クラスのフィールドとメソッドのリストとメソッドの呼び出しに移り、最後にClassLoader 。Javaの興味深い側面の1つであり、その柔軟性(昔のアプレット、サーブレット、Webサービス、その他の動的API)を説明するものであると同時に、かつてはその速度の問題の1つであると認識されていたものでもある、動的ロードの概念である。例えば、最も単純な "Hello, Java "プログラムでさえ、HelloJava クラスのクラスファイル、その親クラス(通常はjava.lang.Object )のクラスファイル、PrintStream のクラス(System.out を使用したため)、PrintStreamの親のクラス、IOException とその親、などをロードしなければならない。これを実際に見るには、次のようにしてみよう:

java -verbose HelloJava | more

別の例を挙げると、アプレットが流行っていた頃、ブラウザーはアプレットのバイトコード・ファイルをインターネット経由でダウンロードし、デスクトップ上で実行した。どのようにして実行中のJVMにクラス・ファイルをロードするのだろうか?このちょっとしたJavaマジックについては、レシピ17.4で説明する。この章の最後には、JDKツールjavapの代替バージョンと、Java API全体への自分だけのリファレンスを公開することで有名なJava作者になるために使える相互参照ツールが紹介されている。

17.1 クラス記述子を取得する

問題

クラス名やインスタンスからClass オブジェクトを取得したい。

解決策

コンパイル時に型名がわかっていれば、コンパイラ・キーワード.class を使ってクラス・インスタンスを得ることができる。このキーワードは、コンパイル時にわかっている型であれば、8つのプリミティブ型であっても機能する。

そうでなければ、オブジェクト(クラスのインスタンス)があれば、java.lang.Object メソッドgetClass() を呼び出し、そのオブジェクトのクラスのClass オブジェクトを返すことができる(今のは口が裂けても言えない!): ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

最新の Java レシピ

最新の Java レシピ

Ken Kousen
Javaによる関数型プログラミング ―Java 8ラムダ式とStream

Javaによる関数型プログラミング ―Java 8ラムダ式とStream

Venkat Subramaniam, 株式会社プログラミングシステム社
MySQL クックブック、第 4 版

MySQL クックブック、第 4 版

Sveta Smirnova, Alkin Tezuysal

Publisher Resources

ISBN: 9798341650336