logo

300 のコア Java 面接の質問 |セット1

面接での質問は 90% 確実に回答されます

Java の面接でのコアとなる 300 の質問のリストがあります。 Java の面接で重要な質問がある場合は、質問セクションに投稿してください。面接でよく聞かれる質問と回答の 90% がここで得られることを保証します。

Core Java の面接の質問に対する答えは短く、要点を絞っています。主要な Java 面接の質問は、Java の面接の質問の基礎、OOP の面接の質問、文字列処理の面接の質問、マルチスレッドの面接の質問、コレクションの面接の質問、JDBC の面接の質問などに分類されます。


1 2 3 4 5

コア Java: Java の基本的な面接の質問


1) Java とは何ですか?

ジャワ 高いレベルです、 オブジェクト指向 、堅牢で安全なプログラミング言語、プラットフォームに依存しない、高性能、マルチスレッド、ポータブルなプログラミング言語。開発したのは、 ジェームズ・ゴズリング 独自の JRE と API を提供するため、プラットフォームとも呼ばれます。


2) C++ と Java の違いは何ですか?

間の違い C++ および Java を次の表に示します。

比較指標 C++ジャワ
プラットフォームに依存しない C++ はプラットフォームに依存します。Java はプラットフォームに依存しません。
主に使用されるのは、 C++は主にシステムプログラミングに使用されます。Javaは主にアプリケーションプログラミングに使用されます。ウィンドウ、Web ベース、エンタープライズ、モバイル アプリケーションで広く使用されています。
設計目標 C++ は、システムおよびアプリケーションのプログラミング用に設計されました。の延長でした C プログラミング言語Java は印刷システム用のインタプリタとして設計および作成されましたが、後にネットワーク コンピューティングのサポートとして拡張されました。使いやすく、より幅広いユーザーがアクセスできることを目標に設計されました。
後藤 C++ は goto ステートメントをサポートしています。Java は goto ステートメントをサポートしていません。
多重継承 C++ は多重継承をサポートしています。Java はクラスを介した多重継承をサポートしていません。それは次の方法で達成できます Javaのインターフェース
演算子のオーバーロード C++ のサポート 演算子のオーバーロードJava は演算子のオーバーロードをサポートしていません。
ポインタ C++ はポインターをサポートします。 C++ でポインタ プログラムを作成できます。Java は内部でポインタをサポートしています。ただし、Java でポインタ プログラムを記述することはできません。これは、Java でのポインタのサポートが制限されていることを意味します。
コンパイラとインタプリタ C++ はコンパイラのみを使用します。 C++ は、ソース コードをマシン コードに変換するコンパイラーを使用してコンパイルおよび実行されるため、C++ はプラットフォームに依存します。Java はコンパイラとインタプリタの両方を使用します。 Java ソース コードはコンパイル時にバイトコードに変換されます。インタプリタは実行時にこのバイトコードを実行し、出力を生成します。 Java は解釈されるため、プラットフォームに依存しません。
値による呼び出しと参照による呼び出し C++ は、値による呼び出しと参照による呼び出しの両方をサポートします。Java は値による呼び出しのみをサポートします。 Javaには参照による呼び出しはありません。
構造と結合 C++ は構造体と共用体をサポートします。Java は構造体と共用体をサポートしていません。
スレッドのサポート C++ にはスレッドのサポートが組み込まれていません。スレッドのサポートについてはサードパーティのライブラリに依存しています。Javaには組み込み サポート。
ドキュメントのコメント C++ はドキュメント コメントをサポートしていません。Java は、Java ソース コードのドキュメントを作成するためのドキュメント コメント (/** ... */) をサポートしています。
仮想キーワード C++ は virtual キーワードをサポートしているため、関数をオーバーライドするかどうかを決定できます。Java には仮想キーワードがありません。デフォルトでは、すべての非静的メソッドをオーバーライドできます。つまり、非静的メソッドはデフォルトで仮想です。
符号なし右シフト >>> C++ は >>> 演算子をサポートしていません。Java は、負の数の先頭にゼロを埋める符号なし右シフト >>> 演算子をサポートします。正の数値の場合、>> 演算子と同じように機能します。
継承ツリー C++ は常に新しい継承ツリーを作成します。Java ではすべてのクラスが Object クラスの子であるため、Java では常に単一の継承ツリーが使用されます。オブジェクト クラスは、 継承 Javaのツリー。
ハードウェア C++ はハードウェアに近いものです。Java はハードウェアとそれほど対話的ではありません。
オブジェクト指向 C++ はオブジェクト指向言語です。ただし、C 言語では単一ルート階層は不可能です。Javaもまた、 オブジェクト指向 言語。ただし、Java では (基本型を除く) すべてがオブジェクトです。すべてが java.lang.Object から派生するため、これは単一のルート階層です。

3) Java プログラミング言語の機能を列挙します。

Javaプログラミング言語には以下のような特徴があります。

    単純:Java は学ぶのが簡単です。 Java の構文は C++ に基づいているため、プログラムを簡単に作成できます。
    オブジェクト指向:Java はオブジェクト指向パラダイムに従っており、データと動作の両方を組み込んださまざまなタイプのオブジェクトの組み合わせとしてコードを維持できます。
    ポータブル:Java は、Read-Once-Write-Anywhere アプローチをサポートしています。 Java プログラムはすべてのマシンで実行できます。 Java プログラム (.java) は、あらゆるマシンで簡単に実行できるバイトコード (.class) に変換されます。
    プラットフォームに依存しない:Java はプラットフォームに依存しないプログラミング言語です。実行するプラットフォームを必要とする C や C++ などの他のプログラミング言語とは異なります。 Java には、コードが実行されるプラットフォームが付属しています。 Java は、実行されるオペレーティング システムに依存しません。
    安全:Java は明示的なポインタを使用しないため、安全です。 Java は、Java をより安全にする ByteCode および例外処理の概念も提供します。
    屈強:Java は強力なメモリ管理を使用するため、強力なプログラミング言語です。自動ガベージ コレクション、例外処理などの概念により、より堅牢になります。
    中立的なアーキテクチャ:Java はアーキテクチャに依存しないため、アーキテクチャ的に中立です。 C では、Java には存在しないアーキテクチャ (32 ビットまたは 64 ビット) に応じてデータ型のサイズが異なる場合があります。
    解釈:Java は、プログラムの実行にコンパイラとともにジャストインタイム (JIT) インタープリタを使用します。
    ハイパフォーマンス:Java は、Java バイトコードがネイティブ コードに「近い」ため、他の従来の解釈型プログラミング言語よりも高速です。それでもコンパイル言語 (C++ など) よりは少し遅いです。
    マルチスレッド:複数のスレッドを定義することで、一度に多くのタスクを処理する Java プログラムを作成できます。マルチスレッドの主な利点は、スレッドごとにメモリを占有しないことです。共通のメモリ領域を共有します。スレッドは、マルチメディア、Web アプリケーションなどにとって重要です。
    配布:Java が分散されるのは、ユーザーが Java で分散アプリケーションを作成しやすくなるからです。 RMI と EJB は、分散アプリケーションの作成に使用されます。 Java のこの機能により、インターネット上の任意のマシンからメソッドを呼び出してファイルにアクセスできるようになります。
    動的:Java は動的言語です。クラスの動的ロードをサポートします。これは、クラスがオンデマンドでロードされることを意味します。また、ネイティブ言語 (C および C++) の関数もサポートします。

