言語仕様
メソッドはインライン展開をするのか?
- privateメソッドに限りインライン展開するらしい。
- ただし、コンパイル段階では展開せず、実行時に展開するようだ。
参考リンク:
#include <fujita.h>
#include <fujita.h>
メインファイルとメインクラス
mainメソッドを持つクラスを記述する場合、そのファイルはクラス名と同じ名前のファイルにしなければならない。
ガーベジコレクション
- 不要になったオブジェクトを自動的に解放する処理。オブジェクトが不要になったかそうでないかは、誰からも参照されていないことを判断基準にオブジェクトを開放していきます。
- この機能を持っているプログラミング言語は基本的にメモリリークを起こさない。
メモリリーク/リソースリーク
- ガーベジコレクション処理を持っているプログラミング言語は基本的にメモリリークを起こさない。この場合、不要となったオブジェクトに対する参照が残っているために不要オブジェクトがガーベジコレクションの対象に含まれなくなった場合を指す。
構文
オブジェクト型の比較
- ==、!=とinstanceofだけが使える。
- 「==」=参照先のメモリが同じ時trueを返す
- 「!=」=参照先のメモリが違う時trueを返す
- オブジェクトが保有する値(参照先のオブジェクトのメモリ内容)を比較したい場合はequalsメソッドを使用します
- instanceof=A(参照) instanceof B(クラスの型)と使うことで、A(参照)がB(クラスの型)と同じクラスもしくはサブクラスであるかを調べる。同じクラスもしくはサブクラスであるならtrueを返す。
参考リンク:Javaの道
空(empty)配列
- bd = new long[0];と言った感じで長さが0の配列を作ることができる。
- たぶん利用価値はない。
配列のコピー
- プリミティブ型であっても配列は参照渡しになる
- よって、コピー先にコピー元と同じだけのメモリをnewで確保する必要がある。コピー元のlengthフィールドを参照してnewすれば簡単に必要なメモリを確保できる。
オブジェクトのコピー
- cloneメソッドを呼び出すことで参照先のオブジェクトと同じ値を持ったインスタンスを生成できる。
- cloneメソッドがオーバーロード場合は、同じ値を持ったインスタンスが生成されるとは限らない。実装者の意図するcloneインスタンスが生成されるだろう。
interface(インターフェイス)クラス
- インスタンスできないクラス型⇒宣言したメソッドはすべて自動的に抽象メソッドとなる
- 多重継承が許されている⇒継承したクラスとの間にクラス関係を意識する必要がないため
- interfaceクラスを継承するときはimplements(実装)キーワードを使う。
- abstructクラスとの違いに注目せよ。
独感)
- C++のinterfaceクラス⇒存在しない。敢えて言うなら純粋仮想関数しか持たず、デストラクタがvirtualなクラスを指すのだろう。DirectXでは、こういった存在にI接頭辞をつけてインターフェイスクラスとして扱っている。
参考リンク:[[Javaの道:インタフェース(1.はじめてのインタフェース)>
http://www.javaroad.jp/java_interface1.htm
http://www.javaroad.jp/java_interface1.htm
package(パッケージ)
- 複数のクラスを一まとめにまとめる機能
- ディレクトリ(フォルダ)のように階層構造をもつことができる。階層構造をもつ場合、パッケージかされるファイルもその階層構造と同じディレクトリに保存されなければならない。←(たぶん、自動で行われる)
- この機能により、別パッケージ同士なら同じ名前のクラスを持つことが可能
- パッケージしたクラス群はimport文で参照することができる。
- ファイルの先頭にpackage パッケージ名とすることでこのファイルのクラスがどのパッケージに属するかを指定することができる。
import(インポート)
- パッケージされたクラス、インターフェイスを参照して使えるようになる。
- パッケージ先のすべてのクラスを参照、パッケージ先の特定のクラスを参照、という二つの形でインポートが可能
- パッケージ先の参照可能なクラスはpublicなクラスのみである
参考リンク
@IT: Eclipseではじめるプログラミング
初級:あまり詳しいところまで突っ込まない。
初級:あまり詳しいところまで突っ込まない。
Javaの道:Java基本
中級:interfaceクラスとabstructクラスの違いをハッキリさせて書かれている。
中級:interfaceクラスとabstructクラスの違いをハッキリさせて書かれている。