top 50 core java interview questions
最もよくあるJavaインタビューの質問と回答の例:
このチュートリアルでは、初心者および経験豊富な候補者向けの、ほぼ50以上の重要なコアJava面接の質問について説明しました。
JAVA面接の質問に関するこの投稿は、面接を目的としたJavaプログラミングの基本概念を理解するのに役立つように作成されています。ここでは、すべての重要なJAVAの概念を、理解しやすい例とともに説明します。
このチュートリアルでは、基本的なJava定義、OOPの概念、アクセス指定子、コレクション、例外、スレッド、シリアル化などのJAVAトピックを、完全に準備するための例とともに取り上げます。 自信を持ってJAVAインタビューに直面する。
最も人気のあるJavaインタビューの質問と回答
以下に示すのは、最も重要でよくあるJavaプログラミングの基本および高度な面接の質問と詳細な回答の包括的なリストです。
Q#1)JAVAとは何ですか?
回答: Javaは高水準プログラミング言語であり、プラットフォームに依存しません。
Javaはオブジェクトのコレクションです。これは、SunMicrosystemsによって開発されました。 Javaを使用して開発されたアプリケーション、Webサイト、およびゲームはたくさんあります。
Q#2)JAVAの特徴は何ですか?
回答:Javaの機能は次のとおりです。
- OOPの概念
- オブジェクト指向
- 継承
- カプセル化
- ポリモーフィズム
- 抽象化
- プラットフォームに依存しない: 単一のプログラムは、変更なしで異なるプラットフォームで動作します。
- ハイパフォーマンス: JIT(Just In Timeコンパイラ)は、Javaでの高性能を可能にします。 JITはバイトコードを機械語に変換し、JVMが実行を開始します。
- マルチスレッド: 実行の流れはスレッドと呼ばれます。 JVMは、メインスレッドと呼ばれるスレッドを作成します。ユーザーは、スレッドクラスを拡張するか、Runnableインターフェイスを実装することにより、複数のスレッドを作成できます。
Q#3)Javaはどのようにして高性能を実現しますか?
回答: Javaは、Just In Timeコンパイラを使用して、高いパフォーマンスを実現します。命令をバイトコードに変換するために使用されます。
Q#4)Java IDEに名前を付けますか?
回答: EclipseとNetBeansはJAVAのIDEです。
Q#5)コンストラクターとはどういう意味ですか?
回答:コンストラクターは、入隊したポイントで詳細に説明できます。
- プログラムで新しいオブジェクトが作成されると、クラスに対応するコンストラクターが呼び出されます。
- コンストラクターは、クラス名と同じ名前のメソッドです。
- ユーザーがコンストラクターを暗黙的に作成しない場合、デフォルトのコンストラクターが作成されます。
- コンストラクターはオーバーロードできます。
- ユーザーがパラメーターを使用してコンストラクターを作成した場合は、パラメーターを使用せずに別のコンストラクターを明示的に作成する必要があります。
Q#6)ローカル変数とインスタンス変数とはどういう意味ですか?
回答:
ローカル変数 メソッドと、メソッド自体の内部に存在する変数のスコープで定義されます。
インスタンス変数 はクラス内およびメソッド外で定義され、変数のスコープはクラス全体に存在します。
Q#7)クラスとは何ですか?
回答: すべてのJavaコードはクラスで定義されています。変数とメソッドがあります。
変数 クラスの状態を定義する属性です。
メソッド 正確なビジネスロジックを実行する必要がある場所です。これには、特定の要件を満たすための一連のステートメント(または)命令が含まれています。
例:
public class Addition{ //Class name declaration int a = 5; //Variable declaration int b= 5; public void add(){ //Method declaration int c = a+b; } }
Q#8)オブジェクトとは何ですか?
回答: クラスのインスタンスはオブジェクトと呼ばれます。オブジェクトには状態と動作があります。
JVMが「new()」キーワードを読み取るたびに、そのクラスのインスタンスが作成されます。
例:
public class Addition{ public static void main(String() args){ Addion add = new Addition();//Object creation } }
上記のコードは、Additionクラスのオブジェクトを作成します。
Q#9)OOPの概念は何ですか?
回答:OOPの概念は次のとおりです。
- 継承
- カプセル化
- ポリモーフィズム
- 抽象化
- インターフェース
推奨読書= >> トップOOPインタビューの質問
Q#10)継承とは何ですか?
回答: 継承とは、あるクラスを別のクラスに拡張できることを意味します。コードをあるクラスから別のクラスに再利用できるようにします。既存のクラスはスーパークラスと呼ばれ、派生クラスはサブクラスと呼ばれます。
例:
Super class: public class Manupulation(){ } Sub class: public class Addition extends Manipulation(){ }
継承は、一般のメンバーと保護されたメンバーにのみ適用されます。プライベートメンバーは継承できません。
Q#11)カプセル化とは何ですか?
回答:カプセル化の目的:
- コードを他の人から保護します。
- コードの保守性。
例:
「a」を整数変数として宣言しているので、負の値にすることはできません。
public class Addition(){ int a=5; }
誰かが正確な変数を「 a = -5 ' それからそれは悪いです。
この問題を克服するには、以下の手順に従う必要があります。
- 変数をプライベートまたは保護することができます。
- setやgetなどのパブリックアクセサメソッドを使用します。
上記のコードを次のように変更できるようにします。
public class Addition(){ private int a = 5; //Here the variable is marked as private }
以下のコードは、ゲッターとセッターを示しています。
変数の設定中に条件を指定できます。
get A(){ } set A(int a){ if(a>0){// Here condition is applied ......... } }
カプセル化の場合、すべてのインスタンス変数をプライベートにし、それらの変数のセッターとゲッターを作成する必要があります。これにより、データに直接アクセスするのではなく、他の人がセッターを呼び出すように強制されます。
Q#12)ポリモーフィズムとは何ですか?
回答: ポリモーフィズムは多くの形態を意味します。
単一のオブジェクトは、ポリモーフィズムと呼ばれる参照型に応じて、スーパークラスまたはサブクラスを参照できます。
例:
Public class Manipulation(){ //Super class public void add(){ } } public class Addition extends Manipulation(){ // Sub class public void add(){ } public static void main(String args()){ Manipulation addition = new Addition();//Manipulation is reference type and Addition is reference type addition.add(); } }
Manipulation参照型を使用して、Additionクラスの「add()」メソッドを呼び出すことができます。この能力は多形性として知られています。ポリモーフィズムは オーバーライド のためではなく 過負荷 。
Q#13)メソッドのオーバーライドとはどういう意味ですか?
回答:サブクラスメソッドがスーパークラスメソッドで以下の条件を満たす場合、メソッドのオーバーライドが発生します。
- メソッド名は同じである必要があります
- 引数は同じである必要があります
- 戻り値の型も同じである必要があります
オーバーライドの主な利点は、サブクラスがスーパークラスよりもそのサブクラスタイプに関する特定の情報を提供できることです。
例:
public class Manipulation{ //Super class public void add(){ ……………… } } Public class Addition extends Manipulation(){ Public void add(){ ……….. } Public static void main(String args()){ Manipulation addition = new Addition(); //Polimorphism is applied addition.add(); // It calls the Sub class add() method } }
add.add() メソッドは、親クラスではなく、サブクラスのadd()メソッドを呼び出します。したがって、これはスーパークラスのメソッドをオーバーライドし、メソッドのオーバーライドとして知られています。
Q#14)オーバーロードとはどういう意味ですか?
回答: メソッドのオーバーロードは、異なるクラスまたは同じクラス内で発生します。
メソッドのオーバーロードの場合、サブクラスメソッドは、同じクラス自体のスーパークラスメソッド(または)メソッドで以下の条件を満たす必要があります。
- 同じメソッド名
- さまざまな引数タイプ
- 異なる戻り値の型がある場合があります
例:
public class Manipulation{ //Super class public void add(String name){ //String parameter ……………… } } Public class Addition extends Manipulation(){ Public void add(){//No Parameter ……….. } Public void add(int a){ //integer parameter } Public static void main(String args()){ Addition addition = new Addition(); addition.add(); } }
ここで、add()メソッドには、Additionクラスのさまざまなパラメーターがあり、スーパークラスと同じクラスでオーバーロードされます。
注意: 多態性は、メソッドのオーバーロードには適用できません。
Q#15)インターフェースとはどういう意味ですか?
回答: Javaでは多重継承を実現できません。この問題を克服するために、インターフェースの概念が導入されています。
インターフェイスは、メソッド宣言のみを含み、メソッド実装を含まないテンプレートです。
例:
Public abstract interface IManupulation{ //Interface declaration Public abstract void add();//method declaration public abstract void subtract(); }
- インターフェイスのすべてのメソッドは内部にあります パブリックアブストラクトボイド 。
- インターフェイスのすべての変数は内部にあります パブリックスタティックファイナル それは定数です。
- クラスはインターフェースを実装できますが、拡張することはできません。
- インターフェイスを実装するクラスは、インターフェイスで宣言されたすべてのメソッドの実装を提供する必要があります。
public class Manupulation implements IManupulation{ //Manupulation class uses the interface Public void add(){ …………… } Public void subtract(){ ……………. } }
Q#16)抽象クラスとはどういう意味ですか?
回答: クラス名の前に「Abstract」キーワードを使用すると、Abstractクラスを作成できます。抽象クラスは、具象クラスである「Abstract」メソッドと「Non-abstract」メソッドの両方を持つことができます。
抽象的方法:
実装ではなく宣言のみを持つメソッドは抽象メソッドと呼ばれ、「abstract」というキーワードがあります。宣言はセミコロンで終わります。
例:
public abstract class Manupulation{ public abstract void add();//Abstract method declaration Public void subtract(){ } }
- 抽象クラスには、非抽象メソッドも含まれる場合があります。
- Abstractクラスを拡張する具象サブクラスは、抽象メソッドの実装を提供する必要があります。
Q#17)配列と配列リストの違い。
回答: 配列と配列リストの違いは、以下の表から理解できます。
アレイ | 配列リスト |
---|---|
サイズは配列宣言時に指定する必要があります。 String () name = new String (2) | サイズは必要ない場合があります。サイズを動的に変更します。 ArrayList名=新しいArrayList |
オブジェクトを配列に入れるには、インデックスを指定する必要があります。 name (1) =“ book” | インデックスは必要ありません。 name.add(“ book”) |
配列は型パラメーター化されていません | Java5.0のArrayListはパラメーター化されています。 例:この山かっこは、文字列のリストを意味するタイプパラメータです。 |
Q#18)文字列、文字列ビルダー、文字列バッファの違い。
回答:
ストリング: 文字列変数は「定数文字列プール」に格納されます。文字列参照が「定数文字列プール」に存在する古い値を変更すると、それを消去することはできません。
例:
文字列名=「本」;
定数文字列プール
。
名前の値が「book」から「pen」に変更された場合。
定数文字列プール
その後、古い値は定数文字列プールに残ります。
文字列バッファ:
- ここでは、文字列値がスタックに格納されます。値が変更されると、新しい値が古い値に置き換わります。
- スレッドセーフな文字列バッファが同期されます。
- パフォーマンスはStringBuilderよりも遅くなります。
例:
文字列バッファ名=” book”;
名前の値が「ペン」に変更されると、「本」はスタックから消去されます。
文字列ビルダー:
これは、同期されていない安全にスレッド化されていない文字列ビルダーを除いて、文字列バッファと同じです。したがって、明らかにパフォーマンスは高速です。
Q#19)パブリックおよびプライベートアクセス指定子について説明してください。
回答: メソッドとインスタンス変数はメンバーと呼ばれます。
公衆:
パブリックメンバーは、同じパッケージと、他のパッケージ用の外部パッケージに表示されます。
クラスAのパブリックメンバーは、クラスB(同じパッケージ)とクラスC(異なるパッケージ)に表示されます。
民間:
プライベートメンバーは同じクラスにのみ表示され、同じパッケージ内の他のクラスや外部パッケージ内のクラスには表示されません。
クラスAのプライベートメンバーは、そのクラスでのみ表示されます。クラスBとクラスCでは表示されません。
Q#20)デフォルトと保護されたアクセス指定子の違い。
回答:
デフォルト: アクセス指定子のないクラスで宣言されたメソッドと変数は、デフォルトと呼ばれます。
クラスAのデフォルトのメンバーは、パッケージ内にある他のクラスには表示され、パッケージ外にあるクラスには表示されません。
したがって、クラスAのメンバーはクラスBには表示され、クラスCには表示されません。
保護:
。
ProtectedはDefaultと同じですが、クラスが拡張されると、パッケージの外部にある場合でも表示されます。
クラスAのメンバーは、パッケージ内にあるため、クラスBに表示されます。クラスCの場合は表示されませんが、クラスCがクラスAを拡張すると、パッケージの外部にある場合でも、メンバーはクラスCに表示されます。
Q#21)HashMapとHashTableの違い。
回答: HashMapとHashTableの違いは次のとおりです。
HashMap | ハッシュ表 |
---|---|
メソッドが同期されていません | 主要なメソッドが同期されます |
スレッドセーフではありません | スレッドセーフ |
イテレータは値を反復するために使用されます | 列挙子は値を反復するために使用されます |
1つのnullキーと複数のnull値を許可します | null以外は許可されません |
パフォーマンスはHashTableよりも高い | パフォーマンスが遅い |
Q#22)HashSetとTreeSetの違い。
回答: HashSetとTreeSetの違いは次のとおりです。
HashSet | TreeSet |
---|---|
挿入された要素はランダムな順序です | ソートされた順序で要素を維持します |
nullオブジェクトを保存できます | nullオブジェクトを保存できませんでした |
パフォーマンスは速い | パフォーマンスが遅い |
Q#23)抽象クラスとインターフェイスの違い。
回答:抽象クラスとインターフェイスの違いは次のとおりです。
抽象クラス:
- 抽象クラスにはデフォルトのコンストラクターがあり、具象サブクラスがインスタンス化されるたびに呼び出されます。
- これには、抽象メソッドと非抽象メソッドが含まれています。
- Abstractクラスを拡張するクラスでは、すべてのメソッドを実装する必要はありません。具象サブクラスに実装する必要があるのは、Abstractメソッドのみです。
- 抽象クラスにはインスタンス変数が含まれています。
インターフェース:
- コンストラクターがなく、インスタンス化できませんでした。
- 抽象メソッドのみを宣言する必要があります。
- インターフェイスを実装するクラスは、すべてのメソッドの実装を提供する必要があります。
- インターフェイスには定数のみが含まれています。
Q #24)Javaのコレクションの意味は何ですか?
回答: コレクションは、オブジェクトを格納し、デザインを操作してオブジェクトを格納するように設計されたフレームワークです。
コレクションは、次の操作を実行するために使用されます。
- 検索中
- 並べ替え
- 操作
- 挿入
- 削除
オブジェクトのグループは、コレクションと呼ばれます。収集するためのすべてのクラスとインターフェースは、Javautilパッケージで利用できます。
Q#25)コレクションで使用できるすべてのクラスとインターフェイスは何ですか?
回答: 以下に、コレクションで使用できるクラスとインターフェイスを示します。
インターフェイス:
- コレクション
- リスト
- セットする
- 地図
- ソートされたセット
- ソートされたマップ
- キュー
クラス:
- リスト:
- 配列リスト
- ベクター
- リンクリスト
セット:
- ハッシュセット
- リンクされたハッシュセット
- ツリーセット
マップ:
- ハッシュマップ
- ハッシュ表
- TreeMap
- リンクされたハッシュマップ
キュー:
- 優先キュー
Q#26)コレクション内の順序付けと並べ替えとはどういう意味ですか?
回答:
順序付けられました: これは、コレクションに格納されている値が、コレクションに追加された値に基づいていることを意味します。したがって、コレクションの値を特定の順序で繰り返すことができます。
並べ替え: 並べ替えメカニズムは、特定のコレクションで並べ替えられたオブジェクトのグループがオブジェクトのプロパティに基づくように、内部または外部に適用できます。
Q#27)コレクションで利用できるさまざまなリストについて説明してください。
回答: リストに追加される値はインデックス位置に基づいており、インデックス位置順に並べられています。複製は許可されます。
リストの種類は次のとおりです。
a)配列リスト:
- 高速反復と高速ランダムアクセス。
- これは(インデックスによる)順序付けられたコレクションであり、ソートされていません。
- ランダムアクセスインターフェイスを実装します。
例:
LinuxはWindowsよりどのように優れていますか
public class Fruits{ public static void main (String ( ) args){ ArrayList names=new ArrayList (); names.add (“apple”); names.add (“cherry”); names.add (“kiwi”); names.add (“banana”); names.add (“cherry”); System.out.println (names); } }
出力:
【りんご、さくらんぼ、キウイ、バナナ、さくらんぼ】
出力から、配列リストは挿入順序を維持し、重複を受け入れます。しかし、それはソートされていません。
b)ベクトル:
配列リストと同じです。
- ベクトルメソッドは同期されます。
- スレッドセーフ。
- また、ランダムアクセスも実装しています。
- スレッドセーフは通常、パフォーマンスの低下を引き起こします。
例:
public class Fruit { public static void main (String ( ) args){ Vector names = new Vector ( ); names.add (“cherry”); names.add (“apple”); names.add (“banana”); names.add (“kiwi”); names.add (“apple”); System.out.println (“names”); } }
出力:
(さくらんぼ、りんご、バナナ、キウイ、りんご)
ベクターは挿入順序も維持し、重複を受け入れます。
c)リンクリスト:
- 要素は互いに二重にリンクされています。
- パフォーマンスは配列リストよりも遅くなります。
- 挿入と削除に適しています。
- Java 5.0では、一般的なキューメソッドpeek()、Pool()、Offer()などをサポートしています。
例:
public class Fruit { public static void main (String ( ) args){ Linkedlist names = new linkedlist ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
出力:
(バナナ、チェリー、リンゴ、キウイ、バナナ)
挿入順序を維持し、重複を受け入れます。
Q#28)コレクション内のセットとそのタイプについて説明してください。
回答: セットは独自性を気にします。重複は許可されません。ここでは、「equals()」メソッドを使用して、2つのオブジェクトが同一であるかどうかを判別します。
a)ハッシュセット:
- 順序付けされておらず、並べ替えられていません。
- オブジェクトのハッシュコードを使用して値を挿入します。
- 要件が「重複がなく、注文を気にしない」である場合にこれを使用します。
例:
public class Fruit { public static void main (String( ) args){ HashSet names = new HashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
出力:
(バナナ、チェリー、キウイ、リンゴ)
挿入順序には従いません。複製は許可されていません。
b)リンクされたハッシュセット:
- ハッシュセットの順序付けされたバージョンは、リンクされたハッシュセットとして知られています。
- すべての要素の二重リンクリストを維持します。
- 反復順序が必要な場合にこれを使用します。
例:
public class Fruit { public static void main (String( ) args){ LinkedHashSet; names = new LinkedHashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
出力:
(バナナ、チェリー、アップル、キウイ)
セットに追加された挿入順序を維持します。複製は許可されていません。
c)ツリーセット:
- これは、2つのソートされたコレクションの1つです。
- 「赤黒木」ツリー構造を使用し、要素が昇順になることを保証します。
- 比較可能な(または)コンパレーターを使用して、コンストラクターでツリーセットを構築できます。
例:
public class Fruits{ public static void main (String( )args) { Treeset names= new TreeSet( ) ; names.add(“cherry”); names.add(“banana”); names.add(“apple”); names.add(“kiwi”); names.add(“cherry”); System.out.println(names); } }
出力:
(りんご、バナナ、さくらんぼ、キウイ)
TreeSetは、要素を昇順で並べ替えます。また、重複は許可されていません。
Q#29)マップとそのタイプについて説明してください。
回答:地図 一意の識別子を気にします。一意のキーを特定の値にマップできます。これはキーと値のペアです。キーに基づいて値を検索できます。セットと同様に、マップも「equals()」メソッドを使用して、2つのキーが同じか異なるかを判別します。
マップには次のタイプがあります。
a)ハッシュマップ:
- 順序付けされていない、並べ替えられていないマップ。
- 順序を気にしない場合は、ハッシュマップが適しています。
- 1つのnullキーと複数のnull値を許可します。
例:
Public class Fruit{ Public static void main(String( ) args){ HashMap names =new HashMap( ); names.put(“key1”,“cherry”); names.put (“key2”,“banana”); names.put (“key3”,“apple”); names.put (“key4”,“kiwi”); names.put (“key1”,“cherry”); System.out.println(names); } }
出力:
{key2 =バナナ、key1 =チェリー、key4 =キウイ、key3 =アップル}
マップでは重複キーは許可されていません。
挿入順序は維持されず、並べ替えられません。
b)ハッシュテーブル:
- ベクトルキーと同様に、クラスのメソッドは同期されます。
- スレッドセーフであるため、パフォーマンスが低下します。
- nullであるものは許可されません。
例:
public class Fruit{ public static void main(String( )args){ Hashtable names =new Hashtable( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
出力:
{key2 =アップル、key1 =チェリー、key4 =キウイ、key3 =バナナ}
重複キーは許可されていません。
c) リンクされたハッシュマップ:
- 挿入順序を維持します。
- ハッシュマップより遅い。
- より速い反復が期待できます。
例:
public class Fruit{ public static void main(String( ) args){ LinkedHashMap names =new LinkedHashMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
出力:
{key2 =アップル、key1 =チェリー、key4 =キウイ、key3 =バナナ}
重複キーは許可されていません。
d)TreeMap:
- ソートされたマップ。
- ツリーセットと同様に、コンストラクターを使用してソート順を作成できます。
例:
public class Fruit{ public static void main(String( )args){ TreeMap names =new TreeMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“banana”); names.put(“key3”,“apple”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
出力:
{key1 =チェリー、key2 =バナナ、key3 =アップル、key4 =キウイ}
キーに基づいて昇順で並べ替えられます。重複キーは許可されていません。
Q#30)優先キューについて説明してください。
回答:キューインターフェイス
優先キュー: リンクリストクラスが拡張され、キューインターフェイスが実装されました。キューはリンクリストで処理できます。キューの目的は「優先イン、優先アウト」です。
したがって、要素は自然に、またはコンパレータに従って順序付けられます。要素の順序は、それらの相対的な優先順位を表します。
Q#31)例外とはどういう意味ですか?
回答: 例外は、通常の実行フロー中に発生する可能性のある問題です。メソッドは、実行時に何かが失敗したときに例外をスローする可能性があります。その例外を処理できなかった場合、実行はタスクを完了する前に終了します。
例外を処理した場合、通常のフローが続行されます。例外はjava.lang.Exceptionのサブクラスです。
例外処理の例:
try{ //Risky codes are surrounded by this block }catch(Exception e){ //Exceptions are caught in catch block }
Q#32)例外の種類は何ですか?
回答: 例外には2つのタイプがあります。以下に詳しく説明します。
a)チェックされた例外:
これらの例外は、コンパイル時にコンパイラーによってチェックされます。ランタイム例外とエラーを除いてThrowableクラスを拡張するクラスは、チェック済み例外と呼ばれます。
チェックされた例外は、適切なtry / catchで囲まれたthrowsキーワード(または)を使用して例外を宣言する必要があります。
例えば、 ClassNotFound例外
b)チェックされていない例外:
これらの例外は、コンパイラによるコンパイル時にチェックされません。コンパイラは、これらの例外の処理を強制しません。 含まれるもの:
- 算術例外
- ArrayIndexOutOfBounds例外
Q#33)例外を処理するさまざまな方法は何ですか?
回答: 例外を処理する2つの異なる方法を以下に説明します。
a)try / catchの使用:
危険なコードはtryブロックで囲まれています。例外が発生した場合、catchブロックによってキャッチされ、その後にtryブロックが続きます。
例:
class Manipulation{ public static void main(String() args){ add(); } Public void add(){ try{ addition(); }catch(Exception e){ e.printStacktrace(); } } }
b)throwsキーワードを宣言することにより:
メソッドの最後で、throwsキーワードを使用して例外を宣言できます。
例:
class Manipulation{ public static void main(String() args){ add(); } public void add() throws Exception{ addition(); } }
Q#34)例外処理の利点は何ですか?
回答:利点は次のとおりです。
- 例外が処理されても、通常の実行フローは終了しません。
- キャッチ宣言を使用して問題を特定できます
Q#35)Javaの例外処理キーワードとは何ですか?
回答:以下に、2つの例外処理キーワードを示します。
a)試してください:
危険なコードがtryブロックで囲まれている場合。 tryブロックで発生する例外は、catchブロックによってキャッチされます。 tryの後には、catch(または)finally(または)両方を続けることができます。ただし、いずれかのブロックは必須です。
b)キャッチ:
この後にtryブロックが続きます。例外はここでキャッチされます。
c)最後に:
この後に、tryブロック(または)catchブロックが続きます。このブロックは、例外に関係なく実行されます。したがって、一般的にクリーンアップコードはここに提供されます。
Q#36)例外の伝播について説明してください。
回答: 例外は、スタックの最上位にあるメソッドから最初にスローされます。キャッチされない場合は、メソッドがポップアップ表示され、取得されるまで前のメソッドに移動します。
これは例外伝播と呼ばれます。
例:
public class Manipulation{ public static void main(String() args){ add(); } public void add(){ addition(); }
上記の例から、スタックは次のようになります。
Windows7でbinファイルを開く方法
で例外が発生した場合 添加() メソッドがキャッチされず、メソッドに移動します 追加() 。その後、に移動されます メイン() メソッドを実行すると、実行の流れが停止します。これは、例外の伝播と呼ばれます。
Q#37)Javaの最後のキーワードは何ですか?
回答:
可変終了: 変数がfinalとして宣言されると、変数の値を変更できなくなります。それは定数のようなものです。
例:
最終的なint = 12;
最終的な方法: メソッドの最後のキーワードは、オーバーライドできませんでした。メソッドがfinalとしてマークされている場合、そのメソッドをサブクラスでオーバーライドすることはできません。
最終クラス: クラスがfinalとして宣言されている場合、そのクラスをサブクラス化することはできません。最終クラスを拡張できるクラスはありません。
Q#38)スレッドとは何ですか?
回答: Javaでは、実行の流れはスレッドと呼ばれます。すべてのJavaプログラムには、メインスレッドと呼ばれるスレッドが少なくとも1つあり、メインスレッドはJVMによって作成されます。ユーザーは、Threadクラスを拡張することによって(または)Runnableインターフェースを実装することによって、独自のスレッドを定義できます。スレッドは同時に実行されます。
例:
public static void main(String() args){//main thread starts here }
Q#39)Javaでスレッドを作成するにはどうすればよいですか?
回答: スレッドを作成する方法は2つあります。
a)スレッドクラスの拡張: Threadクラスを拡張し、runメソッドをオーバーライドします。スレッドはjava.lang.threadで利用できます。
例:
Public class Addition extends Thread { public void run () { } }
スレッドクラスを使用することの欠点は、すでにスレッドクラスを拡張しているため、他のクラスを拡張できないことです。クラスのrun()メソッドをオーバーロードできます。
b)Runnableインターフェースを実装します。 もう1つの方法は、実行可能なインターフェイスを実装することです。そのために、インターフェイスで定義されているrun()メソッドの実装を提供する必要があります。
例:
Public class Addition implements Runnable { public void run () { } }
Q#40)join()メソッドについて説明してください。
回答: Join()メソッドは、1つのスレッドを現在実行中のスレッドの終わりに結合するために使用されます。
例:
public static void main (String() args){ Thread t = new Thread (); t.start (); t.join (); }
上記のコードに基づいて、メインスレッドが実行を開始しました。コードに到達したとき t.start() 次に、「スレッドt」は実行のために独自のスタックを開始します。 JVMは、メインスレッドと「スレッドt」を切り替えます。
コードに到達したら t.join() 次に、「スレッドt」のみが実行されてタスクが完了し、メインスレッドのみが実行を開始します。
これは非静的な方法です。 Join()メソッドにはオーバーロードされたバージョンがあります。したがって、join()メソッドの期間についても「.s」と言うことができます。
Q#41)Threadクラスのyieldメソッドは何をしますか?
回答: yield()メソッドは、現在実行中のスレッドを実行可能状態に移行し、他のスレッドの実行を許可します。そのため、同じ優先度のスレッドを実行する機会があります。これは静的メソッドです。ロックは解除されません。
Yield()メソッドは、スレッドをRunnable状態にのみ戻し、スレッドをスリープ()、待機()(または)ブロックに戻しません。
例:
public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ Thread.yield(); } }
Q#42)wait()メソッドについて説明してください。
回答:待つ() メソッドは、スレッドを待機プールで待機させるために使用されます。スレッドの実行中にwait()メソッドが実行されると、スレッドはすぐにオブジェクトのロックを放棄し、待機プールに移動します。 Wait()メソッドは、スレッドに指定された時間待機するように指示します。
次に、notify()(または)notify all()メソッドが呼び出された後、スレッドがウェイクアップします。
Wait()およびその他の上記のメソッドは、現在実行中のスレッドが同期されたコードを完了するまで、オブジェクトをすぐにロックしません。これは主に同期で使用されます。
例:
public static void main (String() args){ Thread t = new Thread (); t.start (); Synchronized (t) { Wait(); } }
Q#43)Javaのnotify()メソッドとnotifyAll()メソッドの違い。
回答:notify()メソッドとnotifyAll()メソッドの違いを以下に示します。
notify() | notifyAll() |
---|---|
このメソッドは、待機プール内の単一スレッドをウェイクアップするためのシグナルを送信するために使用されます。 | このメソッドは、待機中のスプール内のすべてのスレッドをウェイクアップするためのシグナルを送信します。 |
Q#44)Javaでスレッドを停止する方法は?スレッド内のsleep()メソッドについて説明しますか?
回答: 次のスレッドメソッドを使用して、スレッドを停止できます。
- 睡眠
- 待っています
- ブロックされた
睡眠: Sleep()メソッドは、現在実行中のスレッドを指定された時間スリープさせるために使用されます。スレッドがウェイクアップすると、実行可能な状態に移行できます。そのため、sleep()メソッドを使用して、実行を一定期間遅らせます。
これは静的メソッドです。
例:
糸。睡眠(2000)
したがって、スレッドがスリープするのを2ミリ秒遅らせます。 Sleep()メソッドは中断されない例外をスローするため、ブロックをtry / catchで囲む必要があります。
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ try{ Thread.sleep(2000); }catch(InterruptedException e){ } }
Q#45)JavaでRunnableインターフェイスとThreadクラスをいつ使用するのですか?
回答: スレッド以外のクラスを拡張するためにクラスが必要な場合は、実行可能なインターフェイスを使用できます。これは、Javaでは1つのクラスしか拡張できないためです。
クラスを拡張しない場合は、スレッドクラスを拡張できます。
Q#46)スレッドクラスのstart()メソッドとrun()メソッドの違い。
回答: Start()メソッドは新しいスレッドを作成し、run()メソッド内のコードは新しいスレッドで実行されます。 run()メソッドを直接呼び出した場合、新しいスレッドは作成されず、現在実行中のスレッドは引き続きrun()メソッドを実行します。
Q#47)マルチスレッドとは何ですか?
回答: 複数のスレッドが同時に実行されます。各スレッドは、スレッドのフロー(または)優先度に基づいて独自のスタックを開始します。
プログラム例:
public class MultipleThreads implements Runnable { public static void main (String() args){//Main thread starts here Runnable r = new runnable (); Thread t=new thread (); t.start ();//User thread starts here Addition add=new addition (); } public void run(){ go(); }//User thread ends here }
1行目の実行時に、JVMはmainメソッドを呼び出し、メインスレッドスタックは次のようになります。
実行に達すると、 t.start() 次に、新しいスレッドが作成され、スレッドの新しいスタックも作成されます。これで、JVMは新しいスレッドに切り替わり、メインスレッドは実行可能な状態に戻ります。
2つのスタックは次のようになります。
これで、ユーザースレッドがrun()メソッド内のコードを実行しました。
run()メソッドが完了すると、JVMはメインスレッドに戻り、ユーザースレッドがタスクを完了し、スタックが消えました。
JVMは、両方のスレッドが完了するまで、各スレッドを切り替えます。これはマルチスレッドと呼ばれます。
Q#48)Javaのスレッドライフサイクルについて説明してください。
回答: スレッドの状態は次のとおりです。
- 新着
- 実行可能
- ランニング
- 実行不可(ブロック済み)
- 終了しました
- 新着: New状態では、Threadインスタンスが作成されていますが、start()メソッドはまだ呼び出されていません。現在、スレッドは生きているとは見なされません。
- 実行可能 :スレッドは、start()メソッドの呼び出し後、run()メソッドが呼び出される前に実行可能状態にあります。ただし、スレッドは待機/スリープから実行可能状態に戻ることもできます。この状態では、スレッドは生きていると見なされます。
- ランニング :スレッドは、run()メソッドを呼び出した後、実行状態になります。これで、スレッドが実行を開始します。
- 実行不可 (ブロック):スレッドは生きていますが、実行する資格がありません。実行可能状態ではありませんが、しばらくすると実行可能状態に戻ります。 例: 待って、寝て、ブロックして。
- 終了しました :runメソッドが完了すると、終了します。現在、スレッドは生きていません。
Q#49)同期とは何ですか?
回答: 同期により、一度に1つのスレッドのみがコードのブロックにアクセスできます。複数のスレッドがコードのブロックにアクセスする場合、最後に不正確な結果が生じる可能性があります。この問題を回避するために、機密性の高いコードブロックの同期を提供できます。
同期キーワードは、スレッドが同期コードにアクセスするためにキーを必要とすることを意味します。
ロックはオブジェクトごとです。すべてのJavaオブジェクトにはロックがあります。ロックにはキーが1つだけあります。スレッドがロックするオブジェクトのキーを取得できる場合にのみ、スレッドは同期メソッドにアクセスできます。
このために、「Synchronized」キーワードを使用します。
例:
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ synchronized(object){ { } }
Q#50)同期の欠点は何ですか?
年: すべてのメソッドを実装するために同期を行うことはお勧めしません。 1つのスレッドが同期されたコードにアクセスする場合、次のスレッドは待機する必要があるためです。そのため、もう一方の端ではパフォーマンスが低下します。
Q#51)シリアル化とはどういう意味ですか?
回答: ファイルをバイトストリームに変換することは、シリアル化と呼ばれます。ファイル内のオブジェクトは、セキュリティ上の理由からバイトに変換されます。このために、java.io.Serializableインターフェースを実装する必要があります。定義する方法はありません。
一時的としてマークされた変数は、シリアル化の一部にはなりません。したがって、transientキーワードを使用して、ファイル内の変数のシリアル化をスキップできます。
詳細= >> シリアライズ可能およびクローン可能
Q#52)過渡変数の目的は何ですか?
回答: 一時変数は、シリアル化プロセスの一部ではありません。デシリアライズ中、一時変数の値はデフォルト値に設定されます。静的変数では使用されません。
例:
一時的な整数;
Q#53)シリアル化および逆シリアル化プロセスで使用される方法はどれですか?
回答: ObjectOutputStreamクラスとObjectInputStreamクラスは、上位レベルのjava.ioです。パッケージ。これらは、下位レベルのクラスFileOutputStreamおよびFileInputStreamで使用します。
ObjectOutputStream.writeObject -> オブジェクトをシリアル化し、シリアル化されたオブジェクトをファイルに書き込みます。
ObjectInputStream.readObject -> ファイルを読み取り、オブジェクトを逆シリアル化します。
シリアル化するには、オブジェクトにシリアル化可能なインターフェイスを実装する必要があります。スーパークラスがSerializableを実装している場合、サブクラスは自動的にシリアライズ可能になります。
Q#54)揮発性変数の目的は何ですか?
回答: 揮発性変数の値は、スレッドのキャッシュメモリからではなく、常にメインメモリから読み取られます。これは主に同期中に使用されます。変数にのみ適用されます。
例:
揮発性整数;
Q#55)Javaでのシリアル化と逆シリアル化の違い。
回答: Javaでのシリアル化と逆シリアル化の違いは次のとおりです。
シリアル化 | デシリアライズ |
---|---|
シリアル化は、オブジェクトをバイトストリームに変換するために使用されるプロセスです。 | デシリアライズは、バイトストリームからオブジェクトを取り戻すことができるシリアライズの反対のプロセスです。 |
オブジェクトは、ObjectOutputStreamを書き込むことによってシリアル化されます。 | オブジェクトは、ObjectInputStreamから読み取ることによって逆シリアル化されます。 |
Q#56)SerialVersionUIDとは何ですか?
回答: オブジェクトがシリアル化されるたびに、オブジェクトにはオブジェクトクラスのバージョンID番号がスタンプされます。このIDはSerialVersionUIDと呼ばれます。これは、逆シリアル化中に、シリアル化と互換性のある送信者と受信者を確認するために使用されます。
結論
これらは、プログラミングの基本的なJavaの概念と高度なJavaの概念の両方、および開発者のインタビューをカバーする、JAVAの主要なインタビューの質問の一部であり、JAVAの専門家が回答したものです。
このチュートリアルで、JAVAコアコーディングの概念について詳しく知ることができれば幸いです。上記の説明は、あなたの知識を本当に豊かにし、JAVAプログラミングの理解を深めます。
自信を持ってJAVAインタビューをクラックする準備をしてください。