4) Java 仮想マシンについて何がわかりますか?

Java仮想マシン は、コンピュータが Java プログラムを実行できるようにする仮想マシンです。 JVM は、Java コード内に存在する main メソッドを呼び出すランタイム エンジンのように機能します。 JVM はコンピュータ システムに実装する必要がある仕様です。 Java コードは、マシンに依存せずネイティブ コードに近いバイトコードになるように JVM によってコンパイルされます。


5) JDK、JRE、および JVM の違いは何ですか?

JVM

JVM は Java 仮想マシンの頭字語です。これは、Java バイトコードを実行できるランタイム環境を提供する抽象マシンです。 Java仮想マシンの動作を規定する仕様です。その実装は Oracle およびその他の企業によって提供されています。その実装は JRE として知られています。

JVM は多くのハードウェアおよびソフトウェア プラットフォームで利用できます (したがって、JVM はプラットフォームに依存します)。これは、Java クラスを実行するときに作成されるランタイム インスタンスです。 JVM には、仕様、実装、インスタンスという 3 つの概念があります。

JRE

JRE は Java ランタイム環境の略です。 JVMの実装です。 Java ランタイム環境は、Java アプリケーションの開発に使用されるソフトウェア ツールのセットです。実行環境を提供するために使用されます。 JVMの実装です。それは物理的に存在します。これには、実行時に JVM が使用する一連のライブラリとその他のファイルが含まれています。

JDK

JDK は Java Development Kit の頭字語です。 Javaアプリケーションやアプレットを開発するために使用されるソフトウェア開発環境です。それは物理的に存在します。 JRE + 開発ツールが含まれています。 JDK は、Oracle Corporation がリリースした以下の Java プラットフォームのいずれかの実装です。

  • Standard Edition Java プラットフォーム
  • Enterprise Edition Java プラットフォーム
  • Micro Edition Java プラットフォーム
詳細。

6) JVM によって割り当てられるメモリ領域は何種類ありますか?

多くの種類:

    クラス(メソッド)エリア:クラス領域には、実行時定数プール、フィールド、メソッド データ、メソッドのコードなどのクラスごとの構造が格納されます。ヒープ:オブジェクトにメモリが割り当てられる実行時データ領域です。スタック:Java スタックはフレームを保存します。ローカル変数と部分的な結果を保持し、メソッドの呼び出しと戻りに関与します。各スレッドにはプライベート JVM スタックがあり、スレッドと同時に作成されます。メソッドが呼び出されるたびに、新しいフレームが作成されます。フレームは、メソッドの呼び出しが完了すると破棄されます。プログラムカウンターレジスタ:PC (プログラム カウンタ) レジスタには、現在実行されている Java 仮想マシン命令のアドレスが含まれます。ネイティブメソッドスタック:これには、アプリケーションで使用されるすべてのネイティブ メソッドが含まれています。
詳細。

7) JITコンパイラとは何ですか?

ジャストインタイム(JIT)コンパイラ: パフォーマンスを向上させるために使用されます。 JIT は、同様の機能を持つバイトコードの部分を同時にコンパイルするため、コンパイルに必要な時間が短縮されます。ここでコンパイラという用語は、Java 仮想マシン (JVM) の命令セットから特定の CPU の命令セットへの変換器を指します。


8) プラットフォームとは何ですか?

プラットフォームとは、ソフトウェアが実行されるハードウェアまたはソフトウェア環境です。プラットフォームには、ソフトウェア ベースとハードウェア ベースの 2 種類があります。 Java はソフトウェアベースのプラットフォームを提供します。


9) Java プラットフォームと他のプラットフォームの主な違いは何ですか?

Java プラットフォームと他のプラットフォームには次の違いがあります。

  • Java はソフトウェア ベースのプラットフォームですが、他のプラットフォームはハードウェア プラットフォームまたはソフトウェア ベースのプラットフォームである場合があります。
  • Java は他のハードウェア プラットフォーム上で実行されますが、他のプラットフォームはハードウェア コンポーネントしか持つことができません。

10) Java に「一度書けばどこでも実行できる」という性質は何から与えられているのでしょうか?

バイトコード。 Java コンパイラは、Java プログラムをソース コードとマシン コードの中間言語であるクラス ファイル (バイト コード) に変換します。このバイトコードはプラットフォーム固有ではなく、どのコンピュータでも実行できます。


11) クラスローダーとは何ですか?

クラスローダーは、クラス ファイルをロードするために使用される JVM のサブシステムです。 Java プログラムを実行するときは常に、最初にクラスローダーによってロードされます。 Java には 3 つの組み込みクラスローダーがあります。

    ブートストラップ クラスローダー: これは、拡張クラスローダーのスーパークラスである最初のクラスローダーです。それはロードします rt.jar java.lang パッケージ クラス、java.net パッケージ クラス、java.util パッケージ クラス、java.io パッケージ クラス、java.sql パッケージ クラスなど、Java Standard Edition のすべてのクラス ファイルが含まれるファイル。拡張クラスローダー: これは、Bootstrap の子クラスローダーであり、System クラスローダーの親クラスローダーです。内部にあるjarファイルをロードします $JAVA_HOME/jre/lib/ext ディレクトリ。システム/アプリケーションのクラスローダー: これは拡張クラスローダーの子クラスローダーです。クラスパスからクラスファイルをロードします。デフォルトでは、クラスパスは現在のディレクトリに設定されます。 「-cp」または「-classpath」スイッチを使用してクラスパスを変更できます。アプリケーション クラスローダーとも呼ばれます。

12) 空の .java ファイル名は有効なソース ファイル名ですか?

はい、Java では次の方法で Java ファイルを保存できます。 .java ただ、それをコンパイルする必要があるのは、 javac .java そして経営するのは Javaクラス名 簡単な例を見てみましょう。

 //save by .java only class A{ public static void main(String args[]){ System.out.println('Hello java'); } } //compile by javac .java //run by java A 

それをコンパイルします javac .java

それを実行する ジャワA


13) Java では、delete、next、main、exit、または null キーワードはありますか?

いいえ。


14) コマンドラインで引数を指定しなかった場合、String 配列に格納されている値は main() メソッドに渡され、空または NULL になりますか?

空ですが、null ではありません。


15) public static void の代わりに static public void と書いたらどうなるでしょうか?

