Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Web資料 : http://www.ohshiro.tuis.ac.jp/~ohshiro/progaa/村上クラス : http://www.edu.tuis.ac.jp/~ym206508/lecture/programming/
村上クラス令和元年10⽉9⽇
プログラミング応⽤b 第3回Javadoc, APIドキュメントの利⽤⽅法、アノテーション
1. はじめにJavaには、「窓を開く」「通信する」「ファイルを読み書きする」といった ⾼度な機能を持つ多数のクラスやインターフェースを集め、それらをいくつかのパッケージとしてまとめたもの が元から⽤意されてる = Java API (Application Programming Interface)
実⽤的かつ本格的なソフトウェアを作成するためには,Java API を知る必要がある!!
… クラス… パッケージ
窓を開く 通信する
ファイルを読み書きする
Java API
今回の授業では以下の内容ついて解説する:・Java API のマニュアルの⾒⽅・Javaのソースプログラム から マニュアルを⾃動⽣成する javadoc・2004年にJavaに導⼊されたアノテーション
2. API と Java API
付加価値の⾼いソフトウェアを作成するためには,⾳の出⼒ / ウィンドウを表⽰ / グラフィックデータを表⽰ / データ通信
といった機能を利⽤する必要
⇨ ⼀般に,このような機能は OS が API として提供※ APIとは、様々な機能をプログラムから利⽤できる形にまとめたもの
⼀般的なプログラム⾔語では,• Windows OS⽤のプログラムを作成 → Windowsに⽤意されているAPIを利⽤• Macintosh⽤のプログラムを作成 → MacOSに⽤意されているAPIを利⽤
プログラミング技術を実践的に⾝につけていく最初の⼀歩は,API の積極的な利⽤であると⾔える
3. Java API
Java仮想マシン (JVM; Javaインタプリタ)は、Javaのクラスファイル(バイトコード)を、それが実⾏された環境に応じたネイティブコードに変換して実⾏する仕組み(ソフトウェア)
⇨ JREをさまざまな計算環境に移植することで どのOS上でも Javaのクラスファイル(バイトコード)を同じように実⾏することができる!!
JVMは、Java API や 複数のツールとセットに、Java実⾏環境(Java Runtime Environment; JRE) としてリリースされている。
4. Java API のドキュメント ①Java APIの仕様書 (Java APIドキュメント) は、基本的に Java API ドキュメントは,htmlファイルで提供されている。
● Javaの公式Webサイト: https://java.com/ja/
現在、Javaの権利を持つ オラクル社 が Javaの公式Webサイト を開設し、Javaプラットフォーム (動作環境) や 開発環境 (SDK, Software Development Kit),ドキュメントなど が公開されている。
● Javaの種類とバージョン
Javaには,以下のような種類がある。• スタンダード・エディション (Standard Edition, SE)
標準的な構成のもの• エンタープライズ・エディション (Enterprise Edition, EE)
ネットワーク対応の分散アプリケーションなどに⽤いられるもの• マイクロ・エディション (Micro Edition, ME)
携帯電話やPDA(Personal Digital Assistant)などの 組み込み系デバイス に搭載するためコンパクトにまとめられたもの
本授業で対象とするのは,スタンダードエディショ(SE)
4. Java API のドキュメント ②• Javaは登場以来,幾度となく改良を加えられバー
ジョンアップを繰り返してきた (右表)。
• 1998年に発表された 1.2 は、⼤きなバージョンアップであり,そのためか「Java 2」という名称を与えられた。
• 「Java 2」は厳密なバージョン名ではなく,ブランド名のようなもので,2004年発表のバージョン5.0まで,この「Java 2」というブランド名がついていた。
• しかし,「Java 2」というブランド名とバージョンが別に存在すると混乱を招くためか,2006年のバージョン6からは,「Java 6系」という具合に,バージョンと合わせた呼び⽅をされるようになった。
• 現時点ではスタンダードエディションのバージョンは, Java 11系(Java SE 11) である。
Javaのバージョン 発表年
1.0Java 1系
1996
1.1 1997
1.2
Java 2系
1998
1.3 2000
1.4 2002
5.0 2004
6 Java 6系 2006
7 Java 7系 2011
8 Java 8系 2014
9 Java 9系 2017
10 Java 10系 2018/3
11 Java 11系 2018
4. Java API のドキュメント ③なお,配布されているJavaプラットフォーム・ソフトウェアにも種類が異なるものが2つある。
• JRE (Java Runtime Environment)Javaプラットフォームの純粋な実⾏環境部分だけを提供したもの。Javaのプログラムを動かすだけならJREだけでよい。
• JDK (Java Standard edition Development Kit)Java SE⽤のSDK(Software Development Kit; JREにコンパイラなどの開発ツールを追加した開発⽤キット)のこと
● APIドキュメントの⼊⼿ドキュメント類は,このページから参照・ダウンロードできる。※このページにあるリンクをたどっていくと様々な情報を⾒ることができる。
Java API ドキュメントは上記サイトの以下のところにある。• JDK6.0 ⽇本語ドキュメントのページ• JDK7.0 ⽇本語ドキュメントのページ• JDK8.0 ⽇本語ドキュメントのページ• JDK9.0 ⽇本語ドキュメントのページ• JDB10.0 ⽇本語ドキュメントのページ
⼀括ダウンロードはこちらから。ただし⾮常に⼤きいファイルなので,⼤学のデスクトップPCにダウンロードしないこと
5. APIドキュメントの読み⽅ ①APIドキュメントを開くと,次のようなページが表⽰される。実際にこのページを開いてみよ。※ 図では,⼤学のデスクトップPCにインストールされているバージョンよりもかなり古いバージョン1.4.0のものになっているが,概要はほぼ同じである
5. APIドキュメントの読み⽅ ②
● メインフレーム• パッケージやクラス,インタフェイスなど
の情報を詳しく表⽰
• 上部には,現在何がメインフレームに表⽰されているかを⽰すナビゲーションバー
• 初期状態でメインフレームに表⽰されているのは,(この例では)Java 2 SE APIを構成するパッケージの説明付き⼀覧
• 「概要」の他に,「パッケージ」「クラス」「使⽤」「階層ツリー」「⾮推奨API」「索引」「ヘルプ」という項⽬
• 「ヘルプ」の項⽬に各項⽬の内容について簡潔に紹介
ナビゲーションバー
5. APIドキュメントの読み⽅ ④
● パッケージ⼀覧フレーム と クラス⼀覧フレーム• 上部のパッケージ⼀覧フレームには,「すべてのクラ
ス」という項⽬ と パッケージの⼀覧 がアルファベット順に表⽰
• 「すべてのクラス」をクリックすると,クラス⼀覧フレームには,Java APIに含まれるすべてのクラスの⼀覧が表⽰
• パッケージ⼀覧フレームの個々のパッケージ名をクリックすると,その下のクラス⼀覧フレーム内に,クリックしたパッケージの名称とそのパッケージに所属するインタフェイスやクラスなどの⼀覧がアルファベット順に表⽰
• インタフェイスはイタリック体で表⽰
5. APIドキュメントの読み⽅ ③● パッケージ情報の表⽰• クラス⼀覧フレーム内に
表⽰されたパッケージの名称をクリックすると,メインフレームにそのパッケージの仕様が表⽰
図. 例では,java.appletのパッケージ名称の部分③をクリックし,メインフレームにjava.appletパッケージの説明が表⽰される(④)。こうしてパッケージ情報を表⽰した場合,メインフレームのナビゲーションバーは,「パッケージ」の項⽬がアクティブになっている(⑤)。
5. APIドキュメントの読み⽅ ④● パッケージ情報の表⽰• パッケージ情報を表⽰しているとき,ナビゲーションバーの「使⽤」「階層ツリー」「⾮
推奨API」をクリックすると,それぞれ次のような情報がメインフレームに表⽰される。
n 「使⽤」そのパッケージを使⽤している他のパッケージや,どのクラスがどのパッケージに使⽤されているか,という情報
n 「階層ツリー」- 重要 -そのパッケージに所属するクラスのクラス階層(extendsによる継承関係とimplementsによる実装関係の階層) と インタフェイス階層(インタフェイス間のextendsによる継承関係の階層) が表⽰
5. APIドキュメントの読み⽅ ⑤例. java.appletパッケージの階層構造を表⽰すると,クラス階層は,下図(1)のように表⽰
これは図(2)のような階層を表す。つまり,java.appletパッケージの java.applet.Appletクラスと,Appletクラスの内部で定義されてい java.applet.Applet.AccessibleAppletクラス が,どのようなクラス階層の中にあるかを⽰している。
5. APIドキュメントの読み⽅ ⑤例. java.appletパッケージの階層構造を表⽰すると,クラス階層は,下図(1)のように表⽰
これは図(2)のような階層を表す。つまり,java.appletパッケージの java.applet.Appletクラスと,Appletクラスの内部で定義されてい java.applet.Applet.AccessibleAppletクラス が,どのようなクラス階層の中にあるかを⽰している。
クラス階層やインタフェイス階層を把握することが,オブジェクト指向⾔語によるプログラミングでは⾮常に重要
Java APIを使う場合,このクラス階層表⽰機能を使って,使⽤したいクラスの継承・実装関係を把握すると良い。
5. APIドキュメントの読み⽅ ⑥n 「⾮推奨API」
• Javaがバージョンアップする過程で,古くなったり,不都合が出たりしたために「もう使⽤しない⽅が良い」とされるAPIを表⽰
• ⾮推奨のAPIはできるだけ使⽤しないように気をつけよ。
5. APIドキュメントの読み⽅ ⑦● クラス・インタフェイス情報の表⽰
クラス⼀覧フレームの中のインタフェイス名,クラス名などをクリックすると,そのインタフェイスやクラスの説明がメインフレームに表⽰
例えば、
左図の状態でクラス⼀覧フレームの⼀番下に表⽰されているAppletクラス の項⽬をクリックすると,メインフレームには,Appletクラスの説明が表⽰。
このとき,メインフレームのナビゲーションバーは,「クラス」の項⽬がアクティブになっている。
5. APIドキュメントの読み⽅ ⑧
メインフレームにクラスの情報を表⽰すると,
a. そのクラスの継承階層b. そのクラスが実装しているインタフェイスc. サブクラスd. クラスが導⼊されたときのJavaのバージョンe. フィールドの概要f. どのクラスからフィールドを継承したかg. コンストラクタの概要h. メソッドの概要i. どのクラスからメソッドを継承したj. コンストラクタの詳細k. メソッドの詳細
といった仕様が表⽰される。インタフェイスを表⽰した場合も同様。
1. java.applet.Appletクラスについて下記(a)〜(k)がどのように記述されているか確認せよ
授業内課題
クラスの情報を表⽰した場合: a. そのクラスの継承階層b. そのクラスが実装しているインタフェイスc. サブクラスd. クラスが導⼊されたときのJavaのバージョンe. フィールドの概要f. どのクラスからフィールドを継承したかg. コンストラクタの概要h. メソッドの概要i. どのクラスからメソッドを継承したj. コンストラクタの詳細k. メソッドの詳細
2. Java.applet以外のパッケージについても,様々なクラスやインタフェイスの仕様を⾃分でいろいろと⾒てみよ。
5. APIドキュメントの読み⽅ ⑨なお,「パッケージ」の項⽬をクリックすると,そのインタフェイスやクラスが所属しているパッケージの説明がメインフレームに表⽰される。
以上のように,Java APIのドキュメントは,APIの概要から,詳細な仕様までWebブラウザで効率よく⾒ることができるようになっているので,Javaプログラミングを⾏うときは,随時参照するとよい。
6. javadoc ①Java SDKに付属している javadoc というプログラムを使⽤して,Javaのソースプログラムから⾃動的にJava APIドキュメント作成することができる。
● javadoc とは• javaコンパイラの⼒を借りてソースプログラムを解析し,クラス名・インタフェイス
名・フィールド名・メソッド名などを⾃動的に抽出• 説明⽂をドキュメンテーションコメントと呼ばれる特別な形式のコメントとして書いて
おけば,javadocはその内容を処理してドキュメントに説明⽂を挿⼊
(javadocコマンドを起動)• コマンドプロンプトから「> javadoc」(>はプロンプト)と⼊⼒と、javadoc の使い⽅
や指定できるオプションが表⽰• javadocコマンドには多様なオプションを指定でき,動作を細かくカスタマイズするこ
とが可能
6. javadoc ②● javadoc の利⽤例※ ここではオプションを全く指定せず,デフォルトの状態で使⽤する例で説明する。※ ⾃分で作成したソースプログラムをドキュメント化するケースをとりあげる。
javadocでドキュメント化する例として,サンプルコード: MySample.java(第3回のWeb資料
ページからダウンロード)を使⽤。
MySample.java (コメントを除いたソースコード)
このコードは、クラスMySampleを宣⾔しているだけ。MySampleは,1つのフィールド,1つのコンストラクタ,1つのメソッドを持っているだけの,⾮常に単純なクラスです。
6. javadoc ③MySample.java (コメントを追加したソースコード)
なお,javadocは⽇本語⽂字コードにも対応• UNIX系OSは、EUC-JP
(改⾏コードはLF)
• Windows OSは、シフトJIS (改⾏コードはCR+LF)
• MacOS XはUNIX系OSだが,Windows OSと同様に,シフトJIS (改⾏コードはCR+LF) で書かなければならない。
6. javadoc でドキュメントを⽣成 ①実際に Javadoc を使ってドキュメントを⽣成してみよう。
作成⼿順(Eclipseの場合)
1. 「ソースコードの⽂字コード」が「Eclipse のデフォルト⽂字コード」と違う場合は, ソースファイルの⽂字コードを確認
右図①のようにソースコードをEclipseのテキストエディタで開き,右下に表⽰されている⽂字コード ( MS932 または UTF-8 など) をメモする︕
6. javadoc でドキュメントを作成 ②
2. 対象となるプロジェクトを選んだ状態で,『プロジェクト』メニュー→『Javadocの⽣成』を選択
3. 表⽰されるウィンドウで以下の設定:
(1)「Javadocコマンド」欄でjavadoc コマンドの絶対パス(場所) を指定(右図②)
(2) ドキュメントを作成するプロジェクトにチェックを⼊れ(右図③)
6. javadoc でドキュメントを作成 ③
(3) 「次の可視性を持つメンバーのjavadoc を作成」欄で,ドキュメントを作成するメンバーの範囲を決める(右図④)
4. 「次へ」を押す。
6. javadoc でドキュメントを作成 ④
5. 表⽰されたウィンドウで,更に「次へ」を押す。
6. javadoc でドキュメントを作成 ⑤8. 右図⑦のように,表⽰された「追
加のJavadoc オプション」の欄に次の2⾏を追加。
⻘⽂字の部分は,⼿順1で確認・メモしたソースファイルの⽂字コードに合わせる-encoding UTF-8-charset MS932
※この例では,ソースコードの⽂字コードがシフトUTF-8,⽣成したHTMLドキュメントの⽂字コードがシフトJIS(MS932)であることを指定している。
9. 『完了』ボタンを押す
プロジェクトフォルダ内にdocフォルダが⽣成され,その中にプロジェクト内のソースコードのJavadocドキュメントファイルが⽣成される。
6. javadoc でドキュメントを作成 ⑥
作成⼿順(コンソールの場合)
1. MySample.java をHTMLファイルの⼊っていないフォルダに保存。• javadocがhtml形式のファイルを⽣成するため。• ⽣成されるファイルと同じ名前のファイルが同じフォルダにある場合は,それらを
上書きしてしまう可能性があるため。
2. MySample.javaを⼀度コンパイルし,エラー無しにコンパイルできることを確認
3. 確認後,次のようにコマンドを⼊⼒して,MySample.javaに関するドキュメントを⽣成
コマンドプロンプト(ターミナル)で: > cd フォルダ ... MySample.java を⼊れたフォルダのパス> javadoc MySample.java
6. ⽣成されたドキュメント ①下図に⽰す12個のドキュメントを構成するファイルが⽣成される。
⻘⾊で⽰した MySample.html は MySampleクラス のドキュメントなので,クラス名と同じファイル名となっている。
Webブラウザで⽣成された index.html を開いてみよう!
6. ⽣成されたドキュメント ②
6. ⽣成されたドキュメント ③
④〜⑥には,MySampleクラスの説明,それがどのバージョンから導⼊されたのか,そして関連項⽬が書かれてる。
こういった付加情報は,ソースプログラム内に ドキュメンテーションコメント としてプログラマ⾃⾝が記述しておく。
7. ドキュメンテーションコメントの書き⽅ ①ドキュメンテーションコメントは,説明したいクラス・インタフェイス・フィールド・メソッドなどの宣⾔の直前に書かなくてはならない。ドキュメンテーションコメントはコメントの⼀種である。しかし,通常のコメントは /* から始まり */ で終了するが,ドキュメンテーションコメントは,
/**で始まり*/で終了する。
コメントの開始時にアスタリスクが2個連続
7. ドキュメンテーションコメントの書き⽅ ②
⽇本語で複数⾏のコメントを書くと,1⾏にまとめられるときに,間に半⾓スペースが⼊ってしまう。
これは,複数⾏の結合の仕⽅が英語をベースに考えられているため。
7. ドキュメンテーションコメントの書き⽅ ③
• 説明⽂の後で,@から始まる英単語は javadocタグ と呼ばれ、特定の情報を記述するのに使⽤
• ドキュメンテーションコメントは,前半の説明⽂部分である コメントセクションと,後半の 1個以上の javadoc タグからなるタグセクション に分かれている
• タグセクションの後に説明⽂を書くことはできない ので注意が必要
javadocタグ
7. ドキュメンテーションコメントの書き⽅ ④
• javadocタグの書式:「@tag名 タグ⽤のコメント」• javadocタグは,ドキュメンテーションコメントの中の⾏頭 (*の直後) に書かなくてはな
らない。• 1⾏に書けるタグは1つだけ• タグ⽤コメントは
* @tag名 複数⾏にわたるタグ⽤の* コメントです。
というように複数⾏にわたって書くことが可能である (ただし,タグによっては,改⾏位置に制限がある場合もあるので注意)。
7. ドキュメンテーションコメントの書き⽅ ⑤
● 書式: @since バージョンナンバー• そのクラスやインタフェイスが,そのライブラリのいつのバージョンから導⼊されたかを記述する
● 書式: @see クラス名など• ハイパーリンクつきの参照先を記述するタグ• 該当するクラス名などを説明したドキュメントファイルへのハイパーリンクを張ってくれる
● 書式: @see <A href="URL">⽂字列</a>• HTMLの<A>タグを使えば,指定したURLへのハイパーリンクを張ってくれる。
● 書式: @param 仮引数名 説明⽂• 仮引数を説明する
● 書式: @return 返り値の説明• メソッドの返り値(戻り値)を説明する
Eclipse では,対象となるクラス,フィールド,メソッドにカーソルを置いて,右クリック →『ソース』→『要素コメントの⽣成』で,ドキュメンテーションコメントのひな形を⾃動⽣成できる。
7. ドキュメンテーションコメントの書き⽅ ⑥
左図⑤は フィールドa のドキュメンテーションコメントと宣⾔。
左下図⑦の「フィールドの概要」のaの欄の説明では,ドキュメンテーションコメントの第1番⽬の⽂「フィールドaは,テスト⽤フィールドです。」の部分だけが記載されている ことである。
そのため,説明⽂の第1⽂だけで概要が分かるような⽂にしなくてはならない。(コンストラクタやメソッドの説明⽂についても同様)
アクセス指定とドキュメント化 ①javadocコマンドを直接使⽤した場合,ドキュメント化されるメンバは、publicクラスと public/protectedメンバー だけ。つまり,public指定されていないクラスや,privateなメンバなどはドキュメント化されまない。※ Eclipse では,特に指定しなければ public なクラスの publicメンバーだけをドキュメント化する
(理由) 利⽤者⽤マニュアルとしてのドキュメントを作成するのが javadoc本来の⽬的だからである。つまり,利⽤者に隠すべき所 (=利⽤者が知らなくてもよい所) はドキュメント化しない,ということである。
しかし,開発者が,publicでないクラスやprivateなメンバも掲載された⾃分⽤のマニュアルを必要とする場合もある。そういった場合は,次のように指定する。
Eclipseの場合
1. 対象となるプロジェクトを選んだ状態で,『プロジェクト』メニュー→『Javadocの⽣成』を選択
2. 表⽰されるウィンドウで『次の可視性を持つメンバーのjavadocを⽣成』の指定で,private を指定
アクセス指定とドキュメント化 ②
コンソールの場合
1. Javadocコメントに –private というオプション指定をつけて実⾏する。> javadoc -private ソースファイル名とすれば,publicでないクラスやprivateなメンバもドキュメント化される。
その他,javadocの詳しい使い⽅は,Javaのドキュメントをダウンロードすればその中に含まれているし,Javaの公式Webサイトでも公開されている (こちら(JDK6⽤), こちら(JDK7⽤), こちら(JDK8⽤)) ので,それを参照してください。
8. アノテーション ①annotation の意味は「註釈」であるが、Javaの「コメント機能」とは何が違うのか︖
アノテーションとは︓• メタデータ とも呼ばれ,プログラムに付加情報をつけるためのもの• この付加情報は、プログラムの本質的な動作には影響せず,コンパイラなどに制作者 (プ
ログラマ)の意図を伝える等の⽬的で使⽤される。⇨『コメント以上・プログラム未満』の存在
• プログラマが独⾃のものを作成することもでき,標準のアノテーションも⽤意
(復習)オーバライド (Override) と オーバロード (Overload) の違い
オーバライドサブクラス内で スーパークラスから継承したメッソドを定義し直す
オーバロード同じクラス内で 引数構成の違う同じ名前のメソッドを複数定義する
(復習)オーバライド (Override) と オーバロード (Overload) のトラブル例
上図は、オーバライドするつもりで書いたサブクラスのメソッドが,引数構成の違いで,オーバライドに失敗し,オーバロードになってしまう,というトラブルがあるので注意せよ。
注意
※ サブクラスでメソッド名を間違えても、オーバライドに失敗する!!
@Override アノテーション ①オーバライドに失敗しているとき,すぐに気づければ修正可能だが,気づくのが遅れるとバグになる。⇨ そこで導⼊されたのが,@Overrideアノテーション
(使い⽅) サブクラスでオーバライドを定義するメソッドの直前に @Override と書く• コンパイラに「このメソッドはスーパークラスのメソッドをオーバライドしたも
のだ」という情報を伝える• スペルミスや引数構成の不⼀致などが原因でオーバライドに失敗している場合
は,コンパイル時に警告を表⽰
abstract class Fig2D {void display(){}
}
Class Triangle extends Fig2D {@Overridevoid dsplay() {
System.out.println(“△”);}
}z
使⽤例
@Override のおかげでオーバライドの失敗の警告がでる
スペルミスでオーバライドに失敗してる︕
@Override アノテーション ②
abstract class Fig2D {void display(){}
}
Class Triangle extends Fig2D {@Overridevoid dsplay() {
System.out.println(“△”);}
}z
使⽤例
@Override のおかげでオーバライドの失敗の警告がでる
スペルミスでオーバライドに失敗してる︕
Eclipseではコンパイルの必要も無く,テキストエディタ上で不具合を⽰す下⾚波線が(例えば)dsplay メソッド の部分に表⽰され,マウスカーソルを下⾚波線部分に合わせると,以下の様な警告が表⽰
ここまでのまとめ• javaでは,ソースプログラムから効率の良いブラウジングが可能なドキュメントを,⾃
動的に⽣成する機能が備わっている。• 実際のソースプログラムでは,ドキュメンテーションコメントをつけているのが普通• ⾃分でプログラムを作成する場合は,積極的に javadoc を活⽤して,javaプログラミ
ングを効率よく⾏えるようにする• アノテーションという機能があることも憶えておくこと。特に標準アノテーション
@Override はメソッドのオーバライドを⾏うときには積極的に利⽤しましょう。
static インポートJava の java.lang.Math クラスには,数学関連の定数や数学関数などの計算を⾏うのに便利なメソッドが(publicな) static メンバとして⽤意されている。
☞ API ドキュメントの java.lang.Math クラスのマニュアルを確認
※ 数学に関する便利な機能をまとめる為だけに存在しているクラス※ Mathクラスのオブジェクトを⽣成することはあまり意図されていない
■ 「java.lang.Math. 」クラスの使⽤• 前期で学習したように,クラスの static メンバを使⽤するときはstaticメンバの前に「ク
ラス名.」を付けなければならない。• この場合は,staticなメンバ名の前に「java.lang.Math.」を付けることになるが,
java.lang パッケージは⾃動的にインポートされているので java.lang パッケージ名は省略可.したがって,「Math.」をstaticメンバ名の前に付けることになる。
staticメンバを多く使っている例UsingStaticMember.java
staticメンバを使⽤するときにいちいち Math. をつけるのは⾯倒では無いだろうか?Mathクラスは名前が短いからまだいいが,これがもっと⻑い名前のクラスの sttaicメンバを多⽤する場合を考えると, その⾯倒さは想像できるだろう。
Static インポートUsingStaticMember.java
staticメンバを使⽤するときにいちいち Math. をつけるのは⾯倒では無いだろうか?Mathクラスは名前が短いからまだいいが,これがもっと⻑い名前のクラスの sttaicメンバを多⽤する場合を考えると, その⾯倒さは想像できるだろう。
static インポート機能Java SE5.0 から導⼊されたのが, static インポート (static import) 機能。ソースファイルの冒頭の import 宣⾔をすることにより,そのソースファイルの中では,例えば,Math.PI と書かずに,「クラス名.」を省略して書くことが出来るようになる!
※「完全限定名」については,前期授業を参照のこと
static インポートを使った例1
staticメンバを⼀括してstaticインポート同じクラスの staticメンバなら *(アスタリスク) を使うことで⼀括して static インポートできる(下図参照)。
static インポートを使った例2
static インポートの注意点①• デフォルトパッケージ内のクラスのstaticメンバをstaticインポートすることはできない
通常のimport宣⾔も,staticインポートも,その後ろに完全限定名を書かなければならない事を思い出そう。
• デフォルトパッケージは,そもそもパッケージの名称⾃体が存在しないので,パッケージ名も含めた完全限定名を指定することができない。つまり,デフォルトパッケージ内のクラスのstaticメンバをstaticインポートすることはできない(下図)。
static インポートの注意点②• 多⽤は禁物 … staticインポートを使いすぎると,各メンバがどのクラスで宣⾔・定義さ
れたものかわかりにくくなるので,注意すること• ⾃クラスのメンバとの衝突 … 以下の例のように⾃クラスのメンバ名とstaticインポート
したメンバ名が同じ場合は,⾃クラスのメンバ名の⽅が優先される。➡ static インポートした⽅のメンバを使いたければ,結局,「クラス名.」を省略せずに書いてやる必要がでてくる(下図)。