マイナー・マイナー

隠れた名作の発掘が生きがい。

Java

サブクラスを直列化する際に,直列化可能でないスーパークラスで注意すること

スーパークラスが直列化可能でなく,サブクラスが直列化可能である場合,サブクラスのオブジェクトの入出力を行うときには引数のないコンストラクタが呼ばれるそうです.また,スーパークラスが直列化可能な場合,サブクラスも直列化可能であるため,コンス…

オブジェクトの直列化と,直列化させない2つの方法(transient,static)

Javaにおいて,入出力ストリームを通してオブジェクトをやり取りできるようにする仕組みを”直列化(シリアライズ)”と呼ぶそうです.ざっくり言うと,オブジェクト単位でファイルに読み書きができるようにする仕組みです. オブジェクトを入出力するストリー…

String,StringBuffer,StringBuilderの実行時間を比較してみた

Javaでは,文字列を管理するクラスとして,java.langパッケージに含まれる次の3つがあります.(A) String (B) StringBuffer (C) StringBuilderそれらの大きな違いを次の表の通りです. String StringBuffer StringBuilder 文字列変更可能 × ○ ○ スレッドセー…

Javaで無名クラスを利用する際に注意すること

無名クラスは,特定のスーパークラス,インタフェースを継承,実装して使用します.その際にメソッドのオーバーロードやオーバーライドができるのですが,無名クラスのインスタンスを参照型変数に代入して使用する場合,オーバーロードしたメソッドは使用で…

インナークラスからメンバを利用する際に注意すること

Javaではクラスの中にクラスを定義することができます.しかし,その際のメンバやメソッドへのアクセスがややこしいので,プログラムを書いてみて試してみました.まず,インナークラスは大きく次の4つに分類されます. (1)非staticなインナークラス (2)stat…

Threadの生成方法と,無限にstartし続けない不思議

Threadを2つの方法で実装してみる JavaでのThread生成方法は大きく2つあります. ・方法1 Threadクラスを継承したクラスを作成し,それを利用する方法. ・方法2 Threadクラスのコンストラクタの引数にRunnableインタフェースを実装したクラスのオブジェクト…

Javaの例外処理において複数のcatchブロックを使用する際に気をつけること

Javaの例外処理では,catchブロックを複数書くことがありますが,どうやらサブクラスのcatch文を先に指定しないといけないようです. 例えば次の例外クラスの継承関係を見てみます. ExceptionクラスのサブクラスにはRuntimeExceptionクラスがある. Runtime…

ファイナライザとガベージコレクション

ファイナライザとは,インスタンスがメモリ領域から破棄される直前に呼び出されるメソッドです.ファイナライザのメソッド名はfinalize()で,次のように定義されています. protected void finalize() throws Throwable() メモリ領域からのインスタンスの破…

可変長引数

Javaでは可変長引数を利用することで,メソッドの引数を任意に設定できる.JDK 5.0で新しく追加された機能です. 可変長引数の書式は次の通り. メソッド名(引数の型... 配列名){...} 実引数が複数ある場合,その最後に可変長配列を定義できる. メソッド名(…