Java では指定子の順序は重要ではないため、プログラムは正しくコンパイルされ、実行されます。


16) ローカル変数のデフォルト値は何ですか?

ローカル変数は、プリミティブやオブジェクト参照のいずれにもデフォルト値に初期化されません。


17) Java のさまざまなアクセス指定子とは何ですか?

Java では、アクセス指定子は、メソッド、クラス、または変数のアクセス範囲を定義するために使用されるキーワードです。 Java には、以下の 4 つのアクセス指定子があります。

    公共public として定義されたクラス、メソッド、または変数には、任意のクラスまたはメソッドからアクセスできます。保護されていますProtected には、同じパッケージのクラス、このクラスのサブクラス、または同じクラス内からアクセスできます。デフォルトデフォルトはパッケージ内でのみアクセス可能です。デフォルトでは、すべてのクラス、メソッド、変数がデフォルトのスコープになります。プライベートプライベートとして定義されたプライベート クラス、メソッド、または変数には、クラス内でのみアクセスできます。

18) 静的メソッドと変数の目的は何ですか?

静的として定義されたメソッドまたは変数は、クラスのすべてのオブジェクト間で共有されます。静的はクラスの一部であり、オブジェクトの一部ではありません。静的変数はクラス領域に格納されるため、そのような変数にアクセスするためのオブジェクトを作成する必要はありません。したがって、クラスのすべてのオブジェクトに共通の変数またはメソッドを定義する必要がある場合には、static が使用されます。

たとえば、大学の学生の集合をシミュレートするクラスでは、大学の名前がす​​べての学生に共通の属性になります。したがって、大学名は次のように定義されます。 静的


19) Java のパッケージの利点は何ですか?

Java でパッケージを定義することにはさまざまな利点があります。

  • パッケージは名前の衝突を回避します。
  • このパッケージにより、アクセス制御が容易になります。
  • 外部には表示されず、パッケージによって使用されない非表示クラスを使用することもできます。
  • 関連するクラスを見つけやすくなります。

20) 次の Java プログラムの出力は何ですか?

 class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } } 

上記のコードの出力は次のようになります

 30Javatpoint Javatpoint1020 

説明

最初のケースでは、10 と 20 は数値として扱われ、加算されて 30 になります。今度は、それらの合計 30 が文字列として扱われ、文字列と連結されます。 ジャワトポイント 。したがって、出力は次のようになります。 30ジャワポイント

2 番目のケースでは、文字列 Javatpoint が 10 と連結されて文字列になります。 ジャワトポイント10 これを 20 と連結すると、 ジャワトポイント1020


21) 次の Java プログラムの出力は何ですか?

 class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } } 

上記のコードの出力は次のようになります

 200Javatpoint Javatpoint200 

説明

最初のケースでは、最初に数値 10 と 20 が乗算され、次に結果の 200 が文字列として扱われ、その文字列と連結されます。 ジャワトポイント 出力を生成する 200ジャワポイント

2 番目のケースでは、乗算の優先順位が加算よりも高いため、数値 10 と 20 が最初に乗算されて 200 になります。結果の 200 は文字列として扱われ、文字列と連結されます。 ジャワトポイント 次のように出力を生成します ジャワトポイント200


22) 次の Java プログラムの出力は何ですか?

 class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } } 

上記のコードでは、for ループの 2 番目の部分でブール値が必要であり、整数値 (つまり 0) を指定しているため、コンパイル時エラーが発生します。


コア Java - OOP の概念: 最初の OOP インタビューの質問

面接では 50 以上の OOP (オブジェクト指向プログラミングとシステム) の質問が与えられます。ただし、理解を深めるために、コンストラクターのインタビューの質問、静的インタビューの質問、継承のインタビューの質問、抽象化のインタビューの質問、ポリモーフィズムのインタビューの質問など、多くのセクションに分類されています。


23) オブジェクト指向パラダイムとは何ですか?

これは、オブジェクトが属するクラスで定義されたデータとメソッドを持つオブジェクトに基づくプログラミング パラダイムです。オブジェクト指向パラダイムは、モジュール性と再利用性の利点を組み込むことを目的としています。オブジェクトは、相互に対話してアプリケーションやプログラムを設計するクラスのインスタンスです。オブジェクト指向パラダイムには次のような特徴があります。

  • プログラム設計ではボトムアップのアプローチに従います。
  • オブジェクトのデータを操作するメソッドを使用してデータに焦点を当てる
  • カプセル化や抽象化などの概念が含まれており、複雑さをユーザーから隠し、機能のみを表示します。
  • 継承、抽象化などのリアルタイム アプローチを実装します。
  • オブジェクト指向パラダイムの例には、C++、Simula、Smalltalk、Python、C# などがあります。

24) オブジェクトとは何ですか?

オブジェクトは、何らかの状態と動作を持つリアルタイム エンティティです。 Java では、オブジェクトは、オブジェクトの状態としてのインスタンス変数と、オブジェクトの動作としてのメソッドを持つクラスのインスタンスです。クラスのオブジェクトは、 新しい キーワード。


25) オブジェクト指向プログラミング言語とオブジェクトベース プログラミング言語の違いは何ですか?

オブジェクト指向言語とオブジェクトベース言語の間には、次のような基本的な違いがあります。

  • オブジェクト指向言語は OOP のすべての概念に従っていますが、オブジェクトベース言語は継承やポリモーフィズムなどの OOP のすべての概念に従っているわけではありません。
  • オブジェクト指向言語には組み込みオブジェクトがありませんが、オブジェクトベース言語には組み込みオブジェクトがあります。たとえば、JavaScript にはウィンドウ オブジェクトがあります。
  • オブジェクト指向プログラミングの例は Java、C#、Smalltalk などですが、オブジェクトベース言語の例は JavaScript、VBScript などです。

26) インスタンス変数として定義されたオブジェクト参照の初期値は何になりますか?

Java では、すべてのオブジェクト参照は null に初期化されます。


コア Java - OOP の概念: コンストラクターのインタビューの質問


27) コンストラクターとは何ですか?

コンストラクターは、オブジェクトの状態を初期化するために使用される特別なタイプのメソッドとして定義できます。これは、クラスがインスタンス化され、オブジェクトにメモリが割り当てられるときに呼び出されます。毎回、オブジェクトは 新しい キーワードを指定すると、クラスのデフォルトのコンストラクターが呼び出されます。コンストラクターの名前はクラス名と似ている必要があります。コンストラクターには明示的な戻り値の型があってはなりません。

詳細。

28) Java では何種類のコンストラクタが使用されますか?

