Java は世界で最も人気のあるプログラミング言語の 1 つであり、その多用途性、移植性、幅広いアプリケーションで知られています。 Java は、その機能とパフォーマンスにより、Uber、Airbnb、Google、Netflix、Instagram、Spotify、Amazon などのトップ企業で最も使用されている言語です。
この記事では、 200 以上のコア Java 面接の質問 新人と 3 年、5 年、8 年の経験を持つ経験豊富なプロフェッショナルの両方を対象にしています。ここでは、Java のコア概念、オブジェクト指向プログラミング (OOP)、マルチスレッド、例外処理、デザイン パターン、Java コレクションなど、Java の面接を突破するのに確実に役立つすべてを取り上げます。

目次
新卒者向けの Java 面接の質問
1. Java プラットフォームは独立していますか? では、どのようにして独立しているのでしょうか?
はい、Java はプラットフォームに依存しない言語です。多くのプログラミング言語とは異なり、javac コンパイラーはプログラムをコンパイルしてバイトコードまたは .class ファイルを形成します。このファイルは実行中のソフトウェアやハードウェアから独立していますが、バイトコードをさらに実行するには、オペレーティング システムにプレインストールされている JVM (Java 仮想マシン) ファイルが必要です。
それでも JVM はプラットフォームに依存します 、ハードウェアまたはソフトウェアが使用されているにもかかわらず、バイトコードは任意のシステムで作成でき、他のシステムで実行できるため、Java プラットフォームに依存しません。
2. Java の主な機能は何ですか?
Java は、現実世界で最も有名で最も使用されている言語の 1 つです。Java には、他の言語よりも優れた機能が数多くあります。その一部を以下に挙げます。

- 単純 : Java は非常に理解しやすく、構文もシンプルです。
- プラットフォームに依存しない: Java はプラットフォームに依存しないため、どのソフトウェアやハードウェアでも同じプログラムを実行でき、同じ結果が得られます。
- 通訳済み : Java はコンパイラベースの言語と同様に解釈されます。
- 屈強 : 言語を堅牢にするガベージ コレクション、例外処理などの機能。
- オブジェクト指向 : Java は、クラス、オブジェクト、OOPS の 4 つの柱などの概念をサポートするオブジェクト指向言語です。
- 安全な : 実際のプログラムを共有せずにアプリケーションをユーザーと直接共有できるため、Java は安全な言語になります。
- ハイパフォーマンス: 他の従来の解釈型プログラミング言語よりも高速です。
- 動的 : クラスとインターフェースの動的ロードをサポートします。
- 分散型 : Java の機能により、接続されている任意のマシンからメソッドを呼び出すことでファイルにアクセスできるようになります。
- マルチスレッド : 複数のスレッドを定義することで、複数のタスクを同時に処理します。
- 中立的なアーキテクチャ : アーキテクチャには依存しません。
3. JVM とは何ですか?

JVM は Java Virtual Machine の略で、Java インタープリタです。 Java で作成されたバイトコードのロード、検証、実行を担当します。
これはプラットフォームに依存しますが、つまり、JVM のソフトウェアはオペレーティング システムごとに異なりますが、Java プラットフォームを独立させる上で重要な役割を果たします。
このトピックについて詳しくは、を参照してください。 JavaのJVM 。
4. JITとは何ですか?

JIT は (Just-in-Time) コンパイラの略で、JRE (Java Runtime Environment) の一部であり、実行時の Java アプリケーションのパフォーマンスを向上させるために使用されます。 JIT の使用については、以下の手順ごとのプロセスで説明します。
- ソースコードは次のようにコンパイルされます ジャバック バイトコードを形成するコンパイラ
- バイトコードはさらに JVM に渡されます
- JIT は JVM の一部であり、実行時にバイトコードをネイティブ マシン コードにコンパイルする役割を果たします。
- JIT コンパイラは全体的に有効ですが、メソッドが呼び出されたときにアクティブになります。コンパイルされたメソッドの場合、JVM はコンパイルされたコードを解釈するのではなく、直接呼び出します。
- JVM がコンパイルされたコードを呼び出すと、実行のパフォーマンスと速度が向上します。
このトピックについて詳しくは、を参照してください。 JavaのJIT 。
5. JVM で使用できるメモリ ストレージとは何ですか?

JVM は、以下に示すいくつかのメモリ ストレージで構成されます。
- クラス(メソッド)領域: ランタイム定数プール、フィールド、メソッドのデータ、メソッドのコードなど、すべてのクラスのクラスレベルのデータを格納します。
- ヒープ: オブジェクトが作成されるか、オブジェクトが保存されます。実行時にオブジェクトにメモリを割り当てるために使用されます。
- スタック: メソッドの値を返したり動的リンクを実行したりする際に必要となるデータと部分的な結果を格納します。
- プログラム カウンター レジスタ: 現在実行されている Java 仮想マシン命令のアドレスを格納します。
- ネイティブ メソッド スタック: アプリケーションで使用されるすべてのネイティブ メソッドを保存します。
このトピックについて詳しくは、を参照してください。 JVMメモリストレージ 。
6. クラスローダーとは何ですか?
クラスローダーは JRE (Java ランタイム環境) の一部であり、バイトコードまたは作成された .class ファイルの実行中に、クラスローダーは Java クラスとインターフェイスを JVM (Java 仮想マシン) に動的にロードします。クラスローダーのおかげで、Java ランタイム システムはファイルやファイル システムについて知る必要がありません。
このトピックについて詳しくは、を参照してください。 Java のクラスローダー。
7. JVM、JRE、および JDK の違い。
JVM : Java 仮想マシンとしても知られる JVM は、JRE の一部です。 JVM は、バイトコードを機械可読コードに変換するインタープリタの一種です。 JVM 自体はプラットフォームに依存しますが、バイトコードを解釈します。これが、Java がプラットフォームに依存しない理由です。
JRE : JRE は Java Runtime Environment の略で、任意のマシン上で Java プログラムまたはアプリケーションを実行するための環境を提供するインストール パッケージです。
JDK : JDK は Java Development Kit の略で、Java プログラムを開発および実行するための環境を提供します。 JDK は、Java プログラムを開発する環境を提供する開発ツールと、Java プログラムまたはアプリケーションを実行する JRE の 2 つが含まれるパッケージです。
このトピックについて詳しくは、を参照してください。 JVM、JRE、および JDK の違い 。
8. Java と C++ の違いは何ですか?
基礎 | C++ | ジャワ |
|---|---|---|
プラットホーム | C++ はプラットフォームに依存します | Javaはプラットフォームに依存しません |
応用 | C++は主にシステムプログラミングに使用されます | Javaは主にアプリケーションプログラミングに使用されます |
ハードウェア | C++ はハードウェアに近い | Java はハードウェアとそれほど対話的ではありません |
グローバルスコープ | C++ はグローバル スコープと名前空間スコープをサポートします。 | Java はグローバル スコープをサポートしていません。 |
サポートしていません | Java ではサポートされているが C++ ではサポートされていない機能は次のとおりです。
| C++ ではサポートされているが Java ではサポートされていない機能は次のとおりです。
|
おっと | C++ はオブジェクト指向言語です。これは単一のルート階層ではありません。 | Java もオブジェクト指向言語です。すべてが単一のクラス (java.lang.Object) から派生するため、これは単一のルート階層です。 |
継承ツリー | C++ は常に新しい継承ツリーを作成します。 | Java のクラスは Java のオブジェクト クラスの子であるため、Java は単一継承ツリーを使用します。 |
9. Java の public static void main(String args[]) について説明します。

C、C++ などの他のプログラミング言語とは異なり、Java では main 関数を public static void main (String args[]) として宣言しました。用語の意味は以下のとおりです。
- 公共 : public は、要素またはメソッドに誰がアクセスできるか、およびその制限は何かを指定するアクセス修飾子です。 main 関数をグローバルに利用できるようにする責任があります。現在のクラスには存在しないため、JVM がクラスの外部から呼び出せるようにパブリックに作成されます。
- 静的 : static は、不必要なメモリの割り当てを避けるために、クラスを開始せずに要素を使用できるようにするために使用されるキーワードです。
- 空所 : void はキーワードであり、メソッドが何も返さないことを指定するために使用されます。 main 関数は何も返さないので、void を使用します。
- 主要 : main は、宣言された関数が main 関数であることを表します。これは、宣言された関数がメイン関数であることを JVM が識別するのに役立ちます。
- 文字列引数[] : Java コマンドライン引数を格納し、java.lang.String クラス型の配列です。
10. Java 文字列プールとは何ですか?
Java 文字列プールは、プログラムで定義されたすべての文字列が保存されるヒープ メモリ内の場所です。スタック内の別の場所に、文字列を格納する変数が格納されます。新しい文字列オブジェクトを作成するたびに、JVM は文字列プール内のオブジェクトの存在を確認します。プール内で文字列が使用可能な場合は、同じオブジェクト参照が変数と共有され、それ以外の場合は新しいオブジェクトが作成されます。

例:
String str1='Hello'; // 'Hello' will be stored in String Pool // str1 will be stored in stack memory>
11. メインを静的として宣言しないと宣言するとどうなりますか?
static を使用せず、エラーも発生せずに main メソッドを宣言できます。ただし、main メソッドは、アプリケーションまたはプログラムへのエントリ ポイントとしては扱われません。
12. Java のパッケージとは何ですか?
Java のパッケージは、保護と名前空間管理へのアクセスを提供する、関連するタイプのクラス、インターフェイスなどのグループとして定義できます。
13. パッケージが使用される理由は何ですか?
Java では、名前の競合を防ぎ、アクセスを制御し、クラスやインターフェイスなどの検索/検索と使用を容易にするために、パッケージが使用されます。
14. Java のパッケージの利点は何ですか?
Java でパッケージを定義することにはさまざまな利点があります。
- パッケージは名前の衝突を回避します。
- このパッケージにより、アクセス制御が容易になります。
- 外部には表示されず、パッケージによって使用される非表示クラスを作成することもできます。
- 関連するクラスを見つけやすくなります。
15. Java には何種類のパッケージがありますか?
Javaには2種類のパッケージがある
- ユーザー定義パッケージ
- ビルドインパッケージ
16. Java のさまざまなデータ型について説明します。
Java には以下の 2 種類のデータ型があります。
- プリミティブ データ型
- 非プリミティブ データ型またはオブジェクト データ型
プリミティブ データ タイプ: プリミティブ データは、特別な機能を持たない単一の値です。 8 つのプリミティブ データ型があります。
- ブール値 : 値 true または false を格納します
- バイト : 8 ビットの符号付き 2 の補数整数を格納します
- チャー : 単一の 16 ビット Unicode 文字を格納します
- 短い : 16 ビットの符号付き 2 の補数整数を格納します
- 整数 : 32 ビットの符号付き 2 の補数整数を格納します
- 長さ : 64 ビットの 2 の補数整数を格納します
- 浮く : 単精度 32 ビット IEEE 754 浮動小数点を格納します
- ダブル : 倍精度 64 ビット IEEE 754 浮動小数点を格納します
非プリミティブ データ型: 参照データ型には、値をメモリに直接保存できないため、変数値のメモリ アドレスが含まれます。非プリミティブのタイプを以下に示します。
- 文字列
- 配列
- クラス
- 物体
- インターフェース
17. バイトデータ型が使用される場合?
バイトは 8 ビットの符号付き 2 の補数整数です。バイトでサポートされる最小値は -128 で、最大値は 127 です。これは、メモリを節約する必要があり、必要な数値の制限が -128 ~ 127 である状況で使用されます。
18. Java でポインタを宣言できますか?
いいえ、Java はポインターのサポートを提供しません。 Java ではポインタの機能が提供されていないため、Java はより安全である必要がありました。
19. Java のバイト データ型のデフォルト値は何ですか?
Java のバイト データ型のデフォルト値は 0 です。
20. Java の float および double データ型のデフォルト値は何ですか?
Java では、float のデフォルト値は 0.0f、double のデフォルト値は 0.0d です。
21. Java の Wrapper クラスとは何ですか?
一般に、ラッパーは、より小さなエンティティをカプセル化するより大きなエンティティを指します。ここで Java では、ラッパー クラスはプリミティブ データ型をカプセル化するオブジェクト クラスです。
プリミティブ データ型は、さらに別のデータ型を作成する元となるデータ型です。たとえば、整数ではさらに、long、byte、short などの構築が可能になります。一方、文字列はそれができないため、プリミティブではありません。
ラッパー クラスの話に戻りますが、Java には 8 つのラッパー クラスが含まれています。それらは、ブール型、バイト型、ショート型、整数型、文字型、ロング型、浮動小数点型、ダブル型です。さらに、C プログラミング言語の構造の概念に似たカスタム ラッパー クラスを Java で作成することもできます。必要なデータ型を使用して独自のラッパー クラスを作成します。
22. ラッパークラスが必要なのはなぜですか?
ラッパー クラスは、プリミティブ データ型をカプセル化するオブジェクト クラスであり、次の理由で必要になります。
- ラッパークラスはfinalかつ不変です
- valueOf()、parseInt() などのメソッドを提供します。
- 自動ボックス化およびボックス化解除の機能を提供します。
23. インスタンス変数とローカル変数を区別します。
インスタンス変数 | ローカル変数 |
|---|---|
メソッドの外で宣言され、メソッドによって直接呼び出されます。 | メソッド内で宣言されます。 |
デフォルト値があります。 | デフォルト値なし |
クラス全体で使用できます。 | 範囲はメソッドに限定されます。 |
24. Java の変数とインスタンスに割り当てられるデフォルト値は何ですか?
Java では、インスタンス変数を初期化していない場合、コンパイラーはそれらをデフォルト値で初期化します。インスタンスと変数のデフォルト値は、そのデータ型によって異なります。デフォルトのデータ型の一般的なタイプは次のとおりです。
- 数値型 (byte、short、int、long、float、および double) のデフォルト値は 0 です。
- ブール型のデフォルト値は false です。
- オブジェクト型 (クラス、インターフェイス、配列) のデフォルト値は null です。
- NULL 文字 u0000 は、char 型のデフォルト値です。
例:
ジャワ // Java Program to demonstrate use of default values import java.io.*; class GFG { // static values static byte b; static int i; static long l; static short s; static boolean bool; static char c; static String str; static Object object; static float f; static double d; static int[] Arr; public static void main(String[] args) { // byte value System.out.println('byte value' + b); // short value System.out.println('short value' + s); // int value System.out.println('int value' + i); // long value System.out.println('long value' + l); System.out.println('boolean value' + bool); System.out.println('char value' + c); System.out.println('float value' + f); System.out.println('double value' + d); System.out.println('string value' + str); System.out.println('object value' + object); System.out.println('Array value' + Arr); } }> 出力
byte value0 short value0 int value0 long value0 boolean valuefalse char value float value0.0 double value0.0 string valuenull object valuenull Array valuenull>
25. クラス変数とは何ですか?
Java では、クラス変数 (静的変数とも呼ばれる) は、クラス内でメソッド、コンストラクター、またはブロックの外側で宣言される変数です。クラス変数は static キーワードを使用して宣言され、クラスのすべてのインスタンス (オブジェクト) とクラス自体によって共有されます。クラスから派生したオブジェクトの数に関係なく、各クラス変数は 1 回しか存在しません。
例:
ジャワ // Java program to demonstrate use of Clas Variable class GFG { public static int ctr = 0; public GFG() { ctr++; } public static void main(String[] args) { GFG obj1 = new GFG(); GFG obj2 = new GFG(); GFG obj3 = new GFG(); System.out.println('Number of objects created are ' + GFG.ctr); } }> 出力
Number of objects created are 3>
26. ローカル変数に保存されるデフォルト値は何ですか?
ローカル変数に保存されるデフォルト値はありません。また、プリミティブ変数とオブジェクトにはデフォルト値がありません。
27. インスタンス変数とクラス変数の違いを説明します。
インスタンス変数: インスタンス変数と呼ばれる静的修飾子のないクラス変数は、通常、クラスのすべてのインスタンスによって共有されます。これらの変数は、複数のオブジェクト間で異なる値を持つことができます。インスタンス変数の内容は、クラスの特定のオブジェクト インスタンスに関連しているため、オブジェクト インスタンス間で完全に独立しています。
例:
ジャワ // Java Program to demonstrate Instance Variable import java.io.*; class GFG { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } public static void main(String[] args) { GFG obj = new GFG(); obj.setName('John'); System.out.println('Name ' + obj.getName()); } }> 出力
Name John>
クラス変数: クラス変数 variable は、キーワード static を使用してクラス レベルのどこでも宣言できます。これらの変数は、さまざまなオブジェクトに適用される場合、値を 1 つだけ持つことができます。これらの変数は、クラスの特定のオブジェクトに接続されていないため、すべてのクラス メンバーで共有できます。
例:
ジャワ // Java Program to demonstrate Class Variable import java.io.*; class GFG { // class variable private static final double PI = 3.14159; private double radius; public GFG(double radius) { this.radius = radius; } public double getArea() { return PI * radius * radius; } public static void main(String[] args) { GFG obj = new GFG(5.0); System.out.println('Area of circle: ' + obj.getArea()); } }> 出力
Area of circle: 78.53975>
28. 静的変数とは何ですか?
static キーワードは、特定のクラスの同じ変数またはメソッドを共有するために使用されます。静的変数は、宣言されると、変数の単一コピーが作成され、クラス レベルのすべてのオブジェクト間で共有される変数です。
29. System.out、System.err、System.in の違いは何ですか?
System.out – これは文字を書き込むために使用される PrintStream であり、コマンド ライン インターフェイスのコンソール/ターミナルに書きたいデータを出力できるとも言えます。
例:
ジャワ // Java Program to implement // System.out import java.io.*; // Driver Class class GFG { // Main Function public static void main(String[] args) { // Use of System.out System.out.println(''); } }>
システム.エラー – エラーメッセージを表示するために使用されます。
例:
ジャワ // Java program to demonstrate // System.err import java.io.*; // Driver Class class GFG { // Main function public static void main(String[] args) { // Printing error System.err.println( 'This is how we throw error with System.err'); } }> 出力:
This is how we throw error with System.err>
System.err には多くの類似点がありますが、両方ともかなり多くの違いもありますので、確認してみましょう。
| システムアウト | システムエラー |
|---|---|
システムの標準出力で印刷されます。 | 標準エラーに出力されます。 |
主に、結果をコンソールに表示するために使用されます。 | 主にエラーテキストを出力するために使用されます。 |
デフォルト (黒) 色でコンソールに出力が表示されます。 | コンソールにも出力が表示されますが、ほとんどの IDE では区別するために赤色で表示されます。 |
システムイン – これは、端末 Window から入力を読み取るために使用される InputStream です。 System.in を直接使用することはできないため、system.in で入力を取得するために Scanner クラスを使用します。
例:
ジャワ // Java Program to demonstrate // System.in import java.util.*; // Driver Class class Main { // Main Function public static void main(String[] args) { // Scanner class with System.in Scanner sc = new Scanner(System.in); // Taking input from the user int x = sc.nextInt(); int y = sc.nextInt(); // Printing the output System.out.printf('Addition: %d', x + y); } }> 出力:
3 4 Addition: 7>
30. IO ストリームから何がわかりますか?

