Javaマスターへの道 資格勉強編 Part6

みなさん今日もJava勉強の時間がやってきました。
 毎日少しずつでも成長していくと思うので今日も一緒に頑張りましょう。
さて今日は昨日より少し難しいですが諦めずに答えを考えてみてくださいね。
では1問目、次のa,bの値はそれぞれどうなるでしょうか
public class Main {
    public static void main(String[] args) {
        int a = 0;
        int b = 0;
        if (++a > 0 || ++b > 0) {
            System.out.println(a);
            System.out.println(b);
        }
    }
}
 ここから答えです。
a,bの値は最初0ですがif文の条件式内でともに1増えた状態で判定されています。
なので答えはa,bともに1となる・・・と言いたいのですが条件式は||で書かれていますね
この場合aの条件式がtrueならば、そのまま下の処理を実行するのでbのインクリメントは実行されません
なので答えはa,bともに1となる・・・と言いたいのですが条件式は||で書かれていますね
この場合aの条件式がtrueならば、そのまま下の処理を実行するのでbのインクリメントは実行されません
よって答えはaが1、bが0となります。罠のような問題ですがこのような問題はとても多いので注意していきましょう。
ちなみにもし||ではなく&&だった場合、二つの条件式を評価してから下の処理に行くのでa,bともに1になるのでこれもまた覚えておきましょう。
ちなみにもし||ではなく&&だった場合、二つの条件式を評価してから下の処理に行くのでa,bともに1になるのでこれもまた覚えておきましょう。
では2問目、aの値はどうなるでしょうか。
public class Main {
    int a = 10;
    public static void main(String[] args) {
        a += 5;
        System.out.println(a);
    }
}
さっそく答えなのですがコンパイルエラーとなってしまいます。
クラス直下で宣言された変数aはインスタンス変数となるのですが、インスタンス変数にアクセス出来るのは
インスタンスメソッドなのでstaticメソッドである上記mainではアクセス不可となりエラーとなります。
インスタンスメソッドなのでstaticメソッドである上記mainではアクセス不可となりエラーとなります。
もしアクセスしたいなら変数の宣言時にstaticをつけるとアクセスできるようになります。
また別の方法として以下のような方法もあります。
public class Main {
    int a = 10;
    public static void main(String[] args) {
        Main m = new Main();
        m.num;
    }
    public void num() {
        a++;
        System.out.println(a);
    }
}
この場合Mainクラスのオブジェクトを生成して、
numメソッドを使ってaの値を増やしているのでエラーにはなりません。
numメソッドを使ってaの値を増やしているのでエラーにはなりません。
難しいですがstaticはstaticしかアクセスできないことを覚えていれば十分でしょう。
次回もお楽しみに!