コンストラクターで渡されるパラメーターに基づいて、Java には 2 種類のコンストラクターがあります。

    デフォルトのコンストラクター:デフォルトのコンストラクターは、値を受け入れません。デフォルト コンストラクターは主に、インスタンス変数をデフォルト値で初期化するために使用されます。また、オブジェクト作成時に便利なタスクを実行するために使用することもできます。クラスにコンストラクターが定義されていない場合、デフォルトのコンストラクターがコンパイラーによって暗黙的に呼び出されます。パラメータ化されたコンストラクタ:パラメーター化されたコンストラクターは、指定された値でインスタンス変数を初期化できるコンストラクターです。つまり、引数を受け取ることができるコンストラクターをパラメータ化されたコンストラクターと呼ぶことができます。
Java コンストラクター

29) デフォルトのコンストラクターの目的は何ですか?

デフォルト コンストラクターの目的は、オブジェクトにデフォルト値を割り当てることです。クラスにコンストラクターがない場合、Java コンパイラーはデフォルトのコンストラクターを暗黙的に作成します。

 class Student3{ int id; String name; void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student3 s1=new Student3(); Student3 s2=new Student3(); s1.display(); s2.display(); } } 
今すぐテストしてください

出力:

 0 null 0 null 

説明: 上記のクラスではコンストラクターを作成していないため、コンパイラによってデフォルトのコンストラクターが提供されます。ここでは、0 と null 値がデフォルトのコンストラクターによって提供されます。

Javaのデフォルトコンストラクタ
詳細。

30) コンストラクターは値を返しますか?

年: はい、コンストラクターはクラスの現在のインスタンスを暗黙的に返します (コンストラクターで明示的な戻り値の型を使用することはできません)。 詳細。


31)コンストラクターは継承されますか?

いいえ、コンストラクターは継承されません。


32) コンストラクターをファイナルにできますか?

いいえ、コンストラクターを最終的なものにすることはできません。

Linuxでスクリプトを実行する

33) コンストラクターをオーバーロードできますか?

はい、コンストラクターが受け入れる引数の数を変更するか、パラメーターのデータ型を変更することによって、コンストラクターをオーバーロードできます。次の例を考えてみましょう。

 class Test { int i; public Test(int k) { i=k; } public Test(int k, int m) { System.out.println('Hi I am assigning the value max(k, m) to i'); if(k>m) { i=k; } else { i=m; } } } public class Main { public static void main (String args[]) { Test test1 = new Test(10); Test test2 = new Test(12, 15); System.out.println(test1.i); System.out.println(test2.i); } } 

上記のプログラムでは、コンストラクター Test が別のコンストラクターでオーバーロードされています。コンストラクターの最初の呼び出しでは、1 つの引数を持つコンストラクターが呼び出され、i は値 10 で初期化されます。ただし、コンストラクターの 2 回目の呼び出しでは、2 つの引数を持つコンストラクターが呼び出され、i が初期化されます。値は 15 です。


34) Java のコピー コンストラクターについて何がわかりますか?

Javaにはコピーコンストラクターがありません。ただし、C++ のコピー コンストラクターのように、あるオブジェクトから別のオブジェクトに値をコピーできます。

Java では、あるオブジェクトの値を別のオブジェクトにコピーする方法がたくさんあります。彼らです:

  • コンストラクター別
  • あるオブジェクトの値を別のオブジェクトに代入することによって
  • Objectクラスのclone()メソッドによる

この例では、Java コンストラクターを使用して、あるオブジェクトの値を別のオブジェクトにコピーします。

 //Java program to initialize the values from one object to another class Student6{ int id; String name; //constructor to initialize integer and string Student6(int i,String n){ id = i; name = n; } //constructor to initialize another object Student6(Student6 s){ id = s.id; name =s.name; } void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student6 s1 = new Student6(111,'Karan'); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } } 
今すぐテストしてください

出力:

 111 Karan 111 Karan 

35) コンストラクターとメソッドの違いは何ですか?

コンストラクターとメソッドの間には多くの違いがあります。それらを以下に示します。

Java コンストラクターJavaメソッド
コンストラクターは、オブジェクトの状態を初期化するために使用されます。メソッドは、オブジェクトの動作を公開するために使用されます。
コンストラクターには戻り値の型があってはなりません。メソッドには戻り値の型が必要です。
コンストラクターは暗黙的に呼び出されます。メソッドは明示的に呼び出されます。
クラスにコンストラクターがない場合、Java コンパイラーはデフォルトのコンストラクターを提供します。いずれの場合も、このメソッドはコンパイラによって提供されません。
コンストラクター名はクラス名と同じである必要があります。メソッド名はクラス名と同じ場合もあれば、異なる場合もあります。

Java コンストラクターとメソッド

36) 次の Java プログラムの出力は何ですか?

 public class Test { Test(int a, int b) { System.out.println('a = '+a+' b = '+b); } Test(int a, float b) { System.out.println('a = '+a+' b = '+b); } public static void main (String args[]) { byte a = 10; byte b = 15; Test test = new Test(a,b); } } 

次のプログラムの出力は次のとおりです。

 a = 10 b = 15 

ここで、変数 a と b のデータ型、つまり byte は int に昇格され、2 つの整数パラメーターを持つ最初のパラメーター化されたコンストラクターが呼び出されます。


37) 次の Java プログラムの出力は何ですか?

 class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } } 

変数 i は内部で 0 に初期化されるため、プログラムの出力は 0 になります。クラス内にコンストラクターがない場合、デフォルトのコンストラクターが暗黙的に呼び出されることはわかっていますが、クラス内にコンストラクターがないため、変数 i は 0 に初期化されます。


38) 次の Java プログラムの出力は何ですか?

 class Test { int test_a, test_b; Test(int a, int b) { test_a = a; test_b = b; } public static void main (String args[]) { Test test = new Test(); System.out.println(test.test_a+' '+test.test_b); } } 

があります コンパイラエラー これは、クラスに存在しない main メソッド内にデフォルトのコンストラクターへの呼び出しがあるためです。ただし、クラス Test にはパラメーター化されたコンストラクターが 1 つだけあります。したがって、コンストラクターによって暗黙的にデフォルトのコンストラクターが呼び出されることはありません。


コア Java - OOP の概念: 静的キーワード インタビューの質問


39) 静的変数とは何ですか?

静的変数は、従業員の会社名、学生の大学名など、すべてのオブジェクトの共通プロパティ (オブジェクトごとに一意ではない) を参照するために使用されます。静的変数は、クラス領域で 1 回だけメモリを取得します。クラスのロード時。静的変数を使用すると、プログラムのメモリ効率が向上します (メモリが節約されます)。静的変数はオブジェクトではなくクラスに属します。

 //Program of static variable class Student8{ int rollno; String name; static String college ='ITS'; Student8(int r,String n){ rollno = r; name = n; } void display (){System.out.println(rollno+' '+name+' '+college);} public static void main(String args[]){ Student8 s1 = new Student8(111,'Karan'); Student8 s2 = new Student8(222,'Aryan'); s1.display(); s2.display(); } } 
今すぐテストしてください
 Output:111 Karan ITS 222 Aryan ITS 

詳細。

