コアJavaクイズ

コアJavaクイズへようこそ。Javaはオブジェクト指向プログラミング言語です。

コアJavaクイズ

このクイズでは、Core Javaの基礎とOOPSの概念についてテストされます。いくつかのコードスニペットもあり、基本的なJavaのコーディングスキルをテストします。

いくつかの質問には複数の答えがあります。正解と説明を見るために「答えを表示する」ボタンをクリックすることができます。

気に入ったら挑戦して他の人と共有してみてください。

以下のうち、Javaで配列をインスタンス化するために正しい方法はどれですか?

A. myArrayには1、3、5が入った整数の配列を定義する。
B. myArrayには1から4までの整数が入った2次元の配列を定義する。
C. myArrayには5、4、3が入った整数の配列を定義する。
D. myArrayには”1″、”2″、”3″が入った文字列の配列を定義する。

「1」、「2」、「3」を含むint型の配列myArray = {“1”, “2”, “3”};は無効です。Stringはintに変換できないためです。
(5, 4, 3);を含むint型の配列myArray = (5, 4, 3);は無効です。配列要素は波括弧({})で定義する必要があるためです。
myArray [] [] = {1,2,3,4};を含むint型の配列myArrayは無効です。この場合、myArrayは二次元配列として定義されるべきですが、一次元配列として定義されています。コンパイラは「タイプミスマッチ:intからint []に変換できません」とエラーを報告します。

2. 以下の中で、Javaにおける予約語はどれですか?

A. 配列 (はいれつ)
B. ジャンプ (じゃんぷ)
C. ヌル (ぬる)
D. 整数 (せいすう)

Javaにおいて、gotoとintは予約語です。arrayとnullは予約語ではありません。

3. 以下のプログラムをコンパイルして実行した場合、どうなりますか?

interface Foo{ int x = 10;}

public class Test { 
    public static void main(String[] args) { 
        Foo.x = 20; 
        System.out.println(Foo.x); 
    }
}

A. 10を出力する。
B. 20を出力する。
C. コンパイル時エラー。
D. Foo.xがfinalなので、ランタイムエラーが発生する。

デフォルトでは、インターフェースのフィールドはすべてpublic、static、およびfinalです。そのため、変更することはできず、文Foo.x = 20;でコンパイルエラーが発生します。

「下記のプログラムの出力は何になりますか?」

public class Test {
	public static void main(String[] args) {
		char c = 65;
		System.out.println("c = " + c);
	}
}

A. コンパイル時エラー
B. 「c = A」と出力する
C. 実行時エラー
D. 「c = 65」と出力する

Javaコンパイラは、intをcharに自動的に変換しようとします。65はAに変換されるため、出力は「c = A」になります。charの値はu0000からuffffまでの範囲です。したがって、char c = 65535;は有効ですが、char c = 65536;はコンパイル時エラーが発生します。

以下のプログラムの出力は何ですか?

public class Test { 
    public void main(String[] args) {
        int x = 10*20-20; 
        System.out.println(x); 
    }
}

A. ランタイムエラー
B. 180を出力します
C. 0を出力します
D. コンパイル時エラー

正しい回答:A
メインメソッドが静的でないため、実行時エラーが発生します。エラーメッセージは、「Testクラスのメインメソッドは静的ではありません。メインメソッドを次のように定義してください:public static void main(String[] args)」となります。

6. Javaにおけるstaticキーワードの有効な記述は何ですか?

A. クラス内には静的ブロックを持つことができます。
B. クラス内の静的ブロックは、クラスのオブジェクトが作成されるたびに実行されます。
C. インターフェースには静的メソッドの実装を持つことができます。
D. メソッド内に静的ブロックを定義することができます。

クラス内にはスタティックブロックを持つことができます。クラスがロードされる際に一度だけ実行されます。Java 8以降、インターフェース内でもスタティックメソッドの実装を持つことができます。

7. オブジェクト指向プログラミングの中核概念をすべて選択してください。

A. 抽象化 (ちゅうしょうか)
B. 継承 (けいしょう)
C. インターフェース
D. ポリモーフィズム
E. ジェネリクス