Java は、ユーザーがすべての入出力操作を実行できるようにする I/O パッケージを備えたさまざまなストリームを提供します。これらのストリームは、I/O 操作を完全に実行するために、あらゆる種類のオブジェクト、データ型、文字、ファイルなどをサポートします。
31. Reader/Writerクラス階層とInputStream/OutputStreamクラス階層の違いは何ですか?
これらの主な違いは、バイト ストリーム データが入出力ストリーム クラスによって読み書きされることです。文字は Reader クラスと Writer クラスによって処理されます。文字配列をパラメータとして受け入れる Reader/Writer クラスとは対照的に、入出力ストリーム クラス メソッドはバイト配列を受け入れます。入出力ストリームと比較して、Reader/Writer クラスはより効率的で、すべての Unicode 文字を処理し、内部化に役立ちます。特に指定しない限り、画像などのバイナリ データの代わりに Reader/Writer クラスを使用してください。
例:
ジャワ // Java Program to demonstrate Reading Writing Binary Data // with InputStream/OutputStream import java.io.*; class GFG { public static void main(String[] args) { try { // Writing binary data to a file using OutputStream byte[] data = {(byte) 0xe0, 0x4f, (byte) 0xd0, 0x20, (byte) 0xea}; OutputStream os = new FileOutputStream('data.bin'); os.write(data); os.close(); // Reading binary data from a file using InputStream InputStream is = new FileInputStream('data.bin'); byte[] newData = new byte[5]; is.read(newData); is.close(); // Printing the read data for (byte b : newData) { System.out.println(b); } } catch (IOException e) { e.printStackTrace(); } } }> 出力
-32 79 -48 32 -22>
32. すべてのストリームで最も多いクラスは何ですか?
すべてのストリーム クラスは、ByteStream クラスと CharacterStream クラスの 2 種類のクラスに分類できます。 ByteStream クラスはさらに、InputStream クラスと OutputStream クラスに分割されます。 CharacterStream クラスは、Reader クラスと Writer クラスにも分類されます。すべての InputStream クラスの SuperMost クラスは java.io.InputStream で、すべての出力ストリーム クラスの SuperMost クラスは java.io.OutPutStream です。同様に、すべてのリーダー クラスの最上位クラスは java.io.Reader で、すべてのライター クラスの最上位クラスは java.io.Writer です。
33. FileInputStream と FileOutputStream とは何ですか?
データの読み取りと書き込みのために、Java は I/O ストリームを提供します。ストリームは、ファイル、I/O デバイス、別のプログラムなどの入力ソースまたは出力先を表します。 ファイル入力ストリーム Java では、ファイルからデータをバイトのストリームとして読み取るために使用されます。これは主に、画像、オーディオ ファイル、シリアル化されたオブジェクトなどのバイナリ データを読み取るために使用されます。
例:
File file = new File('path_of_the_file'); FileInputStream inputStream = new FileInputStream(file);>Javaでは、 ファイル出力ストリーム 関数は、指定されたファイルまたはファイル記述子にデータをバイトごとに書き込むために使用されます。通常、画像などの生のバイト データは、FileOutputStream を使用してファイルに書き込まれます。
例:
File file = new File('path_of_the_file'); FileOutputStream outputStream = new FileOutputStream(file);>34. BufferedInputStream クラスと BufferedOutputStream クラスを使用する目的は何ですか?
ファイルまたはストリームを操作する場合、プログラムの入出力パフォーマンスを向上させるには、BufferedInputStream クラスと BufferedOutputStream クラスを使用する必要があります。これら両方のクラスはバッファリング機能を提供します。これは、データがファイルに書き込まれる前、またはストリームから読み取られる前にバッファに格納されることを意味します。また、OS がネットワークまたはディスクと対話する必要がある回数も削減されます。バッファリングを使用すると、プログラムは小さな塊に分割して書き込むのではなく、大量のデータを書き込むことができます。これにより、ネットワークまたはディスクへのアクセスのオーバーヘッドも削減されます。
BufferedInputStream(InputStream inp); // used to create the bufferinput stream and save the arguments.>
BufferedOutputStream(OutputStream output); // used to create a new buffer with the default size.>
35. FilterStream とは何ですか?
ストリームフィルターまたはフィルターストリーム 指定された述語に一致するこのストリームの要素で構成されるストリームを返します。 filter() の動作中、実際にはフィルタリングは実行されませんが、その代わりに、トラバース時に指定された述語に一致する初期ストリームの要素を含む新しいストリームが作成されます。
例:
FileInputStream fis =new FileInoutStream('file_path'); FilterInputStream = new BufferedInputStream(fis);>
36. I/Oフィルターとは何ですか?
入出力フィルターとしても定義される I/O フィルターは、1 つのストリームから読み取り、入出力ソースにデータを書き込むオブジェクトです。このフィルタを使用するには java.io パッケージを使用しました。
37. コンソールから入力を取得する方法は何通りありますか?
Java でコンソールから入力を取得するには、以下の 2 つの方法があります。
- コマンドライン引数の使用
- バッファリーダークラスの使用
- コンソールクラスの使用
- スキャナクラスの使用
各メソッドの使用法を示すプログラムを以下に示します。
例:
ジャワ // Java Program to implement input // using Command line argument import java.io.*; class GFG { public static void main(String[] args) { // check if length of args array is // greater than 0 if (args.length > 0) { System.out.println( 'The command line arguments are:'); // iterating the args array and printing // the command line arguments for (String val : args) System.out.println(val); } else System.out.println('No command line ' + 'arguments found.'); } } // Use below commands to run the code // javac GFG.java // java Main techcodeview.com> ジャワ // Java Program to implement // Buffer Reader Class import java.io.*; class GFG { public static void main(String[] args) throws IOException { // Enter data using BufferReader BufferedReader read = new BufferedReader( new InputStreamReader(System.in)); // Reading data using readLine String x = read.readLine(); // Printing the read line System.out.println(x); } }> ジャワ // Java program to implement input // Using Console Class public class GfG { public static void main(String[] args) { // Using Console to input data from user String x = System.console().readLine(); System.out.println('You entered string ' + x); } }> ジャワ // Java program to demonstrate // working of Scanner in Java import java.util.Scanner; class GfG { public static void main(String args[]) { // Using Scanner for Getting Input from User Scanner in = new Scanner(System.in); String str = in.nextLine(); System.out.println('You entered string ' + str); } }> 出力:
techcodeview.com>
38. print、println、printf の使用法の違い。
print、println、printf はすべて要素の印刷に使用されますが、print はすべての要素を印刷し、カーソルは同じ行に残ります。 println はカーソルを次の行に移動します。 printf ではフォーマット識別子も使用できます。
39. 演算子とは何ですか?
演算子は、変数や値に対して何らかの演算を実行するために使用される特殊なタイプの記号です。
40. Java では何種類の演算子が使用できますか?
Java のすべてのタイプの演算子を以下に示します。
Java 演算子の優先順位に従って、後置演算子は最も高い優先順位とみなされます。
41.>> 演算子と>>> 演算子の違いを説明します。
>> と>>> のような演算子は同じように見えますが、動作が少し異なります。>> 演算子は符号ビットをシフトし、>>> 演算子はゼロで埋められたビットをシフトアウトするために使用されます。
例:
ジャワ // Java Program to demostrate //>> および>>> 演算子は java.io.* をインポートします。 // ドライバークラス GFG { public static void main(String[] args) { int a = -16, b = 1; //>> System.out.println(a >> b); の使用 a = -17; b = 1; //>>> System.out.println(a >>> b) の使用; } }>> 出力
-8 2147483639>
42. 右結合の Java 演算子はどれですか?
右結合の演算子は 1 つだけあり、それは = 演算子です。
43. ドット演算子とは何ですか?
Java の Dot 演算子は、クラス オブジェクトのインスタンス変数とメソッドにアクセスするために使用されます。また、パッケージからクラスやサブパッケージにアクセスするためにも使用されます。
44. 共変戻り型とは何ですか?
共変戻り値の型は、戻り値の型がサブクラスと同じ方向に変化する可能性があることを指定します。子クラスのオーバーライド メソッドに異なる戻り値の型を指定することは可能ですが、子の戻り値の型は親の戻り値の型のサブタイプである必要があり、そのオーバーライド メソッドにより戻り値の型に関してバリアントになります。
以下の理由から、共変の戻り値の型を使用します。
- クラス階層に存在する混乱を招く型キャストを回避し、コードを読みやすく、使用し、保守しやすくします。
- メソッドをオーバーライドするときに、より具体的な戻り値の型を自由に指定できるようになります。
- リターン時のランタイム ClassCastException の防止に役立ちます。
45. 一時的なキーワードとは何ですか?
transient キーワードは、特定の変数の値をファイルに保存したくない場合、シリアル化時に使用されます。 JVM は一時キーワードを検出すると、変数の元の値を無視し、その変数データ型のデフォルト値を保存します。
46. sleep() メソッドと wait() メソッドの違いは何ですか?
寝る() | 待って() |
|---|---|
sleep() メソッドはスレッド クラスに属します。 | Wait() メソッドはオブジェクト クラスに属します。 |
スリープでは、現在のスレッドが保持しているロックは解放されません。 | wait() はロックを解放し、他のスレッドがロックを取得できるようにします。 |
このメソッドは静的メソッドです。 | このメソッドは静的メソッドではありません。 |
| Sleep() は InterruptedException をスローしません。 | 待機中にスレッドが中断された場合は、InterruptedException が表示されます。 |
主に、スレッドを特定の期間遅延させるために使用されます。 | 主に、別のスレッドから通知されるまでスレッドを一時停止するために使用されます。 |
Sleep() には 2 つのオーバーロードされたメソッドがあります。
| Wait() には 3 つのオーバーロードされたメソッドがあります。
|
47. String と StringBuffer の違いは何ですか?
弦 | 文字列バッファ |
|---|---|
| 一連の文字のストア。 | 文字列を操作する機能を提供します。 |
| それは不変です。 | これは可変です (変更可能であり、それらに対して他の文字列操作を実行できます)。 |
| 文字列内にスレッド操作はありません。 | スレッドセーフです (2 つのスレッドが StringBuffer のメソッドを同時に呼び出すことはできません) |
48. StringBuffer と StringBuilder の違いは何ですか?
文字列バッファ | 文字列ビルダー |
|---|---|
| StringBuffer は、文字列を操作する機能を提供します。 | StringBuilder は、変更可能な文字列を構築するために使用されるクラスです。 |
| スレッドセーフです (2 つのスレッドが StringBuffer のメソッドを同時に呼び出すことはできません) | スレッドセーフではありません (2 つのスレッドが同時にメソッドを呼び出すことができます) |
| 同期しているので比較的遅いです。 | 非同期なので実装が速い |
49. データ内で多数の更新を行う必要がある場合、文字列と文字列バッファーのどちらを優先する必要がありますか?
StringBuilder は StringBuffer より高速であるため、StringBuffer よりも文字列の方が優先されますが、スレッドの安全性が向上するため、StringBuffer オブジェクトの方が優先されます。
50. StringBuffer が可変と呼ばれるのはなぜですか?
Java の StringBuffer クラスは、変更可能な文字列を表すために使用されます。新しいオブジェクトを常に作成せずに文字列の内容を変更できるようにすることで、不変の String クラスの代替手段を提供します。可変 (変更可能な) 文字列は、StringBuffer クラスを使用して作成されます。 Java の StringBuffer クラスは、変更可能であることを除けば String クラスと同じです。
例:
ジャワ // Java Program to demonstrate use of stringbuffer public class StringBufferExample { public static void main(String[] args) { StringBuffer s = new StringBuffer(); s.append('Geeks'); s.append('for'); s.append('Geeks'); String message = s.toString(); System.out.println(message); } }> 出力
techcodeview.com>
51. new() を使用した String の作成は、リテラルの作成とどのように異なりますか?
new() を使用した文字列はリテラルとは異なります。文字列を宣言するとスタック メモリ内に要素が格納されますが、new() を使用して宣言するとヒープ メモリに動的メモリが割り当てられます。同じコンテンツオブジェクトが存在する場合でも、オブジェクトはヒープメモリに作成されます。
構文:
String x = new String('ABC');>

52. Javaの配列とは何ですか?
Java の配列は、同じ型の要素の固定サイズのシーケンスを格納するために使用されるデータ構造です。配列の要素には、0 から始まりマイナス 1 の長さまでのインデックスによってアクセスできます。Java での配列の宣言は角かっこを使用して行われ、サイズも宣言中に指定されます。
構文:
int[] Arr = new int[5];>
53. Java ではどのメモリ配列が作成されますか?
Java の配列はヒープ メモリ内に作成されます。 new キーワードを使用して配列が作成されると、配列の要素を格納するためにメモリがヒープに割り当てられます。 Java では、ヒープ メモリは Java 仮想マシン (JVM) によって管理され、Java プログラムのすべてのスレッド間でも共有されます。プログラムによって使用されなくなったメモリは、JVM がガベージ コレクターを使用してメモリを再利用します。 Java の配列は動的に作成されます。つまり、配列のサイズはプログラムの実行時に決定されます。配列のサイズは配列の宣言時に指定され、配列の作成後に変更することはできません。
54. 配列の型には何がありますか?
配列には、プリミティブ配列と参照配列の 2 種類があります。
- 単次元配列: 1 次元のみを持つ配列、つまり整数の配列または文字列の配列は、1 次元配列として知られています。

