JavaのBronze試験での初期化に関する疑問

このQ&Aのポイント
  • JavaのBronze試験についての質問です。明日試験を受ける予定ですが、初期化に関して困っています。
  • 問題の中でint valと宣言しているにもかかわらず、なぜ++valで1になるのか理解できません。
  • 明日の試験が心配で困っています。初期化についてどなたかご教示いただけないでしょうか。
回答を見る
  • ベストアンサー

javaの質問です。その2

明日JavaのBronze試験を受けに行くのですが、全然わからずに困っています。 紫色のJavaプログラマBronzr[SE7]という本を使用しています。 本の模試の問題です。 38 Class Foo{ static int val; static int methodA() {return ++val;} } Class Test{ public static void main(String[] args){ Foo.obj =new Foo(); obj.methodA(); }} } この問題では int valと宣言していますが、初期化をしていません。 なのでnullのはずなのですが、 なぜ++valで1になるのかがよくわかりません。 null+1は計算できないと思うのですが、、、、、 明日テストなので本当に困っています。

noname#180736
noname#180736
  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

プリミティブ型(intやbyte、float等)はオブジェクト型と異なり、nullは入りません。 そして、プリミティブ型はローカル変数とフィールド変数で初期値が異なります。 これはプリミティブ型のintでフィールド変数なので、明示的な初期化を行わなかった場合0になります。 ++valが呼ばれると、return前にval=1+0が実行されるので、obj.methodA()の戻り値は1です。

noname#180736
質問者

お礼

ありがとうございます。 int型にはnullって入らないんですね。 >プリミティブ型はローカル変数とフィールド変数で初期値が異なります。 初めて知りました。 聞いてよかったです。 あと無事に合格していました。

その他の回答 (1)

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

staticローカル変数は最初にメソッドが呼ばれた時には0あるいは 相当する値(文字タイプならNULL)です。

noname#180736
質問者

お礼

ありがとうございます。 そういう意味だったのですか。。。 聞いてよかったです。 あと無事に合格していました。

