参照に関連した出題:4問目(SJC-P対策無料問題集)

Java認定資格(SJC-P/310-035)を一発合格したい!
このサイトは、そんなあなたを本気で応援します!!
SJC-P(310-035)対策のメルマガ問題集も好評発刊中。
ぜひあなたの受験に役立ててください。
メールマガジンの購読はもちろん無料です!

登録はこちらから→SJC-P対策メルマガ問題集
TOP    >>    SJC-P対策Java用語集    >>    参照に関連した出題:4問目

参照に関連した出題:4問目

参照の問題4

【4問目・問題】
以下のようなコードがあります(開始から終了までの部分)。

//開始
class Test{
   public static void main( String argv[ ] ){
      Card c1 = new Card( 1000 );
      Card c2 = c1;
      Card c3 = new Card( 2000 );
      c1 = null;
      System.out.println( c2.deposit + c3.deposit );
   }
}

class Card{
   int deposit;

   public Card( int d ){ deposit = d; }
}
//終了

このコードをコンパイルし実行したときの結果を選択して下さい。
(コンパイル、実行の方法は正しく行われるものとします。)


a.     0 と出力される。

b.  1000 と出力される。

c.  2000 と出力される。

d.  3000 と出力される。

e.  コンパイルエラーとなる。

f.  実行時に例外がスローされる。

前の問題     解答・解説    


















































参照の問題4(解答)

d.  3000 と出力される。

参照の問題4(解説)

今回は参照についての問題です。
参照についてはSJC-P対策Java用語集でも説明しているので参考にして下さいね。
SJC-P対策Java用語集:参照

今回の問題で注意するべき点は null についてだけです。
その他の部分については、 1問目2問目3問目 を復習してみて下さいね。

それでは処理の流れを追っていきます。

      Card c1 = new Card( 1000 );

まず、 new Card( 1000 ) という処理により新しくインスタンスが生成され、 そのインスタンスへの参照が c1 に格納されています。

その後、

      Card c2 = c1;

という処理では、新しいインスタンスの生成は行われず、インスタンスへの参照 のコピーだけが行われ、 c1 と c2 は同じインスタンスを指し示すことになります。

続いて

      Card c3 = new Card( 2000 );

という処理では新しくインスタンスが生成され、 そのインスタンスへの参照が c3 に格納されています。

そして null の代入が出てきます。

      c1 = null;

この null が代入された参照変数は、どのインスタンスも指し示さなくなります。
つまり、図示すると以下のようなイメージになります。

c1 が何も指し示していないことが分かりますね。
ちなみに、もともと c1 が指し示していたインスタンスに対しては何の影響も与えません。
c1 がどのインスタンスも参照しないという状態になるだけで、インスタンス自身には影響は与えないのです。

さて、ここまでの説明で分かるように、 c2.deposit は 1000 、 c3.deposit は 2000 となります。
そのため、c2.deposit + c3.deposit の値は 3000 となり、解答は d となります。

ところで、ここでもう一つ問題です。
今回の問題文を以下のように書き換えたら、実行結果はどのようになるでしょうか。

//開始
class Test{
   public static void main( String argv[ ] ){
      Card c1 = new Card( 1000 );
      Card c2 = c1;
      Card c3 = new Card( 2000 );
      c1 = null;
      System.out.println( c2.deposit + c3.deposit );
      System.out.println( "c1.deposit == " + c1.deposit );
   }
}

class Card{
   int deposit;

   public Card( int d ){ deposit = d; }
}
//終了

答えは「実行時に例外がスローされる。」と「3000 と出力される。」の両方になります。
実際に実行してみましょう。

>javac Test.java

>java Test
3000
Exception in thread "main" java.lang.NullPointerException
        at Test.main(Test.java:9)

最初に 3000 と出力されて、直後に NullPointerException という例外が発生している様子が分かりますね。
この例外は、参照変数がどのインスタンスも指し示していないため、インスタンスを参照できない という場合にスローされる例外です。
今回追加したコードの部分では、すでに c1 はインスタンスを指し示していないため、このように NullPointerException がスローされるのです。

