1. フィールドは, 必ず定数
2. メソッド, 必ず抽象メソッド
3. インスタンスを作れない
interface Lockable{
boolean lock();
boolean unlock();
}
class Kinko implements Lockable{
public boolean lock(){
...
}
public boolean unlock(){
...
}
}
} public boolean unlock(){
...
}
1. インターフェースのフィールドは, public static final
2. インターフェースのメソッドは, public abstract
interface インターフェース名 extends スーパーインターフェース名{
型名 フィールド名 = 定数;
型名 フィールド名 = 定数;
型名 フィールド名 = 定数;
型名 メソッド名 (引数列);
型名 メソッド名 (引数列);
型名 メソッド名 (引数列);
}
1. 実装は単一継承である. (extends)
2. 名前は, 多重継承である. (implements)
クラス:
インスタンス: 作れる
メソッド: いろいろ
フィールド: いろいろ
スーパークラス: 一つだけ
スーパーインターフェース: 複数指定可能
インターフェース:
インスタンス: 作れない
メソッド: 必ず public abstract
フィールド: 必ず public static final
スーパークラス: 持てない
スーパーインターフェース: 複数指定可能
Something obj = new Something();
変数 obj は, Something クラスのインスタンスの参照したアドレスを保持している.
Something obj1 = new Something();
Something obj2 = obj1;
obj1 = null;
obj1 に null を代入することで, どのアドレスも参照しない状態にする. このとき, obj2 に Something クラスのインスタンスの参照を保持.
Something obj1 = new Something();
Something obj2 = obj1;
obj1 = null;
obj2 = null;
obj2 の参照も null にすると, 作った Something クラスのインスタンスを参照できなくなる. この時, ガベージ (ゴミ) となる.
1. ヒープ上に確保されたインスタンスのメモリ領域がガベージとなり, ガベージが蓄積されると, Java 仮想マシンは, ガベージコレクションを始める.
2. どの変数からも参照されないインスタンスのメモリ領域を回収し, 再利用する.
GcTest1.java
1 2 3 4 5 6 7 8 | public class GcTest1{
public static void main(String[] args){
while(true){
String s = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
System.out.println("残りメモリ = " + Runtime.getRuntime().freeMemory());
}
}
}
|
GcTest1.java の実行結果は:
[wtopia koji]$ java GcTest1
残りメモリ = 64381696
残りメモリ = 64381696
残りメモリ = 64381696
残りメモリ = 64381696
残りメモリ = 64381696
残りメモリ = 64381696
残りメモリ = 64381696
...(省略)
利用可能なメモリの大きさを得る:
long free = Runtime.getRuntime().freeMemory();
全てのメモリの大きさを得る:
long total = Runtime.getRuntime().totalMemory();
最大メモリの大きさを得る:
long max = Runtime.getRuntime().maxMemory();
ガベージコレクションを動作させる:
Runtime.getRuntime().gc();
または,:
System.gc();