40) 静的メソッドとは何ですか?

  • 静的メソッドはオブジェクトではなくクラスに属します。
  • 静的メソッドを呼び出すためにオブジェクトを作成する必要はありません。
  • 静的メソッドは、静的変数の値にアクセスして変更できます。
詳細。

41) Java 静的メソッドに適用される制限は何ですか?

静的メソッドには 2 つの主な制限が適用されます。

  • 静的メソッドでは、非静的データ メンバーを使用したり、非静的メソッドを直接呼び出すことはできません。
  • this と super は非静的であるため、静的コンテキストでは使用できません。

42) main メソッドが静的なのはなぜですか?

オブジェクトが静的メソッドを呼び出す必要がないためです。 main メソッドを非静的にした場合、JVM は最初にそのオブジェクトを作成してから main() メソッドを呼び出す必要があり、これにより余分なメモリ割り当てが発生します。 詳細。


43) 静的メソッドをオーバーライドできますか?

いいえ、静的メソッドをオーバーライドすることはできません。

44) 静的ブロックとは何ですか?

静的ブロックは、静的データ メンバーを初期化するために使用されます。これは、クラスロード時に main メソッドの前に実行されます。

 class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } } 
今すぐテストしてください
 Output: static block is invoked Hello main 

詳細。

45) main() メソッドなしでプログラムを実行できますか?

回答) いいえ、JDK 1.7 以前では静的ブロックを使用することができました。 JDK 1.7以降は不可能です。 詳細。


46) main メソッドのシグネチャから static 修飾子が削除された場合はどうなりますか?

プログラムがコンパイルされます。ただし、実行時にはエラー「NoSuchMethodError」がスローされます。


47) 静的(クラス)メソッドとインスタンスメソッドの違いは何ですか?

静的メソッドまたはクラスメソッドインスタンスメソッド
1)静的として宣言されたメソッドは、静的メソッドと呼ばれます。静的として宣言されていないメソッドは、インスタンス メソッドと呼ばれます。
2)静的メソッドを呼び出すためのオブジェクトを作成する必要はありません。オブジェクトはインスタンス メソッドを呼び出すために必要です。
3)静的コンテキスト (静的メソッド、静的ブロック、および静的ネストされたクラス) では、非静的 (インスタンス) メンバーに直接アクセスできません。静的変数と非静的変数の両方にインスタンス メソッドでアクセスできます。
4)例: public static int cube(int n){ return n*n*n;}例: public void msg(){...}。

48) コンストラクターを静的にすることはできますか?

ご存知のとおり、静的コンテキスト (メソッド、ブロック、または変数) はオブジェクトではなくクラスに属します。コンストラクターはオブジェクトの作成時にのみ呼び出されるため、コンストラクターを静的にするのは意味がありません。ただし、これを実行しようとすると、コンパイラによってコンパイラ エラーが表示されます。


49) Java で抽象メソッドを静的にすることはできますか?

Javaでは抽象メソッドを静的にするとクラスの一部となり、不要なメソッドを直接呼び出すことができます。未定義のメソッドの呼び出しはまったく役に立たないため、許可されません。


50) 抽象クラスで静的変数とメソッドを宣言できますか?

はい、抽象メソッドで静的変数とメソッドを宣言できます。オブジェクトが静的コンテキストにアクセスできるようにする必要がないことがわかっているため、抽象クラスの名前を使用して、抽象クラス内で宣言された静的コンテキストにアクセスできます。次の例を考えてみましょう。

 abstract class Test { static int i = 102; static void TestMethod() { System.out.println('hi !! I am good !!'); } } public class TestClass extends Test { public static void main (String args[]) { Test.TestMethod(); System.out.println('i = '+Test.i); } } 

出力

 hi !! I am good !! i = 102 

コア Java - OOP の概念: 継承に関するインタビューの質問


51) とは何ですか これ Javaのキーワード?

これ キーワードは、現在のオブジェクトを参照する参照変数です。 Java ではこのキーワードがさまざまに使用されます。これは、インスタンス メソッド、変数、コンストラクターなどの現在のクラス プロパティを参照するために使用できます。また、引数としてメソッドまたはコンストラクターに渡すこともできます。現在のクラス インスタンスとしてメソッドから返すこともできます。

java このキーワード
詳細。

52) このキーワードの主な用途は何ですか?

以下のような用途があります これ キーワード。

    これ現在のクラスのインスタンス変数を参照するために使用できます。これ現在のクラスメソッドを(暗黙的に)呼び出すために使用できます。これ()現在のクラス コンストラクターを呼び出すために使用できます。これメソッド呼び出しの引数として渡すことができます。これコンストラクター呼び出しの引数として渡すことができます。これメソッドから現在のクラス インスタンスを返すために使用できます。

53) 参照を割り当てることができますか? これ 変数?

いいえ、これは常に現在のクラス オブジェクトを指しており、これが Java の最終参照であるため、どの値にも割り当てることはできません。ただし、これを実行しようとすると、コンパイラ エラーが表示されます。次の例を考えてみましょう。

 public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } } 

出力

 Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error 

54) できる これ キーワードは静的メンバーを参照するために使用できますか?

はい、これは現在のクラス オブジェクトを参照する単なる参照変数であるため、このキーワードを使用して静的メンバーを参照することができます。ただし、ご存知のとおり、オブジェクトを通じて静的変数にアクセスする必要はないため、これを使用して静的メンバーを参照することはベスト プラクティスではありません。次の例を考えてみましょう。

 public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } } 

出力

 10 

55) このキーワードを使用してコンストラクターの連鎖をどのように行うことができますか?

コンストラクター チェーンを使用すると、現在のクラス オブジェクトに関して、クラスの 1 つのコンストラクターを別のコンストラクターから呼び出すことができます。このキーワードを使用して、同じクラス内でコンストラクターの連鎖を実行できます。このキーワードを使用してコンストラクターの連鎖を実現する方法を示す次の例を考えてみましょう。

 public class Employee { int id,age; String name, address; public Employee (int age) { this.age = age; } public Employee(int id, int age) { this(age); this.id = id; } public Employee(int id, int age, String name, String address) { this(id, age); this.name = name; this.address = address; } public static void main (String args[]) { Employee emp = new Employee(105, 22, 'Vikas', 'Delhi'); System.out.println('ID: '+emp.id+' Name:'+emp.name+' age:'+emp.age+' address: '+emp.address); } } 

出力

 ID: 105 Name:Vikas age:22 address: Delhi 

56) これを現在のクラスオブジェクト自体ではなくメソッドに渡すことの利点は何ですか?

ご存知のとおり、これは現在のクラス オブジェクトを参照するため、現在のクラス オブジェクトに似ている必要があります。ただし、これを現在のクラス オブジェクトの代わりにメソッドに渡すことには、主に 2 つの利点があります。

  • これは最終変数です。したがって、これを新しい値に割り当てることはできませんが、現在のクラス オブジェクトは最終的なものではなく、変更できる可能性があります。
  • これは同期ブロックで使用できます。

