java

クラスパス

どんだけ詰まらせるねんとツッコミを入れまくりたくなるクラスパス 前提 importで大切なのは、コンパイル(javacコマンド)の時だけ使われる、 ということです。 import文であってクラスパスではないことに注意 参考: CLASSPATHって?(ytp.ne.jp) importの機能…

第30回 Javaプログラミングのダイナミックス を読んで自分用まとめ

Javaプログラミングのダイナミックス 第1回:クラスとクラスのロード処理 http://www.ibm.com/developerworks/jp/java/library/j-dyn0429/ Javaソースをコンパイルしたもの(.class)はバイナリー形式で保存されている。 この.classがロードされるのは、その.…

第29回 J2EEパターン

Intercepting Filter クライアントが認証されているかなどのページ毎の共通処理をなんとかしたいときにフィルターを使って、前処理と後処理を加えようというパターン。実装方法としては、DecoratorパターンやTemplate methodパターンなど。 Front Controller…

第22回 パッケージioのクラス

データストリームを扱う方法は大きく分けて2つ。 バイト・ストリーム 文字ストリーム バイトストリームを扱うクラスは、XXXStream 文字ストリームを扱うクラスは、XXXReader/XXXWriter という名前になっている。 ファイルを文字列で扱いたければ、 FileReade…

第20回 例外クラス

Error プログラマにはどうしようもないような例外がこれにあたる。 Exception プログラマが対処可能な例外。 メソッドが返す例外を明示的に書かなければいけない。 例外処理をしない、もしくはメソッドが例外を返すことを明示しないとコンパイラに怒られるの…

第19回 System.out.println( ) の秘密

System.out.println( ) は引数に受け取ったものの .toString() を表示するとよくいわれるが、 これは厳密ではない。 なぜなら null を与えても null と表示されるからである。 nullはnullなので.toString()は呼び出せない。

第18回 パッケージを指定するimport文の*

importの*はそのディレクトリ(パッケージ)直下のファイルしか示さない。 それより深いディレクトリは別に指定する必要がある。 参考: importの機能(ytp.ne.jp)

第17回 変数宣言の型宣言は後ろに書くのか? 前に書くのか?

型宣言は前派 Javaは型を変数の前に書く。 C言語も前である。 型宣言は後派 UMLやSQLなどは型は後ろに書く。 型宣言についての小話 学術的な観点で書いた場合、 型宣言は後ろに書くのが一般的。 UMLなどもその流派。 昔の言語も型宣言は後ろだったらしい。 C…

第16回 JavaのN:M と リレーショナルDBのN:M 

リレーショナルDBでは、N:Mを表現することは無理。 だから間にテーブルを作り、1:N, 1:Mの構造を作る。 それに対してJavaではN:Mの構造を作ることが可能。 人間のそもそもの思考は実はこちらに近い。大学の授業で、講義と生徒がN:Mにあたるもの。 講義は複数…

第15回 Javaにおけるクラスという言葉

ソース上でインスタンスになる前の設計図としてして語られるクラス(型的な意味合い)。 オブジェクト指向的にソースとは関係なく、機能を集めたものという意味合いのクラス。 .javaファイルをコンパイルした.classというコンパイル済みソースという意味合い…

第14回 コンパイルする言語は、値をソースの外に出したい

ソースを書き換えるとコンパイルが必要。 だからなるべくソースの外にだして、コンパイルしなくてもソースの挙動を変えたい。 だから設定ファイルのオンパレード。 JNDIなどもこの思想に基づいて作られている。 自分で同じような処理をするものを作ってもい…

第13回 superの使いどころ

superを使う場面は限られている。 たとえば、親クラスのメソッドをオーバーライドしたときなどだ。 普段は、子クラスは親の機能を引き継いでいるので、thisもsuperも同じものをさすことになる。参考: Javaの道:クラス(12.superの利用)

第10回 Java型とSQL型

Javaの型とSQLの型は別なのでマッピングが必要 個人的に重要そうなところだけをピックアップ Java SQL String VARCHAR/LONGVARCHAR long BIGINT int INTEGER double DOUBLE java.math.BigDecimal NUMERIC/DECIMAL java.sql.Date DATE java.sql.Time TIME jav…

第9回 無名クラスは無名関数のように外側の変数を参照できるか?

リードオンリーならば参照可能。 つまり、無名クラスから値の書き換えは不可。 finalはコンパイラが値を置換するので、参照とは言いがたい。 例: abstract class Hoge{ public abstract int execute(); } public class Main { public static void main(Stri…

第8回 アクセス修飾子

public class Main { public static void main(String args[]) { //--------------------------------------------------// // 他のクラスからの呼び出し例 //--------------------------------------------------// System.out.println("他のクラスからの呼…

第7回 コレクション

Listインタフェース 動的にサイズを変更できる配列。 Listインタフェースの実装 java.util.Vector スレッドセーフなので、コード内にsynchronizedブロックが多数存在。 複数のスレッドでVectorを安全に使用できるが、性能は低下。 java.util.ArrayList Vecto…

第6回 無名配列

new 型[]{ 値, 値, ... } で無名配列が作れる。 例: public class Main { public static void main(String args[]) { System.out.println( new int[]{4,5,6}.length ); } } 結果: 3

第5回 テンプレートメソッドパターン

テンプレートメソッドパターン 言語によってその実装方法はさまざまであるが、 子クラスで差分を実装する書き方なら、 public class Main { public static void main(String args[]) { Hoge h = new Hoge_Ex(); h.execute(); } } abstract class Hoge { publ…

第3回 System.out は java.io.PrintStream であることを確認する

System.out は java.io.PrintStream であることを確認する public class Main { public static void main(String args[]) { System.out.println( System.out.getClass() ); } } 結果: class java.io.PrintStream

第2回 Hello World

mainメソッドで public class Main { public static void main(String[] args) { System.out.println("Hello World"); } } 結果: Hello World staticを使って public class Main { static{ System.out.println("Hello World"); } } 結果: java.lang.NoSuch…