みんなの狛江夏まつりへ向けて Part2
今週は西河原公民館で練習です。ほどよく広くて良いのです。
今週は何だか金管が少ないような気がしましたが、きっと気のせいではないです。少ないです。
クラリネットは見学者がいらしていた気がしましたが、きっと気のせいではないです。大所帯です。
曲は狛江夏祭り向けとして「コパカバーナ」と「ブラジル」と「風になりたい」です。何だか先週に比べて一曲増えているような気がしますが、きっと気のせいではないです。増えてます。
久しぶりにミュージックエイト(通称:M8 or エムパチ or えむぱち)の曲をやった気がしますが、きっと気のせいではないです。久しぶりです。
練習あと一回で本番のような気がしますが、きっと気のせいではないです。軽くヤヴァイ…?
練習後は打合せ→飲み→飲み→空が白くなってるよ…でした。グダグダです。
優勝候補、始動。
世界のヤマハミュージック東京 銀座店へリコーダーの譜面を物色に行った。
あれにしようかなー、これにしようかなー、と簡単で聴衆受けが良さそうな譜面を探していると「こ、これはっ!もしや伝説の…!!」という譜面が見つかったので、購入した。
あとは、メンバーをどうするかだ。自分を入れてもまだ一人しかいないし。
誰かアタクシといっしょにだんご3兄弟やらない?
ショボノミン。
朝、起きた。
今日も平日だった。どうやら今日も平凡な一日が始まったらしかった。
昼、マツーヤでショーガテー。
を頼んだつもりが、トンテーが出てきた。食券を確認したら、トンテーだった。
夕方、定時の鐘がなった。
この状況で帰れる訳がなかった。
夜、帰宅を試みた。
駅に着くと、ちょうど電車のドアがしまるのが見えた。
次に来た電車に乗った。
何とか座れた。
両隣の眠っているオジサマたちによっかかられて痛かった。
日頃の行いのお陰で、今日も素晴らしい一日でした。
JavaのString型で「new String(”hoge”)」を使う例。
文字列な定数クラスでjava.lang.String.String(java.lang.String)が初めて必要になったよ。
以下、「"hoge"」と「new String("hoge")」の動作例ですよ。
Constant.java。定数クラス。
//Constant.java package aaaa; public class Constant { /* いつもの */ static final String NORMAL = "normal"; /* 明示的に別の実態を作成 */ static final String ABNORMAL = new String("normal"); }
Main.java。定数を標準出力に出力するだけ。
//Main.java package aaaa; public class Main { public static void main(String[] args) { /* いつもの */ System.out.println("NORMAL = " + Constant.NORMAL); /* 明示的に別の実態を作成 */ System.out.println("ABNORMAL = " + Constant.ABNORMAL); } }
コンパイル→実行。
C:?temp>javac aaaa/Main.java C:?temp>javac aaaa/Constant.java C:?temp>java aaaa/Main NORMAL = normal ABNORMAL = normal
ここまでは問題ないよね。
ここで、Constant.javaを書き換える。("normal"→"abnormal")
//Constant.java package aaaa; public class Constant { /* いつもの */ static final String NORMAL = "abnormal"; /* 明示的に別の実態を作成 */ static final String ABNORMAL = new String("abnormal"); }
Constant.javaをコンパイル→実行すると…
C:?temp>javac aaaa/Constant.java C:?temp>java aaaa/Main NORMAL = normal ABNORMAL = abnormal
…「いつもの」が変更されてない!!
このときMain.javaをjadでデコンパイルすると…
// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) ansi // Source File Name: Main.java package aaaa; import java.io.PrintStream; // Referenced classes of package aaaa: // Constant public class Main { public Main() { } public static void main(String args[]) { System.out.println("NORMAL = normal"); System.out.println("ABNORMAL = " + Constant.ABNORMAL); } }
…なるほど。「いつもの」の書き方だと、コンパイル時点でクラスファイルに定数が埋め込まれるのでした。
Main.javaもコンパイル→実行すると…
C:?temp>javac aaaa/Main.java C:?temp>java aaaa/Main NORMAL = abnormal ABNORMAL = abnormal
…これが期待する動作でした。
このときMain.javaをjadでデコンパイルすると…
// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) ansi // Source File Name: Main.java package aaaa; import java.io.PrintStream; // Referenced classes of package aaaa: // Constant public class Main { public Main() { } public static void main(String args[]) { System.out.println("NORMAL = abnormal"); System.out.println("ABNORMAL = " + Constant.ABNORMAL); } }
- 結論
- 定数クラスの定数を変更するとき、「"hoge"」だと定数クラスを使用しているクラスも再コンパイルが必要だ
- 定数クラスの定数を変更するとき、「new String("hoge")」だと定数クラスを再コンパイルするだけで良いよ
- 補足
- 既に「"hoge"」となっている場合、そこを「new String("hoge")」に変更するだけではダメですよ(定数クラスを使用しているクラスも再コンパイルが必要)
…以上。
っていうか、
- EclipseならConstant.javaを書き換えて実行すると、自動でMain.javaもコンパイルしてくれる
から、こんなことは普段意識する必要なし。これを意識する必要があるのは…ノーコメント。