構文:
data_type[] Array_Name = new data_type[ArraySize];>
- 多次元配列: 2 次元配列や 3 次元配列など、2 次元以上の配列。
55. Java 配列のインデックスが 0 から始まるのはなぜですか?
配列のインデックスは、配列の先頭からの距離を表します。したがって、最初の要素の距離は 0 であるため、開始インデックスは 0 になります。
構文:
[Base Address + (index * no_of_bytes)]>
56. int array[] と int[] array の違いは何ですか?
int array[] と int[] array は両方とも、Java で整数の配列を宣言するために使用されます。両者の唯一の違いは構文上であり、機能的な違いはありません。
int arr[] is a C-Style syntax to declare an Array.>
int[] arr is a Java-Style syntax to declare an Array.>
ただし、通常は、Java スタイルの構文を使用して配列を宣言することをお勧めします。読みやすく理解しやすいため、他の Java 言語構造との一貫性も高くなります。
57. Javaで配列をコピーするにはどうすればよいですか?
Java では、要件に基づいて配列をコピーする方法が複数あります。
- Java の clone() メソッド: Java のこのメソッドは、指定された配列の浅いコピーを作成するために使用されます。これは、新しい配列が元の配列と同じメモリを共有することを意味します。
int[] Arr = { 1, 2, 3, 5, 0}; int[] tempArr = Arr.clone();>- arraycopy() メソッド: 配列のディープコピーを作成するには、元の配列と同じ値を持つ新しい配列を作成するこのメソッドを使用できます。
int[] Arr = {1, 2, 7, 9, 8}; int[] tempArr = new int[Arr.length]; System.arraycopy(Arr, 0, tempArr, 0, Arr.length);>- copyOf() メソッド: このメソッドは、特定の長さの新しい配列を作成し、元の配列の内容を新しい配列にコピーするために使用されます。
int[] Arr = {1, 2, 4, 8}; int[] tempArr = Arrays.copyOf(Arr, Arr.length);>- copyOfRange() メソッド: このメソッドは Java の copyOf() メソッドに非常に似ていますが、このメソッドを使用すると、元の配列からコピーする要素の範囲を指定することもできます。
int[] Arr = {1, 2, 4, 8}; int[] temArr = Arrays.copyOfRange(Arr, 0, Arr.length);>58. ギザギザの配列から何がわかりますか?
Java のギザギザ配列は、配列の各行が異なる長さを持つことができる単なる 2 次元配列です。 2 次元配列内の行はすべて同じ長さですが、ギザギザの配列では各行のサイズをより柔軟に設定できます。この機能は、データの長さが異なる場合や、メモリ使用量を最適化する必要がある場合に非常に役立ちます。
構文:
int[][] Arr = new int[][] { {1, 2, 8}, {7, 5}, {6, 7, 2, 6} };>59. 配列を揮発性にすることは可能ですか?
Java では、揮発性を作成することはできません。 Java の Volatile キーワードは個々の変数にのみ適用できますが、配列やコレクションには適用できません。変数の値は、スレッドのローカル メモリにキャッシュされるのではなく、揮発性として定義されている場合、常にメイン メモリとの間で読み書きされます。これにより、変数にアクセスするすべてのスレッドがその変数に加えられた変更を確実に確認できるようになります。
60. 配列の長所と短所は何ですか?

配列の利点は次のとおりです。
- コレクション内の任意の要素への直接的かつ効果的なアクセスは、配列によって可能になります。配列の要素には O(1) 演算を使用してアクセスできます。これは、アクセスに必要な時間は一定であり、配列のサイズに依存しないことを意味します。
- 配列を使用すると、データをメモリに効率的に保存できます。配列の要素は連続したメモリ領域に格納されるため、配列のサイズはコンパイル時にわかります。
- データは連続したメモリ領域に保存されるため、配列を使用するとデータを迅速に取得できます。
- 配列は実装も理解も簡単なので、コンピューター プログラミングを学ぶ初心者にとって理想的な選択肢です。
配列の欠点は次のとおりです。
- 配列は、その時点で選択された所定のサイズで作成されます。つまり、配列のサイズを拡張する必要がある場合は、新しい配列を作成し、古い配列から新しい配列にデータをコピーする必要があり、これには多くの時間とメモリが必要になる可能性があります。
- 配列が完全に占有されていない場合、配列のメモリ空間に未使用のメモリ空間が存在する可能性があります。記憶力が低い場合、これは問題になる可能性があります。
- リンク リストやツリーなどの他のデータ構造と比較すると、配列はサイズが固定されており、高度なデータ型のサポートが限られているため、厳格になる可能性があります。
- 配列の要素はすべて同じデータ型である必要があるため、オブジェクトや構造体のような複雑なデータ型はサポートされません。
61. オブジェクト指向パラダイムとは何ですか?
パラダイムとは文字通り、パターンや方法を意味します。プログラミングパラダイムとは、プログラムを解くための手法であり、命令型、論理型、関数型、オブジェクト指向の4種類があります。メソッドが適用される基本エンティティとしてオブジェクトが使用され、カプセル化または継承機能が実行される場合、それはオブジェクト指向パラダイムとして知られています。
62. Java における OOP の主な概念は何ですか?
Java における OOP の主な概念を以下に示します。
- 継承
- ポリモーフィズム
- 抽象化
- カプセル化
63. オブジェクト指向プログラミング言語とオブジェクトベース プログラミング言語の違いは何ですか?
オブジェクト指向プログラミング言語 | オブジェクトベースのプログラミング言語 |
|---|---|
| オブジェクト指向プログラミング言語は、継承、ポリモーフィズム、抽象化などのより大きな概念をカバーします。 | オブジェクトベースのプログラミングの範囲は、オブジェクトの使用とカプセル化に限定されます。 |
| すべての組み込みオブジェクトをサポートします | すべての組み込みオブジェクトをサポートしているわけではありません |
| 例: Java、C# など。 | 例: Java スクリプト、ビジュアルベーシックなど。 |
64. 「new」演算子は、Java の「newInstance()」演算子とどう違うのですか?
new 演算子はオブジェクトの作成に使用されますが、実行時に作成されるオブジェクトのタイプを決定したい場合、new 演算子を使用する方法はありません。この場合、次を使用する必要があります。 newInstance() メソッド 。
65. Javaのクラスとは何ですか?
Java では、クラスは、同様の特性と属性を共有するオブジェクトのコレクションです。クラスは、オブジェクトの作成元となるブループリントまたはテンプレートを表します。クラスは現実世界のエンティティではありませんが、現実世界のエンティティであるオブジェクトを作成するのに役立ちます。
66. 静的(クラス)メソッドとインスタンスメソッドの違いは何ですか?
静的(クラス)メソッド | インスタンスメソッド |
|---|---|
静的メソッドは、オブジェクトではなくクラスに関連付けられます。 | インスタンス メソッドは、クラスではなくオブジェクトに関連付けられます。 |
静的メソッドは、クラスのインスタンスを作成せずに、クラス名のみを使用して呼び出すことができます。 | インスタンス メソッドは、オブジェクト参照を使用してクラスの特定のインスタンスで呼び出すことができます。 |
静的メソッドはアクセスできません これ キーワード 。 | インスタンス メソッドは以下にアクセスできます。 これ キーワード 。 |
このメソッドはクラスの静的メンバーのみにアクセスできます。 | このメソッドは、クラスの静的メソッドと非静的メソッドの両方にアクセスできます。 |
67. Java のこのキーワードは何ですか?

「this」は、現在のオブジェクトを参照する変数を参照するために使用されるキーワードです。
68. 簡単なアクセス指定子とアクセス指定子の種類とは何ですか?