ただし実行途中で例外が発生する場合も、例外が発生するまでは正しく動作します。
そのため、例外が発生する直前の

      System.out.println( c2.deposit + c3.deposit );

という部分までは正常に動作し、「3000」が出力されることになります。

このように、 null が格納された参照変数を通じて操作を行おうとすると実行時に NullPointerException が発生する ということは覚えておきましょう。

関連ページ:SJC-P対策Java用語集・参照



前の問題     この問題    

SJC-P対策問題集

Java認定試験( SJC-P/310-035 )対策のメルマガ問題集も好評発刊中! もちろん無料です。
またバックナンバーも見やすくしてオンライン問題集として随時アップしていきます。
受験しない人でも Java の基礎知識を学習するのに最適です。

SJC-P対策参考書

現在、Java認定試験(SJC-P/310-035)対策の参考書は本当にたくさん出版されてます。
ここでは、その中から厳選した本当に役立つ参考書を紹介します。
無駄な出費を抑えるためにも、ぜひ参考にして下さい。

SJC-P対策Java用語集

Java認定試験( SJC-P/310-035 )合格のために必要な Java の用語を集めました。
試験対策にはもちろん、試験以外で Java を学習する際にもご活用下さい。

更新履歴

このサイトの最新情報はここで確認できます。
また、今までこのサイトがどのような軌跡を辿ってきたのかも知ることができます。

Javaを始める人へ

これからJavaを始めようとしているあなたへ。
Javaの勉強を始めるにはどうしたら良いのかを説明しています。
また、初心者に役立つ情報を提供していきます。

Java認定資格の概要

Java認定資格にはどのようなものがあるのか。
資格取得のためにはどのような知識が必要なのか。
その他、資格を取得することのメリットなど、Java認定資格の概要を説明します。

LINK

Javaの勉強に役立つリンク。
その他のプログラミングに関するリンク。
ソフトウェアに関するリンクなど、管理人の主観で集めたリンク集です。
相互リンクも常時募集中!
詳細は以下のページで確認して下さい。

このサイトについて

このサイト「1発合格★Java認定試験!」についての説明です。
サイトで掲載しているソースコードや問題や免責事項などについて説明しています。
初めての人は一度のぞいてみて下さい。

ちょっとひと息

仕事や試験勉強に疲れたら、ここでちょっと一息つきませんか。
一生懸命に打ち込むのも良いけど、たまには何も考えずにゆっくり休むのも良いものです。
たまにはのんびり脳みそをリフレッシュしましょう。

[PR] TV放映で大反響!【エキサイト恋愛結婚】

[PR] ネットでお買い得な通販のことなら、ショッピングNavi
[PR] 韓流・韓国グッズ特集!
[PR] 懐かしの特撮から最新の特撮まで
[PR] ゲームプログラマーになろう
[PR] プーさん大好き!かわいいプーさんグッズがいっぱい
[PR] フェロモンでモテモテ?驚きのフェロモン効果
[PR] 仮面ライダー 龍騎 スカイライダー クウガ
[PR] ★アフィリエイト収入アップのためのSEO対策ツール★

Copyright (C) sjc-p.obx21.com. All Rights Reserved.
このサイトはどのページにでも直接リンクして頂いて結構です。リンク大歓迎!
このページのトップページのURLはhttp://sjc-p.obx21.com/です。

Java関連情報
Spring / JSF(JavaServer Faces) / Hibernate / Jbuilder / TOMCAT入門 / NetBeans / JUnit / Struts
Strutsリファレンス / ANT / TOMCAT / JavaでWebサービス / JDBC / JBoss / J2EE / iアプリ
EJB / アプレット / JavaとXML / JMF(Java Media Framework) / Java3D / Jakarta Commons / JNI / OracleとJava
EclipseでJava入門 / Java RMI, CORBA / JSP/サーブレット入門・初心者向け / Javaネットワークプログラミング / WebLogic