57) 相続とは何ですか?

継承は、あるオブジェクトが別のクラスの別のオブジェクトのすべてのプロパティと動作を取得するメカニズムです。コードの再利用とメソッドのオーバーライドに使用されます。 Java の継承の背後にある考え方は、既存のクラスを基にして新しいクラスを作成できるということです。既存のクラスから継承する場合、親クラスのメソッドとフィールドを再利用できます。さらに、現在のクラスに新しいメソッドとフィールドを追加することもできます。継承は、親子関係とも呼ばれる IS-A 関係を表します。

Java には 5 種類の継承があります。

  • 単一レベルの継承
  • マルチレベルの継承
  • 多重継承
  • 階層的な継承
  • ハイブリッド継承

Java ではクラスを介した多重継承はサポートされていません。

詳細。

58) Java ではなぜ継承が使用されるのですか?

Java で継承を使用すると、以下に示すさまざまな利点があります。

  • 継承によりコードの再利用が可能になります。派生クラスは、メソッドの特定の実装を提供する必要がない限り、基本クラスのメソッドを再定義する必要はありません。
  • 実行時のポリモーフィズムは、継承を使用しないと実現できません。
  • リアルタイム オブジェクトを使用してクラスの継承をシミュレートできるため、OOP がより現実的になります。
  • 継承によりデータが隠蔽されます。基本クラスはプライベートにすることで、派生クラスから一部のデータを隠すことができます。
  • メソッドのオーバーライドは継承なしでは実現できません。メソッドをオーバーライドすることにより、基本クラスに含まれるいくつかの基本メソッドの特定の実装を与えることができます。

59) すべてのクラスのスーパークラスはどのクラスですか?

オブジェクト クラスは、Java の他のすべてのクラスのスーパークラスです。


60) Java では多重継承がサポートされていないのはなぜですか?

複雑さを軽減して言語を簡素化するために、Java では多重継承はサポートされていません。 A、B、C が 3 つのクラスであるシナリオを考えてみましょう。 C クラスは A クラスと B クラスを継承します。 A クラスと B クラスが同じメソッドを持ち、それを子クラスのオブジェクトから呼び出すと、A クラスのメソッドを呼び出すのか、B クラスのメソッドを呼び出すのかが曖昧になります。

コンパイル時エラーは実行時エラーよりも優れているため、2 つのクラスを継承すると Java はコンパイル時エラーを返します。したがって、同じメソッドを使用しても、異なるメソッドを使用しても、コンパイル時にエラーが発生します。

 class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were Public Static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } } 
今すぐテストしてください
 Compile Time Error 

61) 集計とは何ですか?

集約は、集約クラスが所有するクラスへの参照を含む 2 つのクラス間の関係として定義できます。集約は次のように説明するのが最も適切です。 があります 関係。たとえば、年齢、名前、給与などのさまざまなフィールドを持つ集約クラス Employee には、住所 1、市区町村、州、PIN コードなどのさまざまなフィールドを持つ Address クラスのオブジェクトも含まれています。つまり、Employee(クラス)はAddressクラスのオブジェクトを持っていると言えます。次の例を考えてみましょう。

アドレス.java

 public class Address { String city,state,country; public Address(String city, String state, String country) { this.city = city; this.state = state; this.country = country; } } 

従業員.java

 public class Emp { int id; String name; Address address; public Emp(int id, String name,Address address) { this.id = id; this.name = name; this.address=address; } void display(){ System.out.println(id+' '+name); System.out.println(address.city+' '+address.state+' '+address.country); } public static void main(String[] args) { Address address1=new Address('gzb','UP','india'); Address address2=new Address('gno','UP','india'); Emp e=new Emp(111,'varun',address1); Emp e2=new Emp(112,'arun',address2); e.display(); e2.display(); } } 

出力

 111 varun gzb UP india 112 arun gno UP india 

62) 構成とは何ですか?

あるクラスの参照を他のクラス内に保持することは、合成として知られています。オブジェクトが他のオブジェクトを含むとき、含まれるオブジェクトがコンテナ オブジェクトの存在なしでは存在できない場合、それを合成といいます。言い換えれば、合成は 2 つのオブジェクト間のより強い関係を表す集約の特殊なケースであると言えます。例: クラスには学生がいます。学生はクラスなしでは存在できません。クラスと生徒の間には構図が存在します。


63) 集約と合成の違いは何ですか?

集合は弱い関係を表すのに対し、合成は強い関係を表します。たとえば、バイクにはインジケーター(集合)がありますが、バイクにはエンジン(構成)があります。


64) なぜ Java はポインタをサポートしないのですか?

ポインタはメモリアドレスを参照する変数です。これらは安全ではなく、理解するのが複雑であるため、Java では使用されません。


65) Javaのスーパーとは何ですか?

素晴らしい Java のキーワードは、直接の親クラス オブジェクトを参照するために使用される参照変数です。サブクラスのインスタンスを作成するたびに、スーパー参照変数によって参照される親クラスのインスタンスが暗黙的に作成されます。 super() は、super または this がない場合、コンパイラによってクラス コンストラクター内で暗黙的に呼び出されます。

 class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); } } 
今すぐテストしてください

出力:

 animal is created dog is created 
詳細。

66) super キーワードを使用してコンストラクターの連鎖をどのように行うことができますか?

 class Person { String name,address; int age; public Person(int age, String name, String address) { this.age = age; this.name = name; this.address = address; } } class Employee extends Person { float salary; public Employee(int age, String name, String address, float salary) { super(age,name,address); this.salary = salary; } } public class Test { public static void main (String args[]) { Employee e = new Employee(22, 'Mukesh', 'Delhi', 90000); System.out.println('Name: '+e.name+' Salary: '+e.salary+' Age: '+e.age+' Address: '+e.address); } } 

出力

 Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi 

67) スーパーキーワードの主な用途は何ですか?

スーパーキーワードには以下のような使い方があります。

  • super は、直接の親クラスのインスタンス変数を参照するために使用できます。
  • super を使用して、直接の親クラスのメソッドを呼び出すことができます。
  • super() を使用して、直接の親クラスのコンストラクターを呼び出すことができます。

68) これとスーパーキーワードの違いは何ですか?

スーパーキーワードとの違いは以下の通りです。

  • super キーワードは常に親クラス コンテキストを指しますが、このキーワードは常に現在のクラス コンテキストを指します。
  • super キーワードは主に派生クラス コンストラクター内で基本クラス変数を初期化するために使用されますが、このキーワードは主にクラス コンストラクターに渡されるときにローカル変数とインスタンス変数を区別するために使用されます。
  • super と this はコンストラクター内の最初のステートメントである必要があります。そうでない場合、コンパイラーはエラーをスローします。