Java のアクセス指定子は、クラス、コンストラクター、変数、メソッド、またはデータ メンバーのスコープを制限するのに役立ちます。 Java には、以下に示す 4 種類のアクセス指定子があります。
- 公共
- プライベート
- 保護されています
- デフォルト
69. インスタンス変数として定義したオブジェクト参照の初期値は何になりますか?
インスタンス変数として定義されたオブジェクトリファレンスの初期値はNULL値です。
70. オブジェクトとは何ですか?
オブジェクトは、特定のプロパティとメソッドが関連付けられた現実のエンティティです。オブジェクトはクラスのインスタンスとしても定義されます。オブジェクトは new キーワードを使用して宣言できます。
71. Java でオブジェクトを作成するさまざまな方法には何がありますか?
Java でオブジェクトを作成するメソッドを以下に示します。
- 新しいキーワードを使用する
- 新しいインスタンスの使用
- clone() メソッドの使用
- 逆シリアル化の使用
- Constructor クラスの newInstance() メソッドの使用
Java でオブジェクトを作成するメソッドの詳細については、以下を参照してください。 この記事 。
72. オブジェクトのクローン作成の長所と短所は何ですか?
以下に示すように、オブジェクト クローン作成の使用には多くの利点と欠点があります。
利点:
- Java では、代入演算子「=」は参照変数のコピーを作成するだけなので、クローン作成には使用できません。このような不一致を克服するには、代入演算子に対して Object クラスの clone() メソッドを使用します。
- clone() メソッドは Object クラスの保護されたメソッドであり、Employee クラスのみが Employee オブジェクトのクローンを作成できることを意味します。これは、Employee 以外のクラスは Employee クラスの属性を知らないため、Employee オブジェクトのクローンを作成できないことを意味します。
- 繰り返しが減少すると、コード サイズは減少します。
- レプリケーション (プロトタイプ パターンのようなもの) を可能にし、各フィールドを手動で初期化すると、オブジェクトが複雑な場合に大きなコードが作成され、クローン作成により高速になります。
短所:
- Object.clone() メソッドは保護されているため、独自の clone() を提供し、そこから間接的に Object.clone() を呼び出す必要があります。
- メソッドがない場合は、オブジェクトに対して clone() を実行できるように JVM 情報を提供する必要があるため、Cloneable インターフェイスを提供する必要があります。そうでない場合、clone はフィールドの浅いコピーを作成できません。 clone メソッドから super.clone() を返すだけですが、問題が発生する可能性があります。
73. これを現在のクラス オブジェクト自体ではなくメソッドに渡すことの利点は何ですか?
これを現在のクラス オブジェクト自体ではなくメソッドに渡すことには、次のような利点があります。
- これは最後の変数であるため、新しい値に割り当てることはできませんが、現在のクラス オブジェクトは最終的なものではなく、変更できる可能性があります。
- これは同期ブロックで使用できます。
74. コンストラクターとは何ですか?
コンストラクターは、オブジェクトを初期化するために使用される特別なメソッドです。コンストラクターはオブジェクトの作成時に呼び出されます。コンストラクターの名前はクラスの名前と同じです。
例:
// Class Created class XYZ{ private int val; // Constructor XYZ(){ val=0; } };>75. クラスにコンストラクターを提供しない場合はどうなりますか?
Java のクラスにコンストラクターを指定しない場合、コンパイラーは引数も操作も持たないデフォルトのコンストラクターを自動的に生成します。これがデフォルトのコンストラクターです。
76. Javaでは何種類のコンストラクタが使用されますか?
Java には、次に示す 2 種類のコンストラクターがあります。
- デフォルトのコンストラクター
- パラメータ化されたコンストラクタ
デフォルト コンストラクター: パラメーター値を受け入れないタイプです。オブジェクト属性の初期値を設定するために使用されます。
class_Name(); // Default constructor called>
パラメーター化されたコンストラクター: パラメーターを引数として受け入れるタイプのコンストラクターです。これらは、オブジェクトの初期化中にインスタンス変数に値を割り当てるために使用されます。
class_Name(parameter1, parameter2......); // All the values passed as parameter will be // allocated accordingly>
77. デフォルトのコンストラクターの目的は何ですか?
コンストラクターは、クラスのインスタンスの作成に役立ちます。または、クラスのオブジェクトを作成すると言えます。コンストラクターはオブジェクトの初期化中に呼び出されます。デフォルト コンストラクターは、パラメーターを受け入れないタイプのコンストラクターです。そのため、オブジェクトのプロパティに割り当てられた値はすべてデフォルト値とみなされます。
78. Javaのコピーコンストラクタって何が分かりますか?
コピー コンストラクターは、別のオブジェクトをパラメーターとして渡すタイプのコンストラクターです。両方のオブジェクトのプロパティが同じに見えるため、コンストラクターがオブジェクトのコピーを作成するように見えます。
79. プライベート コンストラクターはどこでどのように使用できますか?
プライベート コンストラクターは、サブクラス化を避けるために他のクラスでオブジェクトをインスタンス化したくない場合に使用されます。この例では、 use private コンストラクターが実装されていることがわかります。
例:
ジャワ // Java program to demonstrate implementation of Singleton // pattern using private constructors. import java.io.*; class GFG { static GFG instance = null; public int x = 10; // private constructor can't be accessed outside the // class private GFG() {} // Factory method to provide the users with instances static public GFG getInstance() { if (instance == null) instance = new GFG(); return instance; } } // Driver Class class Main { public static void main(String args[]) { GFG a = GFG.getInstance(); GFG b = GFG.getInstance(); a.x = a.x + 10; System.out.println('Value of a.x = ' + a.x); System.out.println('Value of b.x = ' + b.x); } }> 出力
Value of a.x = 20 Value of b.x = 20>
80. コンストラクターとメソッドの違いは何ですか?
Java コンストラクターはオブジェクトの初期化に使用されます。作成中に、オブジェクトの属性を設定するためにコンストラクターが呼び出されますが、オブジェクト間の基本的な違いは次のとおりです。
- コンストラクターはオブジェクトの作成時にのみ呼び出されますが、他のメソッドはオブジェクトの存続期間中に複数回呼び出すことができます。
- コンストラクターは何も返しませんが、他のメソッドは何でも返します。
- コンストラクターは初期状態の設定に使用されますが、メソッドは特定のアクションを実行するために使用されます。
81. インターフェースとは何ですか?
Java のインターフェイスは、リンクされたクラスのセットのコントラクトまたは同意を定義する静的な Final 変数と抽象メソッドのコレクションです。インターフェイスを実装するクラスは、特定のメソッドのセットを実装する必要があります。これはクラスが示さなければならない動作を指定しますが、実装方法の詳細は指定しません。
構文:
interface { // constant fields // methds that are abstract by default }>例:
ジャワ // Java Program to demonstrate Interface import java.io.*; interface Shape { double getArea(); double getPerimeter(); } class Circle implements Shape { private double radius; public Circle(double radius) { this.radius = radius; } public double getArea() { return Math.PI * radius * radius; } public double getPerimeter() { return 2 * Math.PI * radius; } } class GFG { public static void main(String[] args) { Circle circle = new Circle(5.0); System.out.println('Area of circle is ' + circle.getArea()); System.out.println('Perimeter of circle is' + circle.getPerimeter()); } }> 出力
Area of circle is 78.53981633974483 Perimeter of circle is31.41592653589793>
82. インターフェースの特徴をいくつか挙げてください。
Java プログラミング言語のインターフェイスは、クラスの動作を指定するために使用される抽象型として定義されます。 Java のインターフェイスは動作の設計図です。 Java インターフェイスには、静的定数と抽象メソッドが含まれています。
インターフェイスの機能は次のとおりです。
- このインターフェイスは、完全な抽象化を実現するのに役立ちます。
- Java で複数の継承を使用できるようにします。
- 1 つのクラスが 1 つのクラスしか拡張できない場合でも、どのクラスでも複数のインターフェイスを実装できます。
- 疎結合を実現するためにも使用されます。
83. マーカーインターフェイスとは何ですか?
インターフェイスは空のインターフェイス (フィールドやメソッドがない) として認識され、マーカー インターフェイスと呼ばれます。マーカー インターフェイスの例としては、シリアル化可能インターフェイス、クローン可能インターフェイス、リモート インターフェイスなどがあります。
84. 抽象クラスとインターフェイスの違いは何ですか?

抽象クラス | インターフェースクラス |
|---|---|
抽象メソッドと非抽象メソッドの両方が抽象クラス内に存在する場合があります。 | インターフェイスには抽象メソッドのみが含まれています。 |
抽象クラスは Final メソッドをサポートします。 | インターフェイス クラスは Final メソッドをサポートしていません。 |
多重継承は Abstract クラスではサポートされていません。 | 複数の継承はインターフェイス クラスでサポートされています。 |
Abstract キーワードは、Abstract クラスを宣言するために使用されます。 | Interface キーワードは、インターフェイス クラスを宣言するために使用されます。 |
| 伸ばす キーワードは、抽象クラスを拡張するために使用されます。 | 実装する キーワードはインターフェースを実装するために使用されます。 |
抽象クラスには、protected、private などのメンバーがあります。 | デフォルトでは、クラスのメンバーはすべて public です。 |
85. データのカプセル化とはどういう意味ですか?

データのカプセル化は、インターフェイスがバインドされるクラスの OOPS プロパティと特性の概念です。基本的に、データとそのデータを操作するメソッドを 1 つのユニット内にバンドルします。カプセル化は、クラスのインスタンス変数をプライベートとして宣言することによって実現されます。これは、クラス内でのみアクセスできることを意味します。
86. Java におけるカプセル化の利点は何ですか?
Java でのカプセル化の利点は次のとおりです。
- データの非表示: 実装の詳細を非表示にすることで、データ メンバーのアクセスを制限する方法です。カプセル化は、データを隠す方法も提供します。ユーザーはクラスの内部実装についてまったく知りません。
- 柔軟性の向上: 要件に応じて、クラスの変数を読み取り専用または書き込み専用にすることができます。
- 再利用性: カプセル化により再利用性も向上し、新しい要件に合わせて簡単に変更できます。
- コードのテストが簡単: コードの単体テストが簡単になります。
87. カプセル化の主な利点は何ですか?
Java におけるカプセル化の主な利点は、オブジェクトの内部状態を外部からの変更やアクセスから保護できることです。これは、クラスの実装の詳細を外部アクセスから隠し、クラスとの対話に使用できるパブリック インターフェイスのみを公開する方法です。主な利点は、オブジェクトの状態と動作を制御および管理する方法を提供し、同時にオブジェクトを変更や不正アクセスから保護できることです。
例:
ジャワ // Java Program to demonstrate use of Encapsulation import java.io.*; class Person { private String Name; private int age; public String getName() { return Name; } public void setName(String Name) { this.Name = Name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } // Driver class class GFG { // main function public static void main(String[] args) { Person p = new Person(); p.setName('Rohan'); p.setAge(29); System.out.println('Name is ' + p.getName()); System.out.println('Age is ' + p.getAge()); } }> 出力
Name is Rohan Age is 29>
88. 集約とはどういう意味ですか?

集約は、2 つのクラス間の関係に関連する用語であり、has-a 関係として最も適切に説明されます。この種類は、関連付けの最も特殊なバージョンです。一方向の関連付けとは、一方向の関係であることを意味します。これには別のクラスへの参照が含まれており、そのクラスの所有権があると言われます。
89. OOPs Java における「IS-A」関係とは何ですか?
「IS-A」は、OOPs Java における関係の一種で、あるクラスが別のクラスを継承します。
90. 継承を定義する。
サブクラスに属するオブジェクトが、スーパークラスから親オブジェクトのすべてのプロパティと動作を取得することを、継承と呼びます。クラス内のクラスはサブクラスと呼ばれ、後者はスーパークラスと呼ばれます。サブクラスまたは子クラスは固有クラスであるのに対し、スーパークラスまたは親クラスは汎用クラスであると言われます。継承によりコードの再利用が可能になります。
91. Java の継承にはどのような種類がありますか?
継承は、子クラスがスーパー クラスまたは親クラスの機能を継承できる方法です。 Java では、継承には 4 つのタイプがあります。
- 単一の継承: 子クラスまたはサブクラスが 1 つのスーパークラスのみを拡張する場合、それは単一継承であることが知られています。単一親クラスのプロパティは子クラスに継承されます。
- 多レベルの継承: 子クラスまたはサブクラスが他のサブクラスを拡張すると、マルチレベル継承と呼ばれる継承の階層が作成されます。言い換えれば、あるサブクラスが別のサブクラスの親クラスになります。
- 階層的な継承: 複数のサブクラスが同じ親クラスから派生する場合、階層継承と呼ばれます。言い換えれば、単一の親を持つクラスには多くのサブクラスがあります。
- 多重継承: 子クラスが複数の親クラスから継承することは、多重継承と呼ばれます。 Java では、クラスではなくインターフェイスの多重継承のみがサポートされます。
92. 多重継承とは何ですか? Javaではサポートされていますか?
多重継承として知られるオブジェクト指向の概念のコンポーネントにより、クラスは多くの親クラスからプロパティを継承できます。同じシグネチャを持つメソッドがスーパークラスとサブクラスの両方に存在する場合、問題が発生します。メソッドの呼び出し元は、どのクラス メソッドを呼び出す必要があるか、またはどのクラス メソッドを優先する必要があるかをコンパイラに指定することはできません。
注記: Java は多重継承をサポートしていません
例:
ジャワ // Java Program to show multiple Inheritance import java.io.*; interface Animal { void eat(); } interface Mammal { void drink(); } class Dog implements Animal, Mammal { public void eat() { System.out.println('Eating'); } public void drink() { System.out.println('Drinking'); } void bark() { System.out.println('Barking'); } } class GFG { public static void main(String[] args) { Dog d = new Dog(); d.eat(); d.drink(); d.bark(); } }> 出力
Eating Drinking Barking>
93. C++ の継承は Java とどう違うのですか?
C++ における継承 | Java での継承 |
|---|---|
| C++ では、ユーザーは複数のクラスを継承できます。 | Java は多重継承をサポートしていません。 |
| クラスが C++ で作成される場合、そのクラスはオブジェクト クラスを継承せず、独自に存在します。 | すべてのクラスがオブジェクト クラスから何らかの方法で継承するため、Java は常に単一の継承を持つと言われます。 |
94. 継承の使用に制限はありますか?
はい、Java での継承の使用には制限があります。継承によりスーパー クラスとインターフェイスからすべてを継承できるため、サブクラスがクラスター化されすぎて、特定の状況で動的オーバーライドまたは動的オーバーロードが行われるときにエラーが発生しやすくなるからです。
95. 継承は OOP の概念としてよく使われていますが、合成ほど有利ではありません。説明する。
継承はオブジェクト指向プログラミング (OOP) の一般的な概念であり、クラスは親クラスまたはスーパークラスと呼ばれる他のクラスからプロパティとメソッドを継承できます。一方、Composition では、クラスには、パーツまたはコンポーネントと呼ばれることが多いメンバー変数として、別のクラスのインスタンスを含めることができます。以下に、合成が継承よりも有利である理由をいくつか示します。
- 密結合: スーパークラスに変更が加えられると、その変更はそのすべての子クラスまたはサブクラスの動作に影響を与える可能性があります。この問題によりコードの柔軟性が低下し、メンテナンス中に問題も発生します。この問題は、クラス間の密結合にもつながります。
- 脆弱な基本クラスの問題: 基本クラスへの変更により、その派生クラスの機能が損なわれる可能性がある場合。この問題により、新しい機能の追加や既存の機能の変更が困難になる可能性があります。この問題は、Fragile Base クラス問題として知られています。
- 限定的な再利用: Java での継承により、コードの再利用が制限されたり、コードの重複が発生したりする可能性があります。サブクラスはスーパークラスのすべてのプロパティとメソッドを継承するため、必要のない不要なコードが作成される場合があります。これにより、コードベースの保守性が低下します。
96. 協会とは何ですか?
関連とは、オブジェクトを通じて確立された 2 つの別個のクラス間の関係です。 Has-Aの関係性を表しています。
97. 集約とはどういう意味ですか?
構成は、2 つのエンティティが相互に高度に依存する、制限された形式の集約です。それが表しています 一部の 関係。
98. Java の構成は何ですか?
構成は、子供が 独立して存在することはできない 親の。例えば人間の心ですが、心は人間と切り離して存在しているわけではありません。
99. 構成と集約の違いを述べてください。
集計 | 構成 |
|---|---|
オブジェクト間に関係があることを定義します | それは関係の一部を表します |
オブジェクトは互いに独立しています。 | オブジェクトは相互に依存しています。 |
塗りつぶされたダイヤモンドを使用してそれを表現します。 | 空のダイヤモンドを使用してそれを表します。 |
子オブジェクトには寿命がありません。 | 子オブジェクトには寿命があります。 |
100. コンストラクターは継承できますか?
いいえ、コンストラクターを継承することはできません。
101. ポリモーフィズムとは何ですか?
ポリモーフィズムは、複数の形式を取る機能として定義されます。これには、コンパイル時ポリモーフィズムとメソッド オーバーロード (コンパイル時に呼び出される関数) の 2 つのタイプがあります。たとえば、クラス「エリア」を考えてみましょう。パラメータの数に基づいて、正方形、三角形、または円の面積を計算できます。実行時のポリモーフィズムまたはメソッドのオーバーライド - 実行時にリンクします。クラス内のメソッドは、親クラスのメソッドをオーバーライドします。
102. ランタイムポリモーフィズムまたは動的メソッドディスパッチとは何ですか?
動的メソッドディスパッチは、実行時のメソッドオーバーライドの解決メカニズムです。メソッドのオーバーライドとは、サブクラスのメソッドがスーパークラスのメソッドと同じ名前、パラメーター、戻り値の型を持つものです。オーバーライドされたメソッドがスーパークラス参照を通じて呼び出される場合、Java は呼び出し時に参照されているオブジェクトの型に基づいて、そのメソッドのどのバージョン (スーパークラスまたはサブクラス) を実行するかを決定します。したがって、決定は実行時に行われます。これは動的メソッドディスパッチと呼ばれます。
103. メソッドのオーバーライドとは何ですか?
メソッドのオーバーライド (実行時ポリモーフィズムとも呼ばれます) は、子クラスに親クラスと同じメソッドが含まれるメソッドです。たとえば、親クラスには「gfg()」という名前のメソッドがあります。メソッド gfg() がサブクラスに再度定義されます。したがって、サブクラスで gfg() が呼び出されると、クラス ID 内のメソッドが実行されます。ここでは、クラス内の gfg() が外部のメソッドをオーバーライドしています。
104. メソッドのオーバーロードとは何ですか?

メソッドのオーバーライドは、Java で実行時のポリモーフィズムを実現する方法です。メソッドのオーバーライドは、親クラスの 1 つによってすでに提供されているメソッドの特定の実装を子クラスが提供できるようにする機能です。子クラスのメソッドが親クラスのメソッドと同じ名前、同じパラメータまたはシグネチャ、および同じ戻り値の型 (またはサブタイプ) を持つ場合、サブクラスのメソッドはそのメソッドをオーバーライドするといいます。スーパークラス。
105. 静的メソッドをオーバーライドできますか?
いいえ、静的メソッドはオブジェクトではなくクラスの一部であるため、オーバーライドできません。
106. オーバーロードされたメソッドをオーバーライドできますか?
はい、オーバーロードされたメソッドはコンパイラにとってはまったく異なるメソッドであるためです。オーバーライドはまったく同じではありません。どのメソッドを呼び出すかについての決定は、実行時に延期されます。
107. main() メソッドをオーバーロードできますか?
はい、Java では、メイン メソッドをオーバーロードして、事前定義された呼び出しメソッドを利用してメイン メソッドを呼び出すことができます。
108. メソッドのオーバーロードとメソッドのオーバーライドとは何ですか?
メソッドのオーバーロード: コンパイル時ポリモーフィズムとも呼ばれます。メソッドのオーバーロードでは、2 つ以上のメソッドが異なるシグネチャを持つ同じクラスで共有されます。
例:
ジャワ // Java Program to demonstrate use of Method Overloading import java.io.*; class GFG { static int multiply(int a, int b) { return a * b; } static int multiply(int a, int b, int c) { return a * b * c; } static int multiply(int a, int b, int c, int d) { return a * b * c * d; } public static void main(String[] args) { System.out.println('multiply() with 2 parameters'); System.out.println(multiply(4, 5)); System.out.println('multiply() with 3 parameters'); System.out.println(multiply(2, 3, 4)); System.out.println('multiply() with 4 parameters'); System.out.println(multiply(2, 3, 4, 1)); } }> 出力
multiply() with 2 parameters 20 multiply() with 3 parameters 24 multiply() with 4 parameters 24>
メソッドのオーバーライド: メソッドのオーバーライドは、親クラスまたはスーパークラスですでに定義されているメソッドの実装をサブクラスが提供できる場合に発生します。戻り値の型、名前、および引数は、スーパークラスのメソッドと同様である必要があります。
例:
ジャワ // Java Program to demonstrate use of Method Overriding import java.io.*; class Vehicle { void drive() { System.out.println('drive() method of base class'); System.out.println('driving the Car.'); } } class Car extends Vehicle { void drive() { System.out.println( 'drive() method of derived class'); System.out.println('Car is driving.'); } } class GFG { public static void main(String[] args) { Car c1 = new Car(); Vehicle v1 = new Vehicle(); c1.drive(); v1.drive(); Vehicle vehicle = new Car(); // drive() method of Vehicle class is overridden by // Car class drive() vehicle.drive(); } }> 出力
drive() method of derived class Car is driving. drive() method of base class driving the Car. drive() method of derived class Car is driving.>
メソッドのオーバーロード | メソッドのオーバーライド |
|---|---|
2 つまたは複数のメソッドが同じクラス内にあり、パラメーターは異なりますが、名前は同じである場合。 | サブクラスが、親クラスですでに定義されているメソッドの独自の実装を提供する場合。 |
メソッドのオーバーロードは、同じクラス内、またはサブクラスまたは親クラス間でのみ発生します。 | メソッドのオーバーライドはサブクラスでのみ発生します。 |
エラーが発生すると、プログラムのコンパイル時に検出されます。 | エラーが発生すると、プログラムの実行時に捕捉されます。 |
コンパイル時のポリモーフィズムの例。 | 実行時のポリモーフィズムの例。 |
メソッドのオーバーロードには継承が必要な場合と必要ない場合があります。 | メソッドのオーバーライドには常に継承が必要です。 |
それはクラス内で起こります。 | これは、継承関係のある 2 つのクラスで実行されます。 |
109. プライベート メソッドをオーバーライドできますか?
Java ではプライベート メソッドをオーバーライドすることはできません。メソッドのオーバーライドでは、親クラスのメソッドの代わりにサブクラスのメソッドが実装されます。プライベート メソッドは、それが宣言されているクラス内でのみアクセスできます。このメソッドは他のクラスからは見えず、アクセスできないため、オーバーライドできません。
110. サブクラスでオーバーライドされたメソッドのスコープを変更できますか?
Java では、オーバーライドされたメソッドのスコープを変更することはできません。サブクラス メソッドのスコープは、スーパークラス メソッドのオーバーライドされたメソッドのスコープと同じか、それより広くなければなりません。たとえば、サブクラスでオーバーライドされたメソッドは、パブリック スコープを持つことができますが、スーパークラスでオーバーライドされたメソッドがパブリック スコープを持つ場合は、protected やdefault などのよりアクセスしやすいスコープを持つこともできます。ただし、プライベートのような排他的なスコープを持つことはできません。
111. サブクラスでオーバーライドするときに、スーパークラス メソッドの throws 節を変更できますか?
スーパークラス メソッドの throws 節は、いくつかの制限付きで変更できます。サブクラスでオーバーライドする際に、スーパークラス メソッドの throws 節を変更できます。スーパークラス メソッドが例外を宣言していない場合、サブクラスのオーバーライドされたメソッドは未チェック例外のみを指定できます。スーパークラス メソッドが例外を宣言する場合、サブクラス メソッドは同じ例外を宣言することも、サブクラス例外を宣言することも、例外をまったく宣言しないこともできます。ただし、サブクラス メソッドは、スーパークラス メソッドで宣言された例外よりも広い親例外を宣言できません。
112. Java で仮想関数を使用できますか?
はい、Java は仮想関数をサポートしています。関数はデフォルトでは仮想ですが、final キーワードを使用して非仮想にすることができます。
113. 抽象化とは何ですか?
抽象化とは、背景の詳細を含めずに重要な機能を表現する行為を指します。詳細情報や実装は非表示となります。抽象化の最も一般的な例は車です。私たちはエンジンをオンにし、加速して移動する方法を知っていますが、エンジンの動作方法とその内部コンポーネントは一般ユーザーには隠された複雑なロジックです。これは通常、複雑さに対処するために行われます。
114. 抽象クラスとは何ですか?
抽象として宣言されたクラスはインスタンス化できません。つまり、オブジェクトを作成できません。抽象メソッドが含まれる場合と含まれない場合がありますが、クラスに少なくとも 1 つの抽象メソッドがある場合は、そのクラスを抽象として宣言する必要があります。
抽象メソッドを使用した抽象クラスの例:
ジャワ // Java Program to implement // abstract method import java.io.*; // Abstract class abstract class Fruits { abstract void run(); } // Driver Class class Apple extends Fruits { void run() { System.out.println('Abstract class example'); } // main method public static void main(String args[]) { Fruits obj = new Apple(); obj.run(); } }> 115. 抽象メソッドが使用される場合?
抽象メソッドは、メソッドを使用したいが、子クラスに実装を決定させたい場合に使用されます。その場合、親クラスで抽象メソッドを使用します。
116. 基本クラスが Serializable インターフェイスを実装している場合、子クラスでのシリアル化を回避するにはどうすればよいですか?
子クラスでのシリアル化は、基本クラスが Serializable インターフェイスを実装している場合、writeObject() メソッドを定義して NotSerializableException() をスローすることで回避できます。
117. Java のコレクション フレームワークとは何ですか?
コレクションは Java のオブジェクトの単位です。コレクション フレームワークは、さまざまな方法でオブジェクトのコレクションを表現および操作するために使用される Java のインターフェイスとクラスのセットです。コレクション フレームワークには、クラス (ArrayList、Vector、LinkedList、PriorityQueue、TreeSet) と複数のインターフェイス (Set、List、Queue、Deque) が含まれており、すべてのインターフェイスは特定の種類のデータを格納するために使用されます。
118. コレクション フレームワークで使用されるさまざまなインターフェイスについて説明します。
コレクションフレームワークの実装
- 収集インターフェース
- リストインターフェース
- インターフェースの設定
- キューインターフェイス
- そしてインターフェース
- マップインターフェイス
コレクションインターフェイス: Collection は、java.util.Collection を使用してインポートできる主要なインターフェイスです。
構文:
public interface Collection extends iterable>
119. Java で ArrayList を同期するにはどうすればよいですか?
ArrayList は、以下に示す 2 つの方法を使用して同期できます。
- Collections.synchronizedList() の使用
- CopyOnWriteArrayList の使用
Collections.synchronizedList() の使用:
public static List synchronizedList(List list)>
CopyOnWriteArrayList の使用:
- 空のリストを作成します。
- List インターフェースを実装します。
- これは ArrayList のスレッドセーフなバリアントです
- T はジェネリックを表します
120. Java に Vector (同期されている) があるのに、同期された ArrayList が必要なのはなぜですか?
特定の理由により、Vector がある場合でも ArrayList が必要になります。
- ArrayList は Vector よりも高速です。
- ArrayList はマルチスレッドをサポートしますが、Vector はシングルスレッドの使用のみをサポートします。
- Vector はシングル スレッドをサポートし、個々の操作は安全性が低く、同期に時間がかかるため、ArrayList を使用する方が安全です。
- Java では、同期された性質のため、ベクトルは時代遅れであると考えられています。
121. 汎用配列を作成できないのはなぜですか?
汎用配列は作成できません。 配列 運ぶ 実行時の要素の型情報。これにより、要素の型が類似していない場合、実行時に「ArrayStoreException」がスローされます。ジェネリックスの型情報はコンパイル時に Type Erasure によって消去されるため、配列ストアのチェックは失敗するはずの場所でパスしてしまいます。
122. 連続したメモリ位置は通常、実際の値を配列に格納するために使用されますが、ArrayList には使用されません。説明する。
配列の要素は連続したメモリ位置に格納されます。つまり、各要素は配列内の要素に基づいて個別のブロックに格納されます。配列の要素は連続した場所に格納されるため、要素の位置に基づいて要素アドレスを計算できるため、インデックスによって要素にアクセスするのは比較的簡単です。ただし、Java は ArrayList を動的配列として実装します。つまり、要素が削除または追加されるとサイズが変化する可能性があります。この動的な性質に対応するために、ArrayList 要素は連続したメモリ位置には格納されません。代わりに、ArrayList は、基になる配列が必要に応じてより大きなサイズに拡張され、要素が新しい場所にコピーされる拡張可能配列として知られるメソッドを利用します。 ArrayList は動的なサイズを持ち、その要素は連続したメモリ位置に格納されませんが、配列のサイズは固定されており、その要素はそこに格納されます。
123. ArrayList を Array に、Array を ArrayList に変換する方法を説明します。
リストから ArrayList への変換
List を ArrayList に変換するには複数の方法があります

プログラマは、Arrays クラスの asList() メソッドを使用して、Array を ArrayList に変換できます。これは、List オブジェクトを受け入れる Arrays クラスの静的メソッドです。
構文:
Arrays.asList(item)>
例:
ジャワ // Java program to demonstrate conversion of // Array to ArrayList of fixed-size. import java.util.*; // Driver Class class GFG { // Main Function public static void main(String[] args) { String[] temp = { 'Abc', 'Def', 'Ghi', 'Jkl' }; // Conversion of array to ArrayList // using Arrays.asList List conv = Arrays.asList(temp); System.out.println(conv); } }> 出力
[Abc, Def, Ghi, Jkl]>
ArrayList から Array への変換

Java プログラマは ArrayList を次のように変換できます。
構文:
List_object.toArray(new String[List_object.size()])>
例:
ジャワ // Java program to demonstrate working of // Objectp[] toArray() import java.io.*; import java.util.List; import java.util.ArrayList; // Driver Class class GFG { // Main Function public static void main(String[] args) { // List declared List<Integer> arr = new ArrayList<Integer>(); arr.add(1); arr.add(2); arr.add(3); arr.add(2); arr.add(1); // Conversion Object[] objects = arr.toArray(); // Printing array of objects for (Object obj : objects) System.out.print(obj + ' '); } }> 出力
1 2 3 2 1>
124. ArrayList のサイズはどのようにして動的に増加しますか?また、それが内部でどのように実装されているかについても説明します。
ArrayList は配列ベースの性質があるため、要素に対して常に十分なスペースが確保されるように、サイズが動的に増加します。 ArrayList 要素が最初に作成されるとき、デフォルトの容量は約 10 ~ 16 要素であり、基本的に Java のバージョンによって異なります。元の配列の容量がいっぱいになると、ArrayList 要素は元の配列から新しい配列にコピーされます。 ArrayList のサイズが動的に増加すると、クラスはより大きなサイズの新しい配列を作成し、古い配列のすべての要素を新しい配列にコピーします。現在、新しい配列の参照は内部で使用されます。配列を動的に拡大するこのプロセスは、サイズ変更として知られています。
125. Java のベクトルとは何ですか?
Java のベクターも同様で、内部に複数の要素を格納できます。ベクターは、以下に示す特定のルールに従います。
- ベクターは Java.util.Vector を使用してインポートできます。
- ベクターは、挿入される要素に応じてベクターのサイズが増減するため、動的配列を使用して実装されます。
- インデックス番号を使用した Vector の要素。
- ベクトルは本質的に同期されており、単一のスレッドのみを使用することを意味します (特定の時間に 1 つのプロセスのみが実行されます)。
- ベクターには、コレクション フレームワークの一部ではない多くのメソッドが含まれています。
構文:
Vector gfg = new Vector(size, increment);>
126. Java ArrayList を読み取り専用にするにはどうすればよいですか?
ArrayList は、Collections.unmodifiableList() メソッドを使用して Collections によって提供されるメソッドを使用してのみ準備できます。
構文:
array_readonly = Collections.unmodifiableList(ArrayList);>
例:
ジャワ // Java program to demonstrate // unmodifiableList() method import java.util.*; public class Main { public static void main(String[] argv) throws Exception { try { // creating object of ArrayList <Character> ArrayList<Character> temp = new ArrayList<Character>(); // populate the list temp.add('X'); temp.add('Y'); temp.add('Z'); // printing the list System.out.println('Initial list: ' + temp); // getting readonly list // using unmodifiableList() method List<Character> new_array = Collections.unmodifiableList(temp); // printing the list System.out.println('ReadOnly ArrayList: ' + new_array); // Adding element to new Collection System.out.println('
If add element in ' + ' the ReadOnly ArrayList'); new_array.add('A'); } catch (UnsupportedOperationException e) { System.out.println('Exception is thrown : ' + e); } } }> 出力
Initial list: [X, Y, Z] ReadOnly ArrayList: [X, Y, Z] If add element in the ReadOnly ArrayList Exception is thrown : java.lang.UnsupportedOperationException>
127. Java のプライオリティ キューとは何ですか?

プライオリティ キューは、通常のキューまたはスタック データ構造に似た抽象データ型です。要素に格納される要素は、低から高まで定義された優先度に依存します。 PriorityQueue は優先度ヒープに基づいています。
構文:
ジャワ // Java program to demonstrate the // working of PriorityQueue import java.util.*; class PriorityQueueDemo { // Main Method public static void main(String args[]) { // Creating empty priority queue PriorityQueue<Integer> var1 = new PriorityQueue<Integer>(); // Adding items to the pQueue using add() var1.add(10); var1.add(20); var1.add(15); // Printing the top element of PriorityQueue System.out.println(var1.peek()); } }> 出力
10>
128. LinkedList クラスについて説明します。
LinkedList クラスは、二重リンク リストを使用して要素を格納する Java です。 AbstractList クラスを継承し、List インターフェイスと Deque インターフェイスを実装します。 LinkedList クラスのプロパティを以下に示します。
- LinkedList クラスは非同期です。
- 挿入順序を維持します。
- リスト、スタック、またはキューとして使用できます。
構文:
LinkedList list_name=new LinkedList();>
129. Java の Stack クラスとは何ですか?また、それによって提供されるさまざまなメソッドは何ですか?
Java の Stack クラスは、後入れ先出しデータ構造を実装する LIFO データ構造です。これは Vector クラスから派生していますが、スタックに固有の関数があります。 Java の Stack クラスは次のメソッドを提供します。
- ピーク(): スタックから一番上の項目を削除せずに返します
- 空の(): スタックが空の場合は true を返し、それ以外の場合は false を返します。
- 押す(): アイテムをスタックの一番上にプッシュします
- ポップ(): スタックから一番上の項目を削除して返します
- 検索(): スタックの最上位からのオブジェクトの 1 を基準とした位置を返します。オブジェクトがスタックにない場合は、-1 を返します。
130. Java Collections フレームワークの Set とは何ですか?また、そのさまざまな実装を列挙しますか?
セットは、重複した要素を格納しないコレクションです。要素の順序は維持されません。 Java コレクション フレームワークは、次のような Set インターフェイスの実装をいくつか提供します。
- ハッシュセット: Java の HashSet は要素を has テーブルに格納し、より高速な検索とより高速な挿入を提供します。 HashSet は順序付けされていません。
- リンクされたハッシュセット: LinkedHashSet は、要素の挿入順序を維持する HashSet の実装です。
- ツリーセット: TreeSet は、要素の自然な順序、または作成時に提供されるカスタム コンパレータによって決定される並べ替え順序で要素を格納します。
131. Java の HashSet クラスとは何ですか?また、要素はどのように格納されますか?
HashSet クラスは、Java Collections Framework の Set インターフェイスを実装しており、HashSet クラスのメンバーです。重複する値とは異なり、個別の要素のコレクションが保存されます。この実装では、各要素はハッシュ関数を使用して配列内のインデックスにマップされ、インデックスは要素にすばやくアクセスするために使用されます。入力要素に基づいて、要素が格納される配列内の要素のインデックスを生成します。ハッシュ関数が要素をバケット間で適切に分散すると仮定すると、HashSet クラスは基本的な操作 (追加、削除、格納、サイズ変更) に対して一定時間のパフォーマンスを提供します。
132. Java Collections Framework の LinkedHashSet とは何ですか?
LinkedHashSet は、すべての要素にわたって二重リンクされたリストによって維持されるハッシュセットの順序付きバージョンです。反復順序が必要な場合に非常に役立ちます。 LinkedHashSet での反復中に、要素は挿入されたのと同じ順序で返されます。
構文:
LinkedHashSet hs = new LinkedHashSet();>
例:
ジャワ // Java Program to implement // LinkedHashSet import java.io.*; import java.util.*; // Driver Class class GFG { // Main Function public static void main(String[] args) { // LinkedHashSet declared LinkedHashSet<Integer> hs = new LinkedHashSet<Integer>(); // Add elements in HashSet hs.add(1); hs.add(2); hs.add(5); hs.add(3); // Print values System.out.println('Values:' + hs); } }> 出力
Values:[1, 2, 5, 3]>
133. Java の Map インターフェイスとは何ですか?

マップ インターフェイスは Java コレクションに存在し、Java.util パッケージで使用できます。マップ インターフェイスは、キーと値の形式で値をマッピングするために使用されます。マップにはすべての一意のキーが含まれています。また、containsKey()、contains value() など、それに関連付けられたメソッドも提供します。
以下に示すように、マップ インターフェイスには複数のタイプのマップがあります。
- ソートマップ
- ツリーマップ
- ハッシュマップ
- リンクされたハッシュマップ
134. Javaでツリーマップを説明する
TreeMap は、キーと値のペアの形式でデータを格納するマップのタイプです。赤黒ツリーを使用して実装されます。ツリーマップの特徴は次のとおりです。
- ユニークな要素だけが含まれています。
- NULL キーを含めることはできません
- 複数の NULL 値を含めることができます。
- 非同期です。
- 昇順を維持します。
135. EnumSetとは何ですか?
EnumSet は、列挙型で使用するための Set インターフェイスの特殊な実装です。 EnumSet のいくつかの機能は次のとおりです。
- 非同期です。
- HashSet よりも高速です。
- EnumSet 内のすべての要素は、単一の列挙型に由来する必要があります。
- null オブジェクトは許可されず、例外として NullPointerException がスローされます。
- フェイルセーフ反復子を使用します。
構文:
public abstract class EnumSet>
パラメータ: E は要素を指定します。
136. BlockingQueueとは何ですか?

ブロッキング キューは、要素の取得および削除中にキューが空でなくなるまで待機し、要素の追加中にキュー内のスペースが使用可能になるまで待機する操作をサポートするキューです。
構文:
public interface BlockingQueue extends Queue>
パラメーター: E は、コレクションに格納されている要素のタイプです。
137. Java の ConcurrentHashMap とは何ですか?それを実装していますか?
ConcurrentHashMap は Hashtable を使用して実装されます。
構文:
public class ConcurrentHashMap extends AbstractMap implements ConcurrentMap, Serializable>
パラメーター : K はキーのオブジェクト タイプ、V は値のオブジェクト タイプです。
138. マップキーとして任意のクラスを使用できますか?
はい、以下に示す特定の事前定義ルールに従っている場合は、任意のクラスをマップ キーとして使用できます。
- equals() メソッドをオーバーライドするクラスは hashCode() メソッドもオーバーライドする必要があります
- concurrentHashMap クラスはスレッドセーフです。
- ConcurrentHashMap のデフォルトの同時実行レベルは 16 です。
- ConcurrentHashMap に null オブジェクトをキーまたは値として挿入することはできません。
139. イテレータとは何ですか?

Iterator インターフェイスは、Java のコレクションを反復処理するメソッドを提供します。 Iterator は、Java Collections Framework の Enumeration に代わるものです。 _iterator()_ メソッドを使用してコレクションからイテレータ インスタンスを取得できます。また、呼び出し元が反復中に基礎となるコレクションから要素を削除することもできます。
140. 列挙とは何ですか?
列挙型はユーザー定義のデータ型です。これは主に整数定数に名前を割り当てるために使用され、名前によってプログラムが読みやすく、保守しやすくなります。 enum の主な目的は、ユーザー定義のデータ型を定義することです。
例:
// A simple enum example where enum is declared // outside any class (Note enum keyword instead of // class keyword) enum Color { RED, GREEN, BLUE; }>141. コレクションとコレクションの違いは何ですか?
コレクション | コレクション |
|---|---|
コレクションはインターフェイスです。 | コレクションはクラスです。 |
データ構造の標準機能を提供します。 | コレクション要素を並べ替えて同期するためです。 |
データ構造に使用できるメソッドを提供します。 | さまざまな操作に使用できる静的メソッドを提供します。 |
142. Java での Array と ArrayList の区別。
配列 | 配列リスト |
|---|---|
単次元または多次元 | 一次元 |
反復に使用される for および for each | ここでイテレータは、riverArrayList を走査するために使用されます。 |
length キーワードは配列のサイズを返します。 | size() メソッドは、ArrayList のサイズを計算するために使用されます。 |
配列は固定サイズです。 フィズバズ ジャワ | ArrayList のサイズは動的であり、必要に応じてサイズを増減できます。 |
上記のように固定サイズで見ると高速です | 動的な性質があるため、比較的遅いです |
プリミティブ データ型は、可能性の低いオブジェクトに直接格納される可能性があります。 | プリミティブ データ型は、可能性の低い配列に直接追加されるのではなく、オートボックス化とアンボックス化を利用して間接的に追加されます。 |
ここでは追加できないため、タイプは安全ではありません。 | ここに追加できるため、ArrayList をタイプセーフにできます。 |
代入演算子は目的のみを果たします | ここでは、add() メソッドとして知られる特別なメソッドが使用されます。 |
143. Javaの配列とコレクションの違いは何ですか?
配列 | コレクション |
|---|---|
Java の配列は固定サイズです。 | Java のコレクションには動的なサイズがあります。 |
配列では、要素は連続したメモリ位置に格納されます。 | コレクションでは、要素は必ずしも連続したメモリ位置に格納されるわけではありません。 |
オブジェクトとプリミティブ データ型は配列に格納できます。 | オブジェクトはコレクションにのみ保存できます。 |
配列のサイズを変更するには手動操作が必要です。 | コレクション内のサイズ変更は自動的に処理されます。 |
配列には基本的な操作方法があります。 | コレクションには、操作と反復のための高度なメソッドがあります。 |
配列は Java の初期から利用可能です。 | コレクションは Java 1.2 で導入されました。 |
144. ArrayList と LinkedList の違い。
配列リスト | リンクリスト |
|---|---|
ArrayList は拡張可能な Array として実装されます。 | LinkedList は二重リンク リストとして実装されます。 |
ArrayList では、要素は連続したメモリ位置に格納されます。 | LinkedList 要素は、各要素が次の要素と前の要素への参照を持っているため、不連続なメモリ位置に格納されます。 |
ArrayList はランダム アクセスの方が高速です。 | LinkedList は挿入および削除操作が高速です |
ArrayList はメモリ効率が高くなります。 | LinkedList はメモリ効率が低い |
ArrayLists 配列サイズを維持するため、より多くのメモリを使用します。 | LinkedList は要素への参照のみを持つため、メモリの使用量が少なくなります |
ArrayList では検索操作が高速になります。 | LinkedList では検索操作が遅くなります |
145. Java で ArrayList と Vector を区別します。
配列リスト | ベクター |
|---|---|
ArrayList は拡張可能な配列として実装されます。 | ベクトルは拡張可能な配列として実装されます。 |
ArrayList は同期されていません。 | ベクトルは同期されています。 |
ArrayList は非同時操作の方が高速です。 | ベクトルは、同期のオーバーヘッドが追加されるため、非同時操作では遅くなります。 |
ArrayList は Java 1.2 で導入されました。 | Vector は JDK 1.0 で導入されました。 |
シングルスレッド環境での使用をお勧めします。 | ベクターはマルチスレッド環境での使用が推奨されます。 |
ArrayList のデフォルトの初期容量は 10 です。 | Vectors では、デフォルトの初期容量は 10 ですが、デフォルトの増分はサイズの 2 倍です。 |
ArrayList のパフォーマンスは高いです。 | ベクトルのパフォーマンスが低い。 |
146. Iterator と ListIterator の違いは何ですか?
イテレーター | リスト反復子 |
|---|---|
コレクション内に存在する要素は前方向にのみトラバースできます。 | コレクション内に存在する要素を前方向と逆方向の両方にトラバースできます。 |
マップ、リスト、セットをトラバースするために使用されます。 | List のみを走査でき、他の 2 つは走査できません。 |
イテレータを使用してインデックスを取得できない | nextIndex() やpreviousIndex() のようなメソッドがあり、List を走査しながらいつでも要素のインデックスを取得できます。 |
コレクションに存在する要素を変更または置換することはできません | set(E e) を使用して要素を変更または置換できます。 |
要素を追加できず、ConcurrentModificationException もスローされます。 | いつでもコレクションに要素を簡単に追加できます。 |
Iterator の特定のメソッドには、next()、remove()、および hasNext() があります。 | ListIterator の特定のメソッドは、next()、previous()、hasNext()、hasPrevious()、add(E e) です。 |
147. HashMap と HashTable を区別します。
ハッシュマップ | ハッシュ表 |
|---|---|
HashMap が同期されていません | ハッシュテーブルは同期されています |
1 つのキーは NULL 値にすることができます | NULL 値は許可されません |
イテレータは HashMap を走査するために使用されます。 | IteratorとEnumertarの両方を使用できます |
HashMap の方が高速です。 | HashTable は HashMap に比べて低速です。 |
148. イテレータと列挙の違いは何ですか?
イテレーター | 列挙 |
|---|---|
Iterator は、レガシー要素と非レガシー要素の両方をトラバースできます。 | 列挙はレガシー要素のみをトラバースできます。 |
イテレータはフェイルファストです。 | 列挙はフェイルファストではありません。 |
イテレータは遅いです。 | 列挙が高速になります。 |
Iterator は、コレクションを走査しながら削除操作を実行できます。 | 列挙型は、コレクションに対してトラバース操作のみを実行できます。 |
149. 比較可能なものと比較可能なものの違いは何ですか?
匹敵します | コンパレータ |
|---|---|
インターフェイスは java.lang パッケージに存在します。 | インターフェイスは java.util パッケージに存在します。 |
要素を並べ替えるためのcompareTo()メソッドを提供します。 | 要素をソートするための Compare() メソッドを提供します。 |
単一の並べ替えシーケンスを提供します。 | 複数の並べ替えシーケンスが提供されます。 |
並べ替えのロジックは、並べ替えるオブジェクトと同じクラス内にある必要があります。 | オブジェクトのさまざまな属性に基づいてさまざまな並べ替えを作成するには、並べ替えのロジックを別のクラスに含める必要があります。 |
このメソッドは、固定された並べ替え順序に従ってデータを並べ替えます。 | このメソッドは、カスタマイズされた並べ替え順序に従ってデータを並べ替えます。 |
元のクラスに影響します。 | 元のクラスには影響しません。 |
API では、Calendar、Wrapper クラス、Date、および String によって頻繁に実装されます。 | これは、サードパーティ クラスのインスタンスを並べ替えるために実装されています。 |
150. セットとマップの違いは何ですか?
セット | 地図 |
|---|---|
Set インターフェイスは java.util パッケージを使用して実装されます。 | マップは java.util パッケージを使用して実装されます。 |
コレクション インターフェイスを拡張できます。 | コレクション インターフェイスは拡張されません。 |
重複した値は許可されません。 | 値の重複が許可されます。 |
このセットでは 1 つの null 値のみを並べ替えることができます。 | マップでは複数の null 値を並べ替えることができます。 |
Javaの中級者面接の質問
151. FailFast イテレータと FailSafe イテレータをそれぞれの例とともに説明します。
FailFast イテレータは、 ConcurrentModificationException イテレータの使用中に基になるコレクションが変更されたことが検出された場合。これは、Java Collections Framework のイテレータのデフォルトの動作です。たとえば、HashMap のイテレータは FailFast です。
例:
ジャワ // Java Program to demonstrate FailFast iterator import java.io.*; import java.util.HashMap; import java.util.Iterator; import java.util.Map; class GFG { public static void main(String[] args) { HashMap<Integer, String> map = new HashMap<>(); map.put(1, 'one'); map.put(2, 'two'); Iterator<Map.Entry<Integer, String> > iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<Integer, String> entry = iterator.next(); // this will throw a // ConcurrentModificationException if (entry.getKey() == 1) { map.remove(1); } } } }> 出力:
Exception in thread 'main' java.util.ConcurrentModificationException>
FailSafe イテレータは、 ConcurrentModificationException イテレータの使用中に基礎となるコレクションが変更された場合。あるいは、イテレーターの作成時にコレクションのスナップショットを作成し、そのスナップショットを反復処理します。たとえば、ConcurrentHashMap のイテレータは FailSafe です。
例:
ジャワ
// Java Program to demonstrate FailSafe import java.io.*; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; class GFG { public static void main(String[] args) { ConcurrentHashMap<Integer, String> map = new ConcurrentHashMap<>(); map.put(1, 'one'); map.put(2, 'two'); Iterator<Map.Entry<Integer, String> > iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<Integer, String> entry = iterator.next(); // this will not throw an exception if (entry.getKey() == 1) { map.remove(1); } } } }> 152. 例外処理とは何ですか?
アン 例外 プログラムの通常の流れを中断し、特別な処理を必要とするイベントです。プログラムの実行中に発生したエラーや予期せぬ事態は、Java 例外処理メカニズムを使用して処理できます。 Java で例外が発生する理由を以下に示します。
- 装置の故障
- ネットワーク接続の切断
- コードエラー
- 利用できないファイルを開く
- 無効なユーザー入力
- 物理的な制限 (ディスク メモリ不足)
153. Javaプログラムでは何種類の例外が発生する可能性がありますか?

Java には通常、次の 2 種類の例外があります。
- 組み込みの例外: Java の組み込み例外は、Java ライブラリによって提供されます。これらの例外は、さらに 2 つのサブカテゴリ (チェック済み例外とチェックなし例外) に分類できます。 Java の組み込み例外の一部を以下に示します。
- ArrayIndexOutOfBoundsExceptions
- クラスが見つかりません例外
- ファイルが見つかりません例外
- IO例外
- NullPointerException
- 算術例外
- 中断された例外
- ランタイム例外
- ユーザー定義の例外: ユーザー定義例外は、組み込み例外ではカバーされない特定の状況やエラーを処理するためにプログラマ自身によって定義されます。ユーザー定義の例外を定義するには、適切な例外クラスを拡張する新しいクラスを定義する必要があります。 Java のユーザー定義例外は、組み込み例外が Java にある場合に使用されます。
154. エラーと例外の違い。
エラー | 例外 |
|---|---|
エラーから回復することはできません。 | try-catch ブロックを使用するか、呼び出し元に例外をスローして、例外から回復します。 |
Java ではエラーはすべて未チェックのタイプです。 | これには、発生するチェックされたタイプとチェックされていないタイプの両方が含まれます。 |
エラーのほとんどは、プログラムが実行されている環境によって発生します。 | 例外を引き起こすのは主にプログラムです。 |
エラーは実行時だけでなくコンパイル時にも発生する可能性があります。コンパイル時: 構文エラー、実行時: 論理エラー。 | すべての例外は実行時に発生しますが、チェックされた例外はコンパイラーに認識されますが、チェックされていない例外は認識されません。 |
これらは java.lang.Error パッケージで定義されています。 | これらは java.lang.Exception パッケージで定義されています |
例 : java.lang.StackOverflowError、java.lang.OutOfMemoryError | 例 : チェックされた例外: SQLException、IOException チェックされていない例外: ArrayIndexOutOfBoundException、NullPointerException、ArithmeticException。 |
155. Java Exception クラスの階層について説明します。

Java の例外およびエラーのタイプはすべて、階層の基本クラスである throwable クラスのサブクラスです。このクラスは、ユーザー プログラムが検出する必要がある例外条件に使用されます。 NullPointerException は、そのような例外の例です。別のブランチである error は、JRE に関連するエラーを示すために Java ランタイム システムによって使用されます。 StackOverflowError は、そのようなエラーの 1 つの例です。
156. 実行時例外について説明します。
実行時例外は、コンパイル中に発生するコンパイル時例外とは対照的に、コードの実行中に発生する例外です。実行時例外は、JVM によって考慮されないため、チェックされない例外です。
Java の実行時例外の例は次のとおりです。
- NullPointerException: これは、アプリケーションが null オブジェクト参照を使用しようとすると発生します。
- ArrayIndexOutOfBoundsException: これは、アプリケーションが範囲外の配列インデックスにアクセスしようとすると発生します。
- ArithmeticException: これは、アプリケーションがゼロで除算しようとすると発生します。
- IllegalArgumentException: これは、メソッドが不正または不適切な引数で渡された場合に発生します。
チェック例外とは異なり、ランタイム例外には throws 節での宣言や try-catch ブロックでのキャプチャは必要ありません。ただし、意味のあるエラー メッセージを提供し、システムのクラッシュを防ぐために、ランタイム例外を処理することをお勧めします。ランタイム例外はチェック例外よりも問題に関する具体的な情報を提供するため、開発者はプログラミング エラーをより簡単かつ迅速に検出して修正できます。
157. NullPointerException とは何ですか?
これは、プログラムが null 値を持つオブジェクト参照を使用しようとしたときにスローされる実行時例外の一種です。 NullPointerException の主な用途は、参照変数に値が割り当てられていないことを示すことですが、リンク リストやツリーなどのデータ構造を実装するためにも使用されます。
158. ArrayStoreException はいつスローされますか?
ArrayStoreException は、オブジェクトの配列に間違ったタイプのオブジェクトを格納しようとするとスローされます。
例:
ジャワ
// Java Program to implement // ArrayStoreException public class GFG { public static void main(String args[]) { // Since Double class extends Number class // only Double type numbers // can be stored in this array Number[] a = new Double[2]; // Trying to store an integer value // in this Double type array a[0] = new Integer(4); } }> 例:
Exception in thread 'main' java.lang.ArrayStoreException: java.lang.Integer at GFG.main(GFG.java:6)>
159. チェック済み例外と未チェック例外の違いは何ですか?
チェックされた例外:
チェックされた例外は、プログラムのコンパイル時にチェックされる例外です。プログラムでは、メソッド内の一部のコードがチェック例外をスローする場合、メソッドはその例外を処理するか、throws キーワードを使用して例外を指定する必要があります。
チェック例外には次の 2 つのタイプがあります。
- 完全にチェックされた例外: IOException や InterruptedException など、そのすべての子クラスもチェックされます。
- 部分的にチェックされた例外: 例外のように、その子クラスの一部はチェックされていません。
未チェックの例外:
未チェックとは、プログラムのコンパイル時にチェックされない例外です。 Error クラスと RuntimeException クラスの例外はチェックされない例外であり、throwable の下にある他の例外はすべてチェックされます。
160. エラーと例外の基本クラスは何ですか?

エラーとは、プログラムに異常を引き起こすユーザーによる不正な操作です。例外とは、プログラムの実行中に発生する予期しないイベントまたは条件であり、例外はプログラムの命令の通常の流れを中断します。
エラーと例外の両方には、java.lang.Throwable クラスという共通の親クラスがあります。
161. 各 try ブロックの後に catch ブロックが続く必要がありますか?
いいえ、Java では try ブロックの後に catch ブロックを使用する必要はありません。finally ブロックと別の組み合わせを作成できるためです。最後に、例外がスローされたかどうかに関係なく実行されるブロックです。
162. 例外の伝播とは何ですか?
例外の伝播は、例外がスタックの一番上から一番下にドロップされるプロセスです。一度捕捉されなかった場合、例外は再び前のメソッドにドロップダウンされ、捕捉されるまで、または呼び出しスタックの最下位に到達するまで、同様に繰り返されます。
163. Try または catch ブロックに System.exit(0) を置くとどうなりますか?最終的にブロックは実行されるでしょうか?
System.exit(int) には SecurityException をスローする機能があります。したがって、セキュリティの場合に例外がスローされた場合、最終的にブロックが実行されます。そうでない場合は、System の呼び出し中に JVM が閉じられます。 exit(0) のため、finally ブロックは実行されません。
164. オブジェクトの複製によって何を理解していますか?それを Java でどのように実現しますか?
これは、オブジェクトの正確なコピーを作成するプロセスです。これをサポートするには、Java クラスは java.lang パッケージの Cloneable インターフェイスを実装し、Object クラスによって提供される clone() メソッドをオーバーライドする必要があります。その構文は次のとおりです。
Protected Object clone() throws CloneNotSupportedException{ return (Object)super.clone();}Cloneable インターフェイスが実装されておらず、メソッドのみがオーバーライドされた場合、Java では CloneNotSupportedException が発生します。
165. 例外がプログラムで処理されない場合、プログラムはどのように影響を受けますか?
例外はプログラムの実行中に突然終了する原因となり、例外の発生後に書かれたコードは実行されません。
166. 最後のキーワードは何に使われますか?
Final キーワードは、関数を非仮想化するために使用されます。デフォルトでは、すべての関数は仮想であるため、非仮想にするには、final キーワードを使用します。
167. キーワード、final、finally、finalize はどのような目的を果たしますか?
私)。最後の:
Final は、オーバーライドできないように変数、メソッド、またはクラスで使用されるキーワードです。
例:
ジャワ
// Java Program to use final // keyword import java.io.*; // Driver Class class GFG { // Main function public static void main(String[] args) { final int x = 100; x = 50; } }> 出力:
./GFG.java:6: error: cannot assign a value to final variable x x=50; ^ 1 error>
ii)。ついに
finally は、例外処理で try-catch とともに使用されるコードのブロックです。例外がスローされるかどうかに関係なく、finally ブロックに書かれたコードは実行されます。
例:
ジャワ
// Java Program to implement finally import java.io.*; // Driver class class GFG { // Main function public static void main(String[] args) { int x = 10; // try block try { System.out.println('Try block'); } // finally block finally { System.out.println( 'Always runs even without exceptions'); } } }> 出力
Try block Always runs even without exceptions>
iii)。完成させる
これは、クリーンアップ アクティビティを実行するためにガベージ コレクションの対象となるオブジェクトを削除/破棄する直前に呼び出されるメソッドです。
例:
ジャワ
/*package whatever // do not write package name here */ import java.io.*; class GFG { public static void main(String[] args) { System.out.println('Main function running'); System.gc(); } // Here overriding finalize method public void finalize() { System.out.println('finalize method overridden'); } }> 出力
Main function running>
168. Java の this() と super() の違いは何ですか?
これ( ) | 素晴らしい( ) |
|---|---|
これはクラスの現在のインスタンスを表します。 | これは、親クラスの現在のインスタンスを表します。 |
同じクラスのデフォルトのコンストラクターを呼び出します。 | 基本クラスのデフォルトのコンストラクターを呼び出します。 |
同じクラスのメソッドにアクセスします。 | 親クラスのメソッドにアクセスします。 |
現在のクラス インスタンスを指します。 | スーパークラスのインスタンスを指します。 |
169. マルチタスクとは何ですか?
Java におけるマルチタスクとは、複数のタスクを同時に実行するプログラムの能力を指します。単一のプログラム内に含まれる迅速な操作であるスレッドでこれを行うことができます。一度に多数のことを実行することはマルチタスクとして知られています。
例:
ジャワ
// Java program for multitasking import java.io.*; public class MyThread extends Thread { public void run() { // Code to be executed in this thread for (int i = 0; i < 10; i++) { System.out.println( 'Thread ' + Thread.currentThread().getId() + ': ' + i); } } } public class GFG { public static void main(String[] args) { MyThread thread1 = new MyThread(); MyThread thread2 = new MyThread(); // Start the threads thread1.start(); thread2.start(); } }> 170. マルチスレッド プログラムとはどういう意味ですか?
Java のマルチスレッド プログラムには、順番に実行されるのではなく、同時に実行されるスレッドが含まれています。コンピューターは、複数のタスクを一度に組み合わせることで、リソースをより効率的に使用できます。マルチスレッド対応のプログラムでは、複数のコピーを実行することなく、複数のユーザーがそのプログラムを同時に使用できます。マルチスレッド プログラムは、複数のプロセスを同時に実行するように設計されており、これによりプログラムのパフォーマンスが向上し、プログラムが複数のプロセッサを利用できるようになり、全体のスループットが向上します。
171. マルチスレッドの利点は何ですか?
マルチスレッドを使用すると、次のような複数の利点があります。
- 応答性: マルチスレッド対話型アプリケーションでは、セクションがブロックされている場合や長時間のプロセスが実行されている場合でもコードを実行できるため、ユーザーの応答性が向上します。
- リソース共有: マルチスレッドにより、プロセスはメッセージ パッシングと共有メモリを実行できます。
- 経済性: メモリを共有できるため、プロセスが経済的です。
- スケーラビリティ: 複数の CPU マシンでのマルチスレッドにより、並列処理が向上します。
- 通信の向上: スレッド同期機能により、プロセス間通信が向上します。
- マルチプロセッサアーキテクチャの活用
- システムリソースの使用を最小限に抑える
172. スレッドを作成するには 2 つの方法がありますか?
マルチスレッドは、CPU を最大限に活用するためにプログラムの 2 つ以上の部分を同時に実行できるようにする Java 機能です。一般に、スレッドは個別の実行パスを持つ小さくて軽量なプロセスです。これらのスレッドは共有メモリを使用しますが、独立して動作するため、いずれかのスレッドに障害が発生しても、他のスレッドには影響しません。スレッドを作成するには 2 つの方法があります。
- Threadクラスを拡張することで
- Runnable インターフェイスを実装することによって。
Threadクラスを拡張することで
を拡張するクラスを作成します。 java.lang.Threadクラス 。このクラスは、Thread クラスで使用可能な run() メソッドをオーバーライドします。スレッドは run() メソッド内でその動作を開始します。
構文:
public class MyThread extends Thread { public void run() { // thread code goes here } }>Runnableインターフェースを実装することにより
を実装する新しいクラスを作成します。 java.lang.Runnable インターフェースを使用して run() メソッドをオーバーライドします。次に、Thread オブジェクトをインスタンス化し、このオブジェクトの start() メソッドを呼び出します。
構文:
public class MyRunnable implements Runnable { public void run() { // thread code goes here } }>173. スレッドとは何ですか?
Java のスレッドはプロセスの最小単位で軽量なサブプロセスであり、実行パスも別々にあります。これらのスレッドは共有メモリを使用しますが、独立して動作するため、スレッドに例外が発生しても、同じメモリを共有しているにもかかわらず、他のスレッドの動作に影響を与えません。スレッドには独自のプログラム カウンタ、実行スタック、およびローカル変数がありますが、同じプロセス内の他のスレッドと同じメモリ空間を共有します。 Java は、 実行可能なインターフェース そしてその スレッドクラス 。
174. プロセスとスレッドを区別しますか?
プロセスとスレッドはどちらもコンピューター システムの実行単位ですが、いくつかの点で異なります。
プロセス | 糸 |
|---|---|
プロセスとは、実行中のプログラムです。 | スレッドは、プロセス内の一連の単一の命令です。 |
プロセスが終了するまでにさらに時間がかかります。 | スレッドの終了にかかる時間が短縮されます。 |
コンテキスト切り替えのプロセスにはさらに時間がかかります。 | スレッドのコンテキスト切り替えにかかる時間が短縮されます。 |
このプロセスはコミュニケーションの点で効率が低くなります。 | 通信という点ではスレッドの方が効率的です。 |
プロセスは分離されています。 | スレッドはメモリを共有します。 |
プロセスには、独自のプロセス制御ブロック、スタック、およびアドレス空間があります。 | スレッドには、親の PCB、独自のスレッド制御ブロック、スタックおよび共通のアドレス空間があります。 |
プロセスは相互にデータを共有しません。 | スレッドは相互にデータを共有します。 |
175. スレッドのライフサイクルについて説明してください。

あ 糸 Java では、常に次のいずれかの状態にあります。スレッドは、いかなる瞬間においても、示されている状態のいずれか 1 つにのみ存在します。
- 新しい: スレッドは作成されましたが、まだ開始されていません。
- 実行可能: スレッドは実行中であり、そのタスクを実行しています。または、他に優先順位の高いスレッドがない場合は実行の準備ができています。
- ブロックされました: スレッドは一時的に中断され、リソースまたはイベントを待機します。
- 待っている: スレッドは、別のスレッドがタスクを実行するか、指定された時間が経過するのを待機しています。
- 終了: スレッドはタスクを完了したか、別のスレッドによって終了されました。
176. Threadクラスのsuspend()メソッドについて説明します。
Java の Thread クラスの stop() メソッドは、スレッドの実行を一時的に中断します。スレッドが一時停止されると、スレッドはブロック状態になり、オペレーティング システムによってスケジュールされなくなります。つまり、再開されるまでタスクを実行できなくなります。最新の Java プログラミング言語には、suspend() メソッドのより安全で柔軟な代替手段があります。このメソッドは値を返しません。
構文:
public final void suspend();>
例:
ジャワ
// Java program to show thread suspend() method import java.io.*; class MyThread extends Thread { public void run() { for (int i = 0; i < 10; i++) { System.out.println(' Running thread : ' + i); try { Thread.sleep(1000); } catch (Interrupted_Exception e) { e.printStackTrace(); } } } } class GFG { public static void main(String[] args) { MyThread t1 = new MyThread(); t1.start(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } // suspend the execution of the thread t1.suspend(); System.out.println('Suspended thread '); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } // resume the execution of the thread t1.resume(); System.out.println('Resumed thread'); } }> 出力:
Thread running: 0 Thread running: 1 Thread running: 2 Suspended thread Resumed thread Thread running: 3 Thread running: 4 Thread running: 5 Thread running: 6 Thread running: 7 Thread running: 8 Thread running: 9>
177. Thread クラスの実行でメインスレッドについて説明します。
Java には、マルチスレッド プログラミングのサポートが組み込まれています。メイン スレッドは、プログラムの実行中に作成される他のすべてのスレッドの親スレッドとみなされます。メインスレッドは、プログラムの実行開始時に自動的に作成されます。このスレッドはプログラムの main メソッドを実行します。これは、Java プログラムのメイン ロジックの実行とユーザー入力操作の処理を担当します。メイン スレッドは、他のすべての子スレッドが生成されるベース スレッドとして機能します。

178. デーモンスレッドとは何ですか?
Java のデーモン スレッドは、バックグラウンド操作や継続的に実行するタスクを実行するために使用される優先度の低いスレッドです。ガベージ コレクション、シグナル ディスパッチ、アクション リスナーなど。Java のデーモン スレッドはユーザー スレッドよりも優先順位が低く、ユーザー スレッドが実行されていない場合にのみ実行できます。 Java のデーモン スレッドは、明示的なシャットダウンや終了処理を必要としないバックグラウンド タスクに必要な便利な機能です。これにより、システム リソースをより効率的に使用できるようになり、リソースを簡素化し、長時間実行されるタスクを簡素化するために使用されます。
179. スレッドが待機状態に入るにはどのような方法がありますか?
スレッドは、単一プロセス内で他のスレッドと同時に実行される軽量プロセスです。各スレッドは異なるタスクを実行し、単一プロセス内のリソースを共有できます。 Java のスレッドは、さまざまな方法で待機状態に入ることができます。
- Sleep() メソッドの呼び出し: スリープ () メソッドは、スレッドの実行を特定の時間一時停止するために使用されます。スレッドが一時停止されている間、スレッドは待機状態になります。
- Wait() メソッド: このメソッドは、他のスレッドがウェイクアップするよう通知するまでスレッドを待機するために使用されます。スレッドは、別のスレッドから通知を受信するまで待機状態になります。
- Join() メソッド: Join() メソッドを使用すると、スレッドの実行が完了するまで待機できます。呼び出しスレッドは、ターゲットスレッドが完了するまで待機状態になります。
- I/O 操作を待機しています: スレッドが入出力操作の完了を待っている場合、スレッドは操作が完了するまで待機状態になります。
- 同期の問題: マルチスレッド アプリケーションに同期の問題がある場合、同期の問題が解決されるまでスレッドは待機状態になることがあります。
180. 単一の CPU を備えたコンピュータではマルチスレッドはどのように行われますか?
Java は、タイム シェアリング (一般にタイム スライシングと呼ばれる) と呼ばれる手法を使用して、単一の CPU を備えたコンピュータにマルチスレッドを実装します。並列実行の外観は、CPU がアクティブなスレッドを切り替えることによって作成されます。オペレーティング システムは、CPU 時間を各スレッドに順番に割り当て、スレッドをスケジュールする役割を果たします。
スレッドが相互にやり取りして競合状況やその他の問題が発生するのを防ぐために、Java には同期やロックなど、スレッドの動作を制御するさまざまな方法があります。スレッド間の対話を調整し、重要なコード部分が確実に同期されるようにすることで、単一の CPU を備えたマシン上で正しく効率的に動作するマルチスレッド プログラマを作成することが可能です。複数の CPU またはコアを備えたコンピューターで同じプログラムを実行するのとは対照的に、単一の CPU でのマルチスレッドは並列処理のように見えるだけであり、実際のパフォーマンスの向上はわずかである可能性があります。オペレーティング システムは、単一の CPU 上で多数のスレッドが実行されている場合に利用可能な CPU 時間を小さなタイム スライスに分割し、各スレッドに実行するタイム スライスを与えます。オペレーティング システムによるスレッド間の迅速な切り替えにより、並列実行のように見えます。多くの場合、タイム スライスはミリ秒またはマイクロ秒のオーダーで非常に小さいため、スレッド間の切り替えは即座に行われるように見えます。
経験者向けの Java 面接の質問
181. Java のスレッド優先順位にはどのような種類がありますか? JVM によって割り当てられるスレッドのデフォルトの優先順位は何でしょうか?
スレッドの優先順位とは、すべてのスレッドに優先順位があるという概念で、平たく言えば、すべてのオブジェクトが優先順位を持っていると言えます。これは 1 から 10 までの数字で表されます。Java には、以下に示すさまざまな種類のスレッド プロパティがあります。
- MIN_PRIORITY
- MAX_PRIORITY
- NORM_PRIORITY
デフォルトでは、スレッドには NORM_PRIORITY が割り当てられます。
182. Java でガベージ コレクションが必要なのはなぜですか?
Java の場合、プログラムのクラッシュや不安定化の原因となるメモリ リークを避けるために、ガベージ コレクションが必要です。 Java ではガベージ コレクションを回避する方法はありません。 C++ とは異なり、Java のガベージ コレクションにより、プログラマはメモリ リソースの管理やメモリ リークの心配をせずに、アプリケーションの開発に集中できます。 Java 仮想マシン (JVM) は、アプリケーション内の未使用のメモリを解放するガベージ コレクタを実行することにより、メモリを定期的に自動的に管理します。ガベージ コレクションは、未参照のオブジェクトをヒープ メモリから削除するため、Java メモリを効率的にします。
183. ガベージ コレクションの欠点は何ですか?
ガベージ コレクターには多くの利点とは別に、以下に示すいくつかの欠点があります。
- ガベージ コレクションの主な欠点は、メモリをクリアするためにアプリケーションの実行が一時停止し、アプリケーションのパフォーマンスが低下する可能性があることです。
- ガベージ コレクションのプロセスは非決定的であるため、ガベージ コレクションがいつ発生するかを予測することが難しく、アプリケーションで予測不可能な動作が発生します。たとえば、プログラムを作成する場合、問題の原因がガベージ コレクションにあるのか、それともプログラム内の他の要因にあるのかをプログラマーが判断するのは困難です。
- プログラムが有効期間の短いオブジェクトを大量に作成および破棄する場合、ガベージ コレクションによってメモリ使用量も増加する可能性があります。
184. マイナー ガベージ コレクション、メジャー ガベージ コレクション、およびフル ガベージ コレクションの違いを説明します。
Java 仮想マシン (JVM) は、使用されなくなったオブジェクトを定期的にチェックして削除するガベージ コレクターを使用して削除します。 JVM にはさまざまなタイプのガベージ コレクションがあり、それぞれに異なる特性とパフォーマンスへの影響があります。ガベージ コレクションの主な種類は次のとおりです。
- マイナーガベージコレクション: 若い世代のガベージ コレクションとも呼ばれるこのタイプのガベージ コレクションは、有効期間の短いオブジェクト (すぐに作成されて破棄されるオブジェクト) によって使用されるメモリを収集して再利用するために使用されます。
- 主なガベージ コレクション: 旧世代のガベージ コレクションとも呼ばれるこのタイプのガベージ コレクションは、存続期間の長いオブジェクト (複数のマイナーなガベージ コレクションを経て古い世代に昇格されるオブジェクト) によって使用されるメモリを収集して再利用するために使用されます。
- 完全なガベージ コレクション: フル ガベージ コレクションでは、老若男女の記憶を含む、あらゆる世代の記憶が収集され、再利用されます。フル ガベージ コレクションは通常、マイナーまたはメジャー ガベージ コレクションよりも完了までに時間がかかるため、アプリが一時停止します。
185. Java でメジャー ガベージ コレクションとマイナー ガベージ コレクションをどのように識別しますか?
メジャー ガベージ コレクションは Survivor スペースで動作し、マイナー ガベージ コレクションは Eden スペースで動作して、マーク アンド スイープ ルーチンを実行します。そして、ガベージ コレクションのログが -XX:PrintGCDetails またはverbose:gc で有効になっている場合、マイナー コレクションでは GC が出力されるのに対し、メジャー コレクションでは Full GC が出力される出力に基づいて、両方を識別できます。
186. メモリ リークとは何ですか? ガベージ コレクションにどのような影響を与えますか?
Java では、リソースが適切に閉じられない、オブジェクト参照を必要以上に長く保持する、不必要に多数のオブジェクトを作成するなど、さまざまな要因によってメモリ リークが発生する可能性があります。オブジェクトへの参照が存在するために、ガベージ コレクターがオブジェクトを収集しない状況があります。アプリケーションが多数のオブジェクトを作成してそれらを使用せず、すべてのオブジェクトに有効な参照があるこのような状況では、Java のガベージ コレクターはオブジェクトを破棄できません。プログラムに何の価値も提供しないこれらの役に立たないオブジェクトは、メモリ リークとして知られています。メモリ リークは、ガベージ コレクタが未使用のメモリを再利用できなくなり、ガベージ コレクションに悪影響を与える可能性があります。この動作により、パフォーマンスが低下したり、場合によってはシステム障害が発生したりすることがあります。プログラムでは、リソースとオブジェクト参照を適切に管理してメモリ リークを回避することが重要です。
例:
ジャワ
// Java Program to demonstrate memory leaks import java.io.*; import java.util.Vector; class GFG { public static void main(String[] args) { Vector a = new Vector(21312312); Vector b = new Vector(2147412344); Vector c = new Vector(219944); System.out.println('Memory Leak in Java'); } }> 出力:
Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space at java.base/java.util.Vector.(Vector.java:142) at java.base/java.util.Vector.(Vector.java:155) at GFG.main(GFG.java:9)>
187. java.util.regex パッケージに存在するいくつかのクラスに名前を付けます。
Java の正規表現または Regex は、Java で文字列の検索と操作に使用される API です。文字列から必要なデータを抽出したり、パターンを一般化したりできる文字列パターンを作成します。
java.util.regex には、以下に示す 3 つのクラスが存在します。
- パターンクラス: パターンを定義できます
- Matcher クラス: パターンを使用してテキストの一致操作を実行できます。
- PatternSyntaxException クラス: 正規表現パターンの構文エラーを示すことができます。
また、3 つのクラスとは別に、パッケージは、一致操作の結果を表すために使用できる単一のインターフェイス MatchResult インターフェイスで構成されます。
188. パスワードを検証するための正規表現を記述します。パスワードはアルファベットで始まり、その後に英数字が続く必要があります。長さは 8 ~ 20 でなければなりません。
regex = ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&-+=()])(?=S+$).{8, 20}$>説明:
- ^ は文字列の開始文字として使用されます。
- 数字に使用される (?=.*[0-9]) は少なくとも 1 回出現する必要があります。
- 小文字のアルファベットに使用される (?=.*[a-z]) は少なくとも 1 回出現する必要があります。
- (?=.*[A-Z]) は、部分文字列内で少なくとも 1 回出現する必要がある大文字のアルファベットに使用されます。
- (?=.*[@#$%^&-+=()] は、少なくとも 1 回出現する必要がある特殊文字に使用されます。
- (?=S+$) 空白は文字列全体に使用できません。
- .{8, 20} は、8 文字以上、最大 20 文字で使用されます。
- $は文字列の末尾に使用されます。
189. JDBCとは何ですか?
JDBC Java アプリケーションとリレーショナル データベースをリンクするには、標準 API が使用されます。これは、プログラマが Java プログラミング言語を使用してデータベースと通信できるようにするクラスとインターフェイスのコレクションを提供します。 JDBC のクラスとインターフェイスを使用すると、アプリケーションはユーザーが行ったリクエストを指定されたデータベースに送信できます。通常、データベースと対話する JDBC のコンポーネントは 4 つあります。
- JDBC API
- JDBCドライバーマネージャー
- JDBC テスト スイート
- JDBC-ODBC ブリッジドライバー

190. JDBCドライバーとは何ですか?
JDBCドライバー Java アプリケーションがデータベースと対話できるようにするために使用されるソフトウェア コンポーネントです。 JDBC は、特定のデータベース管理システムに JDBC API の実装を提供します。これにより、データベースへの接続、SQL ステートメントの実行、データの取得が可能になります。 JDBC ドライバーには次の 4 種類があります。
- JDBC-ODBC ブリッジドライバー
- ネイティブAPIドライバー
- ネットワークプロトコルドライバー
- 薄型ドライバー

191. Java でデータベースに接続する手順は何ですか?
以下に示すように、データベースと Java プログラムを接続するには特定の手順があります。
- パッケージをインポートする
- forName() メソッドを使用してドライバーをロードします。
- DriverManagerを使用してドライバーを登録する
- Connection クラス オブジェクトを使用して接続を確立する
- ステートメントを作成する
- クエリを実行する
- 接続を閉じます
192. JDBC API コンポーネントとは何ですか?
JDBC API コンポーネントは、データベースとの通信を容易にするためのさまざまなメソッドとインターフェイスを提供します。また、WORA (Write Once Run Anywhere) 機能を提供する Java Se や Java EE などのパッケージも提供します。
構文:
java.sql.*;>
193. JDBC接続インターフェースとは何ですか?
Java データベース接続インターフェイス (JDBC) は、Java アプリケーションがデータベースと対話できるようにするソフトウェア コンポーネントです。接続を強化するために、JDBC には各データベースのドライバーが必要です。
194. JDBC ResultSet インターフェイスは何ですか?
JDBC ResultSet インターフェイスは、データベースからデータを保存し、それを Java プログラムで使用するために使用されます。 ResultSet を使用して、updateXXX() メソッドを使用してデータを更新することもできます。 ResultSet オブジェクトは、結果データの最初の行の前にカーソルを指します。 next() メソッドを使用すると、ResultSet を反復処理できます。
195. JDBC 行セットとは何ですか?
JDBC RowSet は、データを表形式で保存する方法を提供します。 RowSet は、java.sql パッケージ内で使用できる Java のインターフェイスです。 RowSet オブジェクトとデータ ソース間の接続は、そのライフ サイクル全体にわたって維持されます。 RowSet は、以下に示す実装に基づいて 5 つのカテゴリに分類されます。
- JdbcRowSet
- キャッシュされた行セット
- WebRowSet
- フィルターされた行セット
- 行セットに参加
196. JDBC DriverManager クラスの役割は何ですか?
JDBC DriverManager クラスは、ユーザーとドライバーのインターフェイスとして機能します。以下に示すように、さまざまな方法で使用されます。
- Java アプリケーションとデータベース間の接続を作成するために使用されます。
- 利用可能なドライバーを追跡するのに役立ちます。
- これは、データベースと適切なドライバー間の接続を確立するのに役立ちます。
- これには、データベース ドライバー クラスを登録および登録解除できるすべてのメソッドが含まれています。
- DriverManager.registerDriver() メソッドは、自身を登録した Driver クラスのリストを維持できます。
Java の違いに関する面接の質問
197. Iterable と Iterator を区別する。
反復可能 | イテレーター |
|---|---|
Iterable は、一連の要素を反復処理する方法を提供します。 | Iterator は、要素のコレクションを順番に反復処理するのに役立ちます。 |
| イテレータ() メソッドはイテレータを返します。 | hasNext() そして 次() 方法が必要です。 |
| 取り除く() メソッドはオプションです。 | 取り除く() イテレータにはメソッドが必要です。 |
例としては、 リスト、キュー、セット。 | 例としては、 ListIterator、Enumeration、および ArrayIterator。 |
198. リストとセットを区別する。
リスト | セット |
|---|---|
順序付けられました | 順序なし |
リストでは重複が許可されます。 | Set では値の重複は許可されません。 |
リストはインデックスによってアクセスされます。 | セットにはハッシュコードによってアクセスされます。 |
複数の null 要素を格納できます。 | Null 要素は 1 回だけ保存できます。 |
例としては、ArrayList、LinkedList などがあります。 | 例としては、HashSet や TreeSet があります。 LinkedHashSet など |
199. リストとマップを区別する。
リスト | 地図 |
|---|---|
リスト インターフェイスでは要素の重複が許可されます。 | マップでは要素の重複は許可されません。 |
リストでは挿入順序が維持されます。 | マップは挿入順序を維持しません。 |
複数の null 要素を格納できます。 | マップでは、最大で 1 つの null キーと任意の数の null 値が許可されます。 |
このリストには、指定されたインデックスにある要素を取得するための get() メソッドが用意されています。 | マップには、指定されたインデックスにある要素を取得するための get メソッドが提供されていません。 |
リストはArrayListなどで実装されます。 | マップは HashMap、TreeMap、LinkedHashMap によって実装されます |
200. キューとスタックを区別する。
列 | スタック |
|---|---|
キュー データ構造は要素を格納するために使用され、キューの最後尾または最後からのエンキュー、デキューなどの操作を実行するために使用されます。 | スタック データ構造は要素を格納するために使用され、スタックの最上部からプッシュやポップなどの操作を実行するために使用されます。 |
キューのデータ構造 FIFO 順序を実装します。 | スタック データ構造 LIFO 順序を実装します。 |
キューへの挿入と削除は、リストの反対側から行われます。削除はリストの前から行われ、挿入はリストの後ろから行われます。 | スタックへの挿入と削除は、先頭と呼ばれるリストの一方の端からのみ行われます。 |
挿入操作はエンキュー操作と呼ばれます。 | 挿入操作をプッシュ操作と呼びます。 |
キューは通常、逐次処理に関連する問題を解決するために使用されます。 | スタックは通常、再帰に関連する問題を解決するために使用されます。 |
201. PriorityQueue と TreeSet を区別します。
優先キュー | ツリーセット |
|---|---|
基礎となるデータ構造として Queue を使用します。 | 基礎となるデータ構造として Set を使用します。 |
このデータ構造では要素の重複が可能です | このデータ構造では要素の重複は許可されません |
Priority QueueはPriorityQueueクラスで実装されます。 | TreeSet は TreeSet クラスによって実装されます。 |
PriorityQueue は JDK 1.5 に付属しています。 | TreeSet は JDK 1.4 に付属しています。 |
PriorityQueue pq = 新しい PriorityQueue(); | reeSet ts = 新しい TreeSet(); |
202. 単結合リストと二重結合リストを区別します。
単一リンクリスト | 二重リンクリスト |
|---|---|
単一リンクリストには、データとリンクの 2 つのセグメントのみが含まれます。 | 二重リンクリストには、データと 2 つのポインタという 3 つのセグメントが含まれています。 |
単一リンクリスト内の走査は、前方向のみに可能です。 | 二重リンクリスト内のトラバーサルは、前方および後方の両方向でのみ可能です。 |
各ノードにはポインターが 1 つだけあるため、使用するメモリが少なくなります。 | 各ノードに 2 つのポインタがあるため、単一リンク リストよりも多くのメモリが必要になります。 |
使いやすく、リストの先頭にノードを挿入できます。 | 使用方法は少し複雑ですが、リストの最後に簡単に挿入できます。 |
挿入と削除の時間計算量は O(n) です。 | 挿入と削除の時間計算量は O(1) です。 |
| | |
203. フェイルファーストとフェイルセーフを区別する。
フェイルファースト | フェイルセーフ |
|---|---|
Failsfast は、反復中に同時変更を検出するとすぐに失敗します。 | フェールセーフは元のコレクションを繰り返し処理し続け、変更するためのコピーも作成します。 |
フェイルファーストは通常、シングルスレッド環境で使用されます。 | フェールセーフはマルチスレッド環境で使用されます。 |
フェイルファーストでは、反復中の変更は許可されません。 | フェールセーフにより、反復中に変更が可能になります。 |
フェールファーストは、コレクションのコピーを必要としないため、フェールセーフと比較して高速です。 | フェールセーフは一般に、フェールファストに比べて低速です。 |
フェイルファーストスロー ConcurrentModificationException 反復中にコレクションが変更された場合。 | FailSafe は例外をスローしませんが、代わりに反復するコレクションのコピーを作成します。 |
204. HashMap と TreeMap を区別します。
ハッシュマップ | ツリーマップ |
|---|---|
Hasmap は、キーと値のペアを保存するためにハッシュテーブルを使用します。 | ツリーマップは、赤黒ツリーを使用してキーと値のペアを保存します。 |
ハッシュマップは、キーと値のペアの特定の順序を維持しません。 | ツリーマップはキーに基づいて自然な順序を維持します。 |
ハッシュマップでは反復の順序は保証されません。 | 反復はキーに基づいてソートされた順序で行われます。 |
ハッシュマップは、ツリーマップと比較して取得が高速です。 | ツリーマップでの取得は、キーの検索にツリー トラバーサルを使用するため遅くなります。 |
ハッシュマップは、リンクされたリストの配列を使用して実装されます。 | TreeMap は、赤黒ツリーを使用して実装されます。 |
Hashmap は、Object クラスの equals() メソッドを使用してキーを比較します。 | TreeMap は、compareTo() メソッドを使用してキーを比較します。 |
205. キューとデキューを区別します。
列 | 何について |
|---|---|
キューは、要素のコレクションを格納するために使用される線形データ構造です。 | 両端キューとも呼ばれる Deque も、両端から削除および追加する操作を含む要素のコレクションを格納する線形データ構造です。 |
キュー内の要素はデータ構造の最後にのみ挿入できます。 | 要素はデータ構造の両端から挿入できます。 |
キューは、配列またはリンク リストを使用して実装できます。 | デキューは、循環配列または二重リンク リストを使用して実装できます。 |
キューは通常、待機リストまたはタスク キューを実装するために使用されます。 | Deque は、スタックを実装するか、両端から要素をデキューするために使用されます。 |
| | |
206. HashSet と TreeSet を区別します。
ハッシュセット | ツリーセット |
|---|---|
HashSet には順序がありません。 | TreeSet は自然な順序に基づいています。 |
HashSet では null 要素が許可されます。 | TreeSet では null 要素は許可されません。 |
HashSet は HashSet クラスによって実装されます。 | TreeSet は TreeSet クラスによって実装されます。 |
HashSet hs = new HashSet(); | TreeSet ts = new TreeSet(); |
Java 面接の質問 – FAQ
Q1.インドにおける Java 開発者の給与はいくらですか?
さまざまなリソースによると、Java バックエンド開発者の平均給与は次のとおりです。 年間 140 万ドルは、他の開発者の役割よりも 30% 高い 。ここで最新のコースを確認することもできます GeekforGeeks 実践ポータル も役立ちます。
Q5. Java の面接で目立つにはどうすればよいですか?
Java の面接で目立つためには、Java の概念と実際のアプリケーションについての深い理解を実証してください。複雑なシナリオへのアプローチを説明し、効率的なソリューションを提供することで、問題解決スキルをアピールします。さらに、Java コミュニティに対して行った関連プロジェクトや貢献を強調表示します。熱意、良好なコミュニケーション、学習意欲を示すことも、好印象を与えることができます。