関連するQ&A

  • javaの質問です。

    明日JavaのBronze試験を受けに行くのですが、全然わからずに困っています。 紫色のJavaプログラマBronzr[SE7]という本を使用しています。 本の模試の問題です。 37 Class Super{ static void method(){ System.out.println("Super"); } } Class Sub extends Super{ static void method(){ System.out.println("Sub"); } } Class Test { public static void main(String[] args){ Super obj = new Sub(); obj.method(); } } この問題はSuperが表示されるらしいのですが、理由がわかりません。 サブクラスをインスタンス化しているので、Subが表示されるというのなら理解できます。staticが関係あるのはなんとなくわかるのですが、、、、、、なぜSuperなのかがわかりません。 解答ではスーパークラスの型にサブクラスを入れているからと簡単に書いてあります。 詳しく説明していただけると助かります。

    • ベストアンサー
    • Java
  • Javaに関する初歩的な質問です。

    Javaを勉強中なのですが、 class Test{ public static void main(String args[]){ int a = 10; { int a = 10; } } } これがエラーになる理由がいまいちわかりません。 ぜひとも教えてください。

  • Java main関数内でStatic変数使えない

    JavaのStatic変数について質問です。 Main関数の中でStaticな変数を定義しようとしたところ、 final修飾子しか使えませんというエラー文言が出ます。 Main関数内でわざわざStatic変数を使用する必要はないのですが、 出来ないと言われると何故だろうと思ってしまいます。 どなたかご説明いただけないでしょうか? -------------------------------------------------------------------- class Test { public static void main(String[] args) { // 宣言時Staticは使えなく、finalでしか定義できないとエラーが出る Static int test_val = 10; // 表示 System.out.println(test_val); } }

    • ベストアンサー
    • Java
  • 無名パッケージからのインポート

    Javaの初学者です。 無名パッケージ内のクラスを、他のパッケージ中から呼びたいのですが、うまくいきません。 Test/src/Test.java ---- public class Test { public int m1; public Test() { m1 = 1; } } ---- という既存のプロジェクトがあるとします。 このプロジェクト内のTest.javaを利用したいと考えたとき、例えば、 Test2/src/Test2.java ---- import Test; public class Test2 { public static void main(String[] args) { Foo foo = new Foo(); System.out.println(foo.m1); } } ---- はうまくいきます。 ですが、Test2プロジェクトを Test2/src/test2/Test2.java ---- package test2; import Test; public class Test2 { public static void main(String[] args) { Foo foo = new Foo(); System.out.println(foo.m1); } } ---- のようにするとうまくいきません。 package test2の中から、外の無名パッケージのTestクラスを使用するには、どのようにすればよいでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • Java
  • javaのローカル変数について

    基本的なことの質問ですがよろしくお願いいたします。 下記の様なソースコードでint y ;はローカル変数にあたると思いますが 確かローカル変数は初期化されないとコンパイルエラーになるはずなのですが どうもコンパイルも実行もできます。 どうしてでしょうか? よろしくお願いいたします。 class Test1{ static int x = 0; } public class Test extends Test1{ public static void main(String args[]){ Test i = new Test(); int y ; y = ++x; System.out.println( y ) ; } }

    • ベストアンサー
    • Java
  • privateスコープについて

    はじめまして。Javaの初心者です。 どうしてもわからないことがあります。 以下のコードを見てみてください。 ************************************************ final class Foo { private int a; Foo(int a) { this.a = a; } public int func(Foo f) { if(this.a <= f.a) { return 1; } else { return -1; } } } final class Demo01 { public static void main(String[] args) { Foo obj1 = new Foo(10); Foo obj2 = new Foo(20); System.out.println(obj1.func(obj2)); } } ************************************************ Fooクラスの2つの異なるインスタンスのフィールドの 値の比較は、funcメソッドの呼び出しによって行われるのですが、funcメソッドの中で、実行中のインスタ ンス(this)のaにアクセス(this.a)することができるこ とは理解できるのですが、実行中のインスタンスとは 異なるFooクラスのインスタンスのaにアクセス(f.a)し たときprivateアクセスのため、参照できないとはなら ないのは、なぜなのでしょうか?どうかご教授をお願 いします。

    • ベストアンサー
    • Java
  • Javaのプログラムについて教えて下さい

    //Sample.java class Sample void methodA(int temp) if(temp == 0) String str = new String("Exception"); Integer.parseInt(str); else if(temp == 1) int[] array = new int[temp]; else Exception exc = new Exception(); throw exc; //SampleMain.java class ExceptionMain public static void main(string[] args) Sample sam = new Sample(); Int temp = Integer.parseInt(args[0]); Sam.method(temp); } } このプログラムの場合、ExceptionMainに新たにコードを加えて、コマンドライン引数が0,1,その他の場合に例外メッセージを出力するプログラムを教えて下さい。

    • ベストアンサー
    • Java
  • Javaのプログラムがどうしても分かりません。

    public class Test { public static void main(String[] args) { Test ojb1 = new Test(); Test ojb2 = new Test(); System.out.print(ojb1 == ojb2); ojb2 = operate(ojb1, ojb2); System.out.print(" " + (ojb1 == ojb2)); } static Test operate(Test ojb1, Test ojb2) { Test ojb3 = ojb1; ojb1 = ojb2; return ojb3; } } 実行すると「false true」となります。 しかし私は「false false」だと思うのですが、どこが間違っているかが分かりません。 最終的に変数obj2とobj3は、最初に生成されたインスタンスTestを指し示し、 変数obj1は2番めに生成されたインスタンスTestを指すのだと思うのです。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • javaの問題わからなくって質問します

    内容はEclipse上でプロジェクトフォルダを作りひとつは別のjavaファイルを動かすのともう一つはそのお同じフォルダから動かされるjavaプログラムです。 説明不足というかまだ触れてそんなにたってないのでソースを載せます class SampleManager { public static void main(String[] args){ exec obj= new exec(samlple1.java); obj.say(); } } class exec{ String phrase; exec(String phrase){ this.phrase=sample2.java; } void say(){ System.out.println(phrase); } } /////// public class samlple1 { public static String java; public static void exec(String[] args) {//execをした理由はSampleManagerにあるクラスexecを呼び出れるため System.out.println("Hello,World!")//この二つの出力結果を表示したい; System.out.println("こんにちは!"); } } ひとつのフォルダに上記のソースいれてSampleManager.java からsample.javaの出力結果の HelloWorld! こんにちは! を出力したいですがエラーはなく例外処理もありませんけど何故か出力結果はnullが返ってしまいます なぜでしょうか? アドバイスをお願いします

  • Javaでタイマーの使い方

    Javaでタイマーの使い方作り方がわかりません import javax.swing.Timerこれつかいます。 package Test1; import javax.swing.Timer; public class Test1 { Timer TM = new Timer(10, null); public static void main(String[] args) { } } よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう