QK中(1/20)
   あのnifexがSEとPGの間を漂いつつ綴る日々。 母の財布からお金を取ったのは僕ではありません 。
プロフィール

 nifex

Author: nifex
更新頻度低下中。物理的には居ます。

mail & msn mess. :
  nifex@saku2.com

skype :
nifexnifex


当サイトはosakaフォントを使うと割と読みやすいかもしれませんがまぁ好きにするといいよ




このサイトについて




押すと押せます

最近の記事

最近のコメント

最近のトラックバック

カテゴリー

過去ログ

カレンダー

06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

ブログ検索

 スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | このエントリのURL
(--/--/--(--) --:--)

 試験(SJC-P)近し

今日は珍しくも一人で飲んだくれています。自分でもハッキリ解るほどの暴飲暴食ぶりで、明らかにオナカが痛い。昼飯も晩飯も食べすぎです。そしてビールも飲み過ぎでヘロヘロです。初のマジ酔っぱらいエントリではなかろうか?

休み明けがダメまるのが解っている為、GWは気分が晴れないまま過ごすコトになるのは覚悟してますが落ち込んだところで事態が好転するわけでもないし1年で一番長い休みを無駄にするのも勿体ないので、なるべく仕事のことは忘れるよう心がけようと思います。つってキレイに忘れられればまだいいんですけどね。


さて、今日も今日とてSJC-Pの勉強。

前から納得いかないトピックスの一つに、「メソッドローカルなインナークラスの変数スコープ」てのがあります。
たとえば以下の問題。

class sample{
  int a;
  final int b=0;
  static int c;
  void method(int x, final int y){
    int s=0;
    final int t=0;
    class inner(){
      void meth(){
        //here
      }
    }
    inner i = new inner();
    i.meth();
  }
}
10行目(//here)でアクセスできない変数 を以下から選びなさい。 a, b, c, x, y, s, t

答えは "x","s"なんですが、これがイマイチよく解らない。メソッドローカルなクラスからは外側のクラスのフィールド・メソッド、メソッドのfinalな引数、メソッド内のfinalな変数にしかアクセスできないっていうルールがある為この答えになるのですが、どうしてfinalな変数ならアクセスできるのか?

なにやら「そのクラスのインスタンスがほかのメソッドなどに渡されてその強参照が保持され、でもそのクラスが定義されたメソッドは終了してコールスタックが消滅してしまった場合」を想定してるらしいのですが、どうもピンとこない。
この問題でいうと、確かにインスタンスiが他のメソッドとかに渡されてそのメソッド内でstaticに保持されたりした場合、メソッド"method()"が終了した後でもインスタンスiの実オブジェクトがガベージコレクトの対象にならず生きているという状態になるとは思います(この話も微妙な気がしますが)。また、静的でないインナークラスである以上アウタークラスのインスタンス自体に紐付いた状態でしか存在できないので、アウタークラスのフィールドにはそのままアクセス出来るというのも納得できます。

が、メソッドの引数とメソッド内の変数がfinalだった場合はそこにアクセスできる、というのがよくわからない。コールスタックが消滅したときに参照を失う可能性があるから、という理由ならfinalな変数・引数も同じではないのでしょうか?finalな変数はStringオブジェクトのように変数プールに置かれて再利用を待つよう保持されるとかでしょうか?

仮にそうだとしても、「通常の変数」であれば同じ名前で複数のメソッドに記述されたりする場合もあるわけです。名前は同じでも指すモノは違う。なら、リテラルとしての値が同じであればOKなStringオブジェクトの場合と違い、コールスタックが消滅していたらどの値・オブジェクトなのか判断がつかないのでは?逆にその判断をつけるためにコールスタックを覚えていたとしたらfinalじゃなくても参照出来るのでは?

そもそもメソッドローカルなインナークラスの存在意義が解りません。一時的にインターフェイスを実装したりメソッドをオーバーライドするコトが出来る無名インナークラスはまだ使い道はあると思うのですが、なぜメソッド内のみのクラスを定義出来るようになっているのか?

どなたか、メソッドローカルなインナークラスの使い道を教えてください・・・

Side "NEWs"


  • ハルヒEDダンス解析
    ホントにハルヒに犯されているこの頃。EDのCDを本当に買ったら(ダメな)自分をもっと好きになれそうな予感。

  • 厚さ3mmで16GBのUSBメモリ
    今に始まったこっちゃないですが、記憶メディアの容量インフレはスゴイですな。
    俺今仕事で使ってるUSBメモリ64MB・・・いや実際そんぐらいで十分なんだって!

  • 松下の内蔵型Blu-rayドライブは6月発売・10万円
    同上。2層50GBとか光学メディアとしてオカシクないですか?そんなに何に使うんだ。。

  • 三遊亭円楽さん「笑点」を引退 後任は桂歌丸さん
    とうとう引退!?あー・・・時代の流れを感じますねぇ。70超えてたのか・・・

  • 放送禁止用語一覧
    ていうか今時銀座をザギンて!!


  • Side "BGM"

    今日のBGM :"冒険でしょでしょ?"(平野綾)
    最初は唄上手い!と思って聞いてたんですがなんか2番以降はどうも本人の素がでているような・・・
    でも1番のAメロなんかすげぇいい歌い方をするんですよね。。

    スポンサーサイト

    テーマ:プログラミング - ジャンル:コンピュータ

    未分類 | このエントリのURL | トラックバック:0 | comment:2
    (2006/05/01(月) 01:35)

    <<キミは気づいたか? | ホーム | あ・・・たぶん間に合いません大石さん。>>

    コメント
      むずっ!
    うす。おひさ。
    相変わらず難しいことやってんなぁ。

    「教えてgoo」で質問してみれば?

    ちなみにオイラはさっぱり分かりません。あしからず
    URL | きゃみ #- | 2006/05/03(水) 14:59 [ 編集 ]

     
    おっと、お久しぶり
    SE業務をしてても一応プログラマ心も持ってるのでね。日々これロジックの追求ですよ。

    まぁ今回の話は実際に出番のない手法と思われるので深く考えないことにするです。
    URL | nifex #- | 2006/05/07(日) 21:45 [ 編集 ]

    コメントの投稿

    管理者にだけ表示を許可する

    トラックバック
    トラックバックURLはこちら
    http://nifex.blog37.fc2.com/tb.php/58-2769668c
    この記事にトラックバックする(FC2ブログユーザー)

    This site is powered by Macromedia Studio MX. (contains DreamWeaver MX ' FireWorks MX)

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。