69) 次の Java プログラムの出力は何ですか?

 class Person { public Person() { System.out.println('Person class constructor called'); } } public class Employee extends Person { public Employee() { System.out.println('Employee class constructor called'); } public static void main (String args[]) { Employee e = new Employee(); } } 

出力

 Person class constructor called Employee class constructor called 

説明

super() は、派生クラスのコンストラクター内に super() または this() が明示的に含まれていない場合、コンパイラーによって暗黙的に呼び出されます。したがって、この場合は、まず Person クラスのコンストラクターが呼び出され、次に Employee クラスのコンストラクターが呼び出されます。


70) コンストラクター内で this() と super() の両方を使用できますか?

いいえ、this() と super() はクラス コンストラクターの最初のステートメントでなければならないためです。

例:

 public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } } 

出力:

 Test.java:5: error: call to this must be first statement in constructor 

71)オブジェクトのクローン作成とは何ですか?

オブジェクトのクローン作成は、オブジェクトの正確なコピーを作成するために使用されます。 Object クラスの clone() メソッドは、オブジェクトのクローンを作成するために使用されます。の java.lang.Cloneable インターフェイスは、オブジェクト クローンを作成するクラスによって実装される必要があります。 Cloneable インターフェースを実装していない場合、 clone() メソッドは CloneNotSupportedException を生成します。

 protected Object clone() throws CloneNotSupportedException 
詳細。

コア Java - OOP の概念: メソッドのオーバーロードに関するインタビューの質問


72) メソッドのオーバーロードとは何ですか?

メソッドのオーバーロードは、名前は同じだがシグネチャが異なる複数のメソッドを作成できるポリモーフィズム手法です。メソッドのオーバーロードは 2 つの方法で実現できます。

  • 引数の数を変更することで
  • 引数のデータ型を変更する

メソッドのオーバーロードにより、プログラムの可読性が向上します。メソッドのオーバーロードは、プログラムを迅速に理解するために実行されます。

詳細。

73) Java で戻り値の型を変更してもメソッドのオーバーロードができないのはなぜですか?

Java では、あいまいさを避けるため、プログラムの戻り値の型を変更することによってメソッドのオーバーロードを行うことはできません。

 class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }} 
今すぐテストしてください

出力:

 Compile Time Error: method add(int, int) is already defined in class Adder 
詳細。

74) メソッドを静的にすることでオーバーロードできますか?

いいえ、メソッドに static キーワードを適用するだけではメソッドをオーバーロードできません (パラメータの数と型は同じです)。次の例を考えてみましょう。

 public class Animal { void consume(int a) { System.out.println(a+' consumed!!'); } static void consume(int a) { System.out.println('consumed static '+a); } public static void main (String args[]) { Animal a = new Animal(); a.consume(10); Animal.consume(20); } } 

出力

 Animal.java:7: error: method consume(int) is already defined in class Animal static void consume(int a) ^ Animal.java:15: error: non-static method consume(int) cannot be referenced from a static context Animal.consume(20); ^ 2 errors 

75) main() メソッドをオーバーロードできますか?

はい、メソッドのオーバーロードを使用すると、Java プログラム内に任意の数の main メソッドを含めることができます。

詳細。

76) 型昇格によるメソッドのオーバーロードとは何ですか?

「型のプロモーションはメソッドのオーバーロードです」とは、完全に一致するデータ型が見つからない場合に、あるデータ型を別のデータ型に暗黙的にプロモートできることを意味します。

型プロモーションを使用した Java メソッドのオーバーロード

上の図に示すように、バイトは short、int、long、float、または double にプロモートできます。 short データ型は、int、long、float、または double に昇格できます。 char データ型は、int、long、float、double などに昇格できます。次の例を考えてみましょう。

 class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } } 
今すぐテストしてください

出力

 40 60 

77) 次の Java プログラムの出力は何ですか?

 class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } } 

出力

 OverloadingCalculation3.java:7: error: reference to sum is ambiguous obj.sum(20,20);//now ambiguity ^ both method sum(int,long) in OverloadingCalculation3 and method sum(long,int) in OverloadingCalculation3 match 1 error 

説明

同じ名前 (sum) で定義されたメソッドが 2 つあります。最初のメソッドは整数型と整数型を受け入れますが、2 番目のメソッドは整数型と整数型を受け入れます。渡されるパラメータは a = 20、b = 20 です。整数リテラルと長整数リテラルの間に明確な区別がないため、どのメソッドが呼び出されるのかはわかりません。これは曖昧さの場合です。したがって、コンパイラはエラーをスローします。


コア Java - OOP の概念: インタビューの質問をオーバーライドするメソッド


78) メソッドオーバーライドとは:

サブクラスが、その親クラスによってすでに提供されているメソッドの特定の実装を提供する場合、それはメソッドのオーバーライドと呼ばれます。これは、実行時のポリモーフィズムとインターフェイス メソッドの実装に使用されます。

メソッドオーバーライドのルール

  • メソッドは親クラスと同じ名前を持つ必要があります。
  • メソッドには、親クラスと同じシグネチャが必要です。
  • 2 つのクラス間には IS-A 関係が必要です。
詳細。


79) 静的メソッドをオーバーライドできますか?

いいえ、静的メソッドはオブジェクトではなくクラスの一部であるため、オーバーライドすることはできません。


80) 静的メソッドをオーバーライドできないのはなぜですか?

これは、静的メソッドはクラスの一部であり、クラスにバインドされているのに対し、インスタンス メソッドはオブジェクトにバインドされており、静的メソッドはクラス領域にメモリを取得し、インスタンスはヒープ内のメモリを取得するためです。


81) オーバーロードされたメソッドをオーバーライドできますか?

はい。


82) メソッドのオーバーロードとオーバーライドの違い。

メソッドのオーバーロードメソッドのオーバーライド
1) メソッドのオーバーロードにより、プログラムの可読性が向上します。メソッドのオーバーライドは、スーパークラスによってすでに提供されているメソッドの特定の実装を提供します。
2) クラス内でメソッドのオーバーロードが発生します。メソッドのオーバーライドは、間に IS-A 関係がある 2 つのクラスで発生します。
3) この場合、パラメータは異なる必要があります。この場合、パラメータは同じである必要があります。

83) プライベート メソッドをオーバーライドできますか?

いいえ、プライベート メソッドをオーバーライドすることはできません。プライベート メソッドのスコープはクラス内に制限されており、クラス外からはアクセスできないためです。


84) サブクラスでオーバーライドされたメソッドのスコープを変更できますか?

はい、サブクラスでオーバーライドされたメソッドのスコープを変更できます。ただし、このメソッドのアクセシビリティを低下させることはできないことに注意する必要があります。メソッドのアクセシビリティを変更するときは、次の点に注意する必要があります。

  • プライベートは、保護された、パブリック、またはデフォルトに変更できます。
  • 保護されたものはパブリックまたはデフォルトに変更できます。
  • デフォルトはパブリックに変更できます。
  • 大衆は常に大衆であり続ける。

