Java

javaのあんまり知らないほうがいい知識

以下のようなクラスがあるとする class A { private int x; }このクラスに対して以下のメソッドがコンパイルエラーにならずにしかも実行時にもエラーにならずに記述できる場所がある void hoge(A a) { a.x = 10; }普通に考えるとプライベートなメンバへのア…

マルチスレッドは難しい

フィールドの変数でリソースの解放が必要なものがあったので finalizeメソッドで解放し忘れているときは解放するように書いておいたん マルチスレッドの時に同一の変数にアクセスされるとそれはそれは困ったことに なることに気がついたので ThreadLocalな変…

Javaに手軽さがほしい

javaからdbにアクセスしてると、結構DRYじゃないプログラムを書いている自分がいることに気づく あと、いちいちBeanを作るのが面倒 何でも最近の動的型付け言語は素敵らしい というわけで安全性を犠牲にして、手軽なDBアクセスのクラスを作ってみた 結果一行…

昨日の続き

どうやら機能は相当眠かったらしいね ・コネクションのクローズについて 1.各sql発行の前にコネクションがnullなら取得する 2.sqlの発行 3.トランザクション処理中でなければコネクションクローズ ・トランザクション処理中は? 1.トランザクション処理開始…

文字列.equals(文字列2)について

String str1 = "文字列";str1.equals("文字列");はstr1がnullだった場合 NullPointerExceptionをはく"文字列".equals(str1) ならstr1がnullでも falseとなるよって後者を使おう

戻り値とキャスト

以下のようなメソッドがある Object getObject() String getString() それに対してそれぞれを呼び出してみた結果ひとつだけ エラーが出た 1. Object obj = getObject(); 2. String str = getObject(); 3. obj = getString(); 4. str = getString(); 答えは2…

無駄なnewをしない

こんなプログラムを見かけた List list = new ArrayList(); list = getList(); getList()は別な場所で定義されているものとする 一方私の書くプログラムはこんな感じ List list = getList(); 上のプログラムを書いた人は 下のプログラムを見てなぜ初期化せず…

久しぶりに

最近、久しぶりにStringを==で比較してうまく動かず 悩んでる人を見かけたので、おそらくホワイトボードでの 説明回数は2桁に到達するであろうこの話題について触れてみる まず int a = 10; int b = 10; if(a == b) { System.out.println("同じ"); } このプ…

Google App Engine for Java

使ってみた。環境構築の手間がない分普通のwebアプリケーションより楽だ。とりあえずwicketを入れてみたりしてみて普通に動いた (一部普通のwebアプリケーションとの差異(ファイルアクセスなど)があるため 矢野勉氏のブログ等を参考にした)ただし永続化の…

プリミティブ型と参照型でのfinalの違い

Javaの変数にはプリミティブ型と参照型の2種類がある。 一応確認しておくと プリミティブ型は byte,short,int,logn,float,double,boolean,char参照型は それ以外 class宣言で作成される Objectクラスを継承したものはすべてである。これらの違いは プリミテ…

クラス名.thisについて

ローカル変数とフィールドで名前がかぶっている場合 this.hogeとして自身のクラスのフィールドにアクセスできる。ところで以下のような場合を考えてもらいたい class A { private int hoge; public void hogeMethod() { int hoge; B = new B() { public void…