OOPSの基本的な概念は次のとおりです;1. 抽象化
2. カプセル化
3. 多態性
4. 継承
5. 組み合わせ
6. 関連
7. 集約

詳しくはOOPSの概念をご覧ください。

8. ジャバにおける継承に関して以下の記述のうち、真実なものはどれですか?

A. 「extend」というキーワードは、Javaでクラスを拡張するために使用されます。
B. Javaでは、複数のクラスを拡張することができます。
C. スーパークラスのプライベートメンバーは、サブクラスからアクセスすることができます。
D. Javaでは、Finalクラスを拡張することはできません。

クリックして回答を表示する
正解:D
Javaにおける継承は、基本的な概念の一つです。それについてよく知っておくべきです。回答の選択肢について詳しく学ぶために、以下の記事をお読みください – Javaにおける継承、Javaにおける多重継承。

9. 以下のプログラムの出力は何になりますか?

package com.scdev.java;

public class Test {
	public static void main(String[] args) {
		Super s = new Subclass();
		s.foo();
	}
}

class Super {
	void foo() {
		System.out.println("Super");
	}
}

class Subclass extends Super {
	static void foo() {
		System.out.println("Subclass");
	}
}

A. コンパイル時エラー (Konpairuji jikan erā)
B. スーパー (Sūpā)
C. サブクラス (Sabu kurasu)
D. ランタイムエラー (Rantaimu erā)

foo()メソッドのサブクラスは静的ではできません。静的なメソッドは、スーパークラスのインスタンスメソッドを隠すことができません。

10. 以下のプログラムの出力は何になりますか?

package com.scdev.java;

public class Test {
	public static void main(String[] args) {
		Subclass s1 = new Subclass();
		s1.foo(); // line 6
		Super s = new Subclass();
		s.foo(); // line 8
	}
}

class Super {
	private void foo() {
		System.out.println("Super");
	}
}

class Subclass extends Super {
	public void foo() {
		System.out.println("Subclass");
	}
}

A. 6行目でコンパイル時エラーが発生します。
B. 8行目でコンパイル時エラーが発生します。
C. 6行目と8行目の両方でコンパイル時エラーが発生します。
D. 正常に動作し、「サブクラス」と2回表示されます。

**正答: B**8行目でのコンパイル時エラー。スーパークラスのfoo()メソッドはprivateなので、見えないというエラーメッセージが表示されます。

11. 以下のプログラムの出力は何になりますか?

import java.io.IOException;

public class Test {
	public static void main(String[] args) {
		try {
			throw new IOException("Hello");
		} catch (IOException | Exception e) {
			System.out.println(e.getMessage());
		}
	}
}

A. コンパイル時エラー
B. 「こんにちは」と表示する
C. ランタイムエラー

クリックして回答を表示する
正しい答え: A
コンパイル時エラーが発生しました。IOException例外はすでに代替のExceptionによってキャッチされています。

12. 以下のプログラムの出力は何になりますか?

public class Test {
	public static void main(String[] args) {
		String x = "abc";
		String y = "abc";
		x.concat(y);
		System.out.print(x);
	}
}

A. abcabc -> アービーシーアービーシー
B. abc -> アービーシー
C. null -> ヌル

x.concat(y); は新しい文字列を作成しますが、x には代入されていないため、x の値は変更されません。

13. 以下のうち、Javaで未チェックの例外はどれですか?

A. RuntimeException: ランタイム例外
B. ClassCastException: クラスキャスト例外
C. NullPointerException: ヌルポインタ例外
D. IOException: 入出力例外

A、B、C 正解です
RuntimeException クラスとそのサブクラスはチェックされていない例外です。チェックされていない例外は、メソッドやコンストラクタの throws 句で宣言する必要はありません。

14. 以下のプログラムの出力は何になりますか?

package com.scdev.java;

import java.io.IOException;

public class Test {
	public static void main(String[] args) {
		try {
			throw new Exception("Hello ");
		} catch (Exception e) {
			System.out.print(e.getMessage());
		} catch (IOException e) {
			System.out.print(e.getMessage());
		} finally {
			System.out.println("World");
		}
	}
}

