Pages

インクリメントと初期化ブロック

2012年4月29日日曜日

昨日のバイトで、インクリメントについて正確に覚えていなかったことが発覚しました(´Д`;)

for(i=0;i<10;i++){
   array[i++] = 1;
}

みたいなfor文があって、
「これだと、array[0]には値が代入されないんじゃないの?!」
なんて思ってしまったんですけど、
i++の場合は、代入をしてからi=i+1になるんですねー。
言われてみれば習った気がするんですけど、すっかり忘れてました(´Д`;)
ちなみに++iだと、i=i+1を実行してから代入を行うみたいです!

具体的に書くと、
b = 1;
a = b++;
の場合、a=1、b=2になり、
b = 1;
a = ++b;
の場合、a=2、b=2になるみたいです。
(参考ページ:とほほのJava入門


あとは、“初期化ブロック”なるものを初めて知りました!

private static final BitmapFactory.Options options = new BitmapFactory.Options();
static {
  options.inScaled = false;
  options.inPreferredConfig = Config.ARGB_8888;
}

こんなプログラムが出てきてびっくり。
この位置にstaticが付いてるのを初めて見ました。

バイト先の方に質問してみたところ、
↓この2つのページを教えてくれました。
http://java.keicode.com/lang/initialize-initialization-block.php
http://www.kab-studio.biz/Programing/JavaA2Z/Word/00001050.html

どうやら、static{ … }は“静的初期化ブロック”というらしい!
クラスのロード時に1回だけ実行されるみたい。
{ … }というのもあって、これはただの“初期化ブロック”らしい。
『コンストラクタと似たようなもの』みたいな記述を見たので、ついでにコンストラクタについてもお勉強。

コンストラクタを使うとオブジェクトを生成する時に初期化処理を行えるんですねー!
コンストラクタについては、
http://www.javaroad.jp/java_class6.htm
このページの説明がわかりやすかったです♪♪
これで、4/26のブログに書いた疑問が解決しました!(おぶじぇくと指向
コンストラクタだよーって教えてくれた方、ありがとうございました(´∀`)♪

話を戻して、初期化ブロック!
初期化ブロックを用意しておくと、複数コンストラクタがある場合に便利らしい。
どのコンストラクタで初期化を行っても、初期化ブロックの処理は行なってくれるみたい。
でも、あんまり使われてないようですね。
初期化ブロックについては、この方の説明がわかりやすかったです☆
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1021597740

なんだか賢くなった気がする(´∀`)w
そろそろ春天に集中するぞー(`・ω・´)

0 コメント:

コメントを投稿