85) サブクラスでオーバーライドするときに、スーパークラス メソッドの throws 節を変更できますか?

はい、サブクラスでオーバーライドしながら、スーパークラス メソッドの throws 節を変更できます。ただし、例外処理の場合にオーバーライドする際に従うべきルールがいくつかあります。

  • スーパークラスのメソッドが例外を宣言していない場合、サブクラスのオーバーライドされたメソッドはチェック済み例外を宣言できませんが、非チェック例外を宣言できます。
  • スーパークラス メソッドが例外を宣言した場合、サブクラスでオーバーライドされたメソッドは同じサブクラス例外を宣言するか、例外を宣言できませんが、親例外を宣言することはできません。

86) 次の Java プログラムの出力は何ですか?

 class Base { void method(int a) { System.out.println('Base class method called with integer a = '+a); } void method(double d) { System.out.println('Base class method called with double d ='+d); } } class Derived extends Base { @Override void method(double d) { System.out.println('Derived class method called with double d ='+d); } } public class Main { public static void main(String[] args) { new Derived().method(10); } } 

出力

 Base class method called with integer a = 10 

説明

Method() は Base クラスでオーバーロードされますが、Double 型をパラメータとして Derived クラスで派生されます。メソッド呼び出しでは、整数が渡されます。

87) Java で仮想関数を使用できますか?

はい、Java のすべての関数はデフォルトで仮想です。


88) 共変戻り型とは何ですか?

java5以降、サブクラスオーバーライドメソッドの戻り値の型がサブクラス型であれば、戻り値の型を変更することで任意のメソッドをオーバーライドできるようになりました。これは、共変の戻り値の型として知られています。共変戻り値の型は、戻り値の型がサブクラスと同じ方向に変化する可能性があることを指定します。

 class A{ A get(){return this;} } class B1 extends A{ B1 get(){return this;} void message(){System.out.println('welcome to covariant return type');} public static void main(String args[]){ new B1().get().message(); } } 
今すぐテストしてください
 Output: welcome to covariant return type 
詳細。

89) 次の Java プログラムの出力は何ですか?

 class Base { public void baseMethod() { System.out.println('BaseMethod called ...'); } } class Derived extends Base { public void baseMethod() { System.out.println('Derived method called ...'); } } public class Test { public static void main (String args[]) { Base b = new Derived(); b.baseMethod(); } } 

出力

 Derived method called ... 

説明

Base クラスのメソッド、つまり、baseMethod() は、派生クラスでオーバーライドされます。 Test クラスでは、参照変数 b (Base クラス型) は Derived クラスのインスタンスを参照します。ここでは、Base クラスと Derived クラスの間でランタイムポリモーフィズムが実現されています。コンパイル時に、Base クラスでメソッド baseMethod の存在がチェックされます。存在する場合、プログラムはコンパイルされます。存在しない場合は、コンパイラ エラーが表示されます。この場合、baseMethod は Base クラスに存在します。したがって、正常にコンパイルされます。ただし、実行時に、baseMethod が派生クラスによってオーバーライドされているかどうかがチェックされ、オーバーライドされている場合は派生クラスのメソッドが呼び出され、そうでない場合は Base クラスのメソッドが呼び出されます。この場合、派生クラスはbaseMethodをオーバーライドします。したがって、派生クラスのメソッドが呼び出されます。


コア Java - OOP の概念: 最後のキーワード インタビューの質問


90) 最後の変数は何ですか?

Java では、final 変数はユーザーによる更新を制限するために使用されます。最終変数を初期化すると、その値は変更できません。言い換えれば、最終変数は一度値が割り当てられると、それ以降は決して変更できないと言えます。値が割り当てられていない最後の変数は、クラス コンストラクターを通じてのみ割り当てることができます。

Javaの最後のキーワード
 class Bike9{ final int speedlimit=90;//final variable void run(){ speedlimit=400; } public static void main(String args[]){ Bike9 obj=new Bike9(); obj.run(); } }//end of class 
今すぐテストしてください
 Output:Compile Time Error 
詳細。

91) 最終的な方法は何ですか?

メソッドを Final メソッドに変更した場合、それをオーバーライドすることはできません。 詳細。

 class Bike{ final void run(){System.out.println('running');} } class Honda extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda honda= new Honda(); honda.run(); } } 
今すぐテストしてください
 Output:Compile Time Error 

92) 最後のクラスは何ですか?

クラスをfinalにすると、それをサブクラスに継承できなくなります。

 final class Bike{} class Honda1 extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda1 honda= new Honda1(); honda.run(); } } 
今すぐテストしてください
 Output:Compile Time Error 
詳細。

93) 最後の空白変数は何ですか?

宣言時に初期化されていない最終変数は、最終空白変数と呼ばれます。最後の空の変数を直接初期化することはできません。代わりに、クラス コンストラクターを使用して初期化する必要があります。これは、ユーザーが PAN 番号など、他人に変更してはいけないデータを持っている場合に便利です。次の例を考えてみましょう。

 class Student{ int id; String name; final String PAN_CARD_NUMBER; ... } 
詳細。

94) 最後の空白変数を初期化できますか?

はい、静的でない場合は、コンストラクターで初期化できます。静的な空の最終変数の場合、静的ブロック内でのみ初期化できます。 詳細。


95) main メソッドを Final として宣言できますか?

はい、main メソッドを public static Final void main(String[] args){} として宣言できます。


96) 次の Java プログラムの出力は何ですか?

 class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } } 

出力

 20 

説明

i は空白の最終変数なので。初期化は1回のみ可能です。 20 に初期化しました。したがって、20 が出力されます。


97) 次の Java プログラムの出力は何ですか?

 class Base { protected final void getInfo() { System.out.println('method of Base class'); } } public class Derived extends Base { protected final void getInfo() { System.out.println('method of Derived class'); } public static void main(String[] args) { Base obj = new Base(); obj.getInfo(); } } 

出力

 Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error 

説明

getDetails() メソッドは最終的なメソッドです。したがって、サブクラスでオーバーライドすることはできません。


98) コンストラクターをfinalとして宣言できますか?

コンストラクターは決して継承されないため、final として宣言することはできません。コンストラクターは通常のメソッドではありません。したがって、コンストラクターをfinalとして宣言するのは意味がありません。ただし、そうしようとすると、コンパイラによってエラーがスローされます。


99) インターフェースをfinalとして宣言できますか?

いいえ、インターフェイスを Final として宣言することはできません。その定義を提供するにはインターフェイスを何らかのクラスによって実装する必要があるからです。したがって、インターフェースをfinalにする意味はありません。ただし、これを実行しようとすると、コンパイラによってエラーが表示されます。


100) 最終メソッドと抽象メソッドの違いは何ですか?

Final メソッドと抽象メソッドの主な違いは、抽象メソッドを定義するにはサブクラスでオーバーライドする必要があるため、抽象メソッドを Final にできないことです。