A. コンパイル時エラー (Konpairu-ji erā)
B. こんにちは (Konnichiwa)
C. こんにちは世界 (Konnichiwa sekai)
D. こんにちは こんにちは世界 (Konnichiwa konnichiwa sekai)

コンパイル時エラー IOExceptionの到達できないcatchブロックです。Exceptionのcatchブロックで既に処理されています。

15. Javaについて以下の文中のどれが真実ですか?

A. JVMはバイトコードをマシン固有のコードに変換する責任を持っています。
B. Javaプログラムを実行するには、JREが必要です。
C. JavaプログラムをコンパイルするにはJDKが必要です。
D. JREにはJVMが含まれていません。

以下の日本語にネイティブレベルで言い換えると、次の通りです。オプションは 1 つだけ必要です:答えを明らかにするにはクリックしてください。
正しい答え: A、B、C
詳しい説明については、JDK、JRE、およびJVMを読んでください。

16. javaのクラス内には2つのメインメソッドを持つことはできますか?

A. はい
B. いいえ

「正解を表示する」をクリックしてください。
正解:A
これは難しい問題でした。Javaでは、メソッドオーバーロードを通じて「main」という名前の複数のメソッドを持つことができます。

17. Javaにおけるアノテーションに関する以下の記述のうち、正しいものはどれですか?

A. カスタムアノテーションを作成するために、@interfaceキーワードが使用されます。
B. @OverrideはJavaの組み込みアノテーションです。
C. アノテーションはクラスのフィールドには適用できません。
D. @RetentionはJavaのメタアノテーションの一つです。
E. クラスがコンパイルされると、Javaのアノテーション情報は失われます。

解答を表示するには、Javaアノテーションを読んでください。

18.JavaにおけるEnumに関して、以下の記述のうち真実なものはどれですか?

A. 全てのJavaのenumは暗黙的にjava.lang.Enumクラスを拡張しています。
B. Javaのenumはインターフェースを実装することができます。
C. new演算子を使用してenumのインスタンスを作成することができます。
D. switch文ではenumは使用できません。
E. enumの定数は暗黙的にstaticでfinalです。

Javaにおける列挙型については、JavaでEnumを使用する際にEnum in Java の記事を参照してください。

19. Javaにおいて、以下の中で組み込みのクラスローダーはどれですか?

A. ブートストラップクラスローダー
B. 拡張クラスローダー
C. ランタイムクラスローダー
D. システムクラスローダー

クリックして答えを表示する
正解: A、B、D
「JavaにおけるクラスローダーについてはClassloaders in Javaを参照してください。」

以下のプログラムの出力は何になりますか?

package com.scdev.util;

public class Test {
	public static String toString() {
		System.out.println("Test toString called");
		return "";
	}

	public static void main(String args[]) {
		System.out.println(toString());
	}
}

A. “テストtoStringが呼び出されました”
B. コンパイル時エラー
C. “Test@7fh2bd8” (ObjectクラスのtoString()メソッドが呼び出されています)

選択肢B:オブジェクトクラスのメソッドをstaticキーワードを使ってオーバーライドすることはできないため、コンパイルエラーが発生します。オブジェクトクラスにはtoString()メソッドがあります。「この静的メソッドはオブジェクトのインスタンスメソッドを隠すことはできません」というコンパイルエラーが発生します。

以下のプログラムの出力は何になりますか?

public class Test {
	public static void main(String[] args) {
		String s1 = "abc";
		String s2 = "abc";
		System.out.println("s1 == s2 is:" + s1 == s2);
	}
}

A. s1とs2が等しい:true
B. false
C. s1とs2が等しい:false
D. true

与えられた文の出力は「false」になるでしょう。なぜなら、Javaでは+演算子の優先順位が==演算子よりも高いからです。したがって、与えられた式は「s1 == s2 is:abc」と「abc」を評価することになり、結果はfalseとなります。

結論

コアJavaクイズがお気に入りでしたら嬉しいです。もし私が重要な分野を見落としていると思ったら、教えてください。そうすれば、もっと難しいクイズの問題を追加します。

次のクイズ:Javaの文字列クイズ

コメントを残す 0

Your email address will not be published. Required fields are marked *