
-
「分解」
public static void main(String args[])
。Java の面接で新入生に人気の質問の 1 つで、非常に簡単です。
-
public
はアクセス修飾子です。これを使用して、このメソッドへのアクセスを指定します。ここでは修飾子が「public」であるため、どのクラスもこのメソッドにアクセスできます。 -
static
。この Java キーワードは、クラスの新しいオブジェクトを作成せずにこのメソッドを使用することを意味します。 -
Void
メソッドの戻り値の型です。これは、メソッドが値を返さないことを意味します。 -
main
メソッドの名前です。JVM は、それをアプリケーションへのエントリ ポイントとして「認識」します (特定の署名を持つ必要があります)。Main
メインの実行が行われるメソッドです。 -
String args[]
。これは main メソッドに渡されるパラメータです。ここには、Java アプリケーションが実行時に受け入れる String 型の引数があります。端末に入力できます。
-
-
equals()
とはどう違いますか==
?まず、「
==
」は演算子ですが、equals()
はメソッドです。==
参照比較 (またはアドレス比較) には演算子を使用し、equals()
内容比較にはメソッドを使用します。これは、オブジェクト内の値を比較する==
際に、両方のオブジェクトが同じメモリ位置を指しているかどうかをチェックすることを意味します。equals()
-
main()
メソッドなしでプログラムを実行できますか?Java の基本的な面接の質問の多くは非常に簡単です。このように。簡単に言うと、「はい、できます」です。たとえば、静的ブロックを使用してそれを行うことができます。
静的ブロックを使用して静的データ メンバーを初期化できます。これは
main
、クラスのロード時に、メソッドの前に実行されます。class Example{ Static{ System.out.println("static block is invoked"); } public static void main(String args[]){ System.out.println("Now main method"); } }
出力は次のとおりです。
static block is invoked Now main method
main メソッドが完全に欠如している場合はどうなるでしょうか? main メソッドをまったく使用せずに通常のクラスを実行しようとすると、次のエラーが発生します: Main メソッドがクラス Test に見つかりません。main メソッドを次のように定義してください: public static void main (String [] args) または JavaFX アプリケーションクラスは javafx.application.Application を拡張する必要があります。エラー自体は、これが JavaFX アプリケーションであり、クラスが javafx.application.Application から継承されている場合、それが可能であることを示しています。
-
オブジェクトとは何ですか
immutable
? オブジェクトを作成できますかimmutable
?immutable
クラスのオブジェクトを作成後に変更することはできません。したがって、一度作成すると変更することはできません。オブジェクトを変更しようとすると、Immutable
新しいオブジェクト (クローン) が取得され、作成中にこのクローンが変更されます。良い例はJava
String
です。immutable
つまり、オブジェクト自体は変更できませんが、オブジェクトへの参照は変更できます。 -
次のコードではオブジェクトがいくつ作成されますか?
Java 技術面接の質問の 1 つで、#4 に代わるものです。
String s1="Hello"; String s2="Hello"; String s3="Hello";
Java には文字列プールがあるため、答えは「1 つだけ」です。new() 演算子を使用して String オブジェクトを作成すると、ヒープ メモリに新しいオブジェクトが作成されます。この例のように、文字列リテラル構文を使用すると、文字列プールから既存のオブジェクトが返されることがあります (すでに存在する場合)。
-
次のコードではオブジェクトがいくつ作成されますか?
String s = new String("Hello");
オブジェクトが 2 つあります。1 つは文字列定数プール (まだ存在しない場合) 内にあり、もう 1 つはヒープ内にあります。
-
Java の
String
、StringBuilder
、クラスの違いは何ですか?StringBuffer
Java の面接でのトップ質問のリーダーの 1 人がいます。
まずは
String
Immutableクラスです。つまり、作成後にコンテンツを変更することはできません。whileStringBuffer
と はStringBuilder
可変クラスなので、後で変更できます。オブジェクトの内容を変更するとString
、新しい文字列が作成されるため、元の文字列は変更されません。そのため、 を使用した場合よりも を使用した方がパフォーマンスStringBuffer
が優れていますString
。との主な違いは
StringBuffer
、StringBuilder
のStringBuffer
メソッドは同期されますが、StringBuilder
のメソッドは同期されません。 -
String
リテラルを使用して作成されたものと演算子を使用して作成されたものに違いはありますかnew()
?がある。演算子を使用して String を作成すると
new()
、それはヒープと文字列プール (まだ存在しない場合) に表示されます。リテラルを使用してを作成するとString
、文字列プールに作成されます (まだ存在しない場合)。文字列プールは、文字列リテラルを保存するヒープ内の記憶域です。 -
Javaでメソッド
private
をオーバーライドできますか?static
Java の新人にとって難しい面接の質問の 1 つ。
private
Java では実際にメソッドをオーバーライドすることはできませんstatic
。private
プライベート アクセス指定子のスコープはクラス内のみであるため、メソッドをオーバーライドすることはできません。何かをオーバーライドする場合は、親クラスと子クラスを使用する必要があります。スーパークラスのメソッドが の場合private
、子クラスはそれを使用できず、子クラスのメソッドは新しいメソッドとして扱われます(オーバーライドされません)。Static
static
また、メソッドはクラス自体の一部であり、クラスのオブジェクトの一部ではないため、メソッドをオーバーライドすることもできません。確かに、子クラスで同じシグネチャを持つ同じメソッドを宣言することはできますstatic
が、やはり、それらは新しいメソッドとして扱われます。 -
Abstract Class
との違いInterface
Java 開発者の面接でよく聞かれる質問の 1 つは、OOP 原則に関係しています。まず、Java では
interface
動作を定義し、abstract class
階層を作成します。抽象クラス インターフェース 抽象クラス内にメソッド本体(非抽象メソッド)を含めることが可能 インターフェイスには抽象メソッドのみを含めることができます。Java 8 以降では、デフォルトのメソッドを定義し、インターフェースに直接実装できるようになりました。また、Java 8 のインターフェイスには静的メソッドを含めることができます。 インスタンス変数は抽象クラスに含めることができます インターフェイスにはインスタンス変数を含めることはできません。 コンストラクターは許可されます インターフェイスにはコンストラクターを含めることはできません。 静的メソッドが許可されます 静的メソッドは許可されません クラスは抽象親を 1 つだけ持つことができます 1 つのインターフェイスで異なるクラスを実装できる 抽象クラスはインターフェイスの実装を提供する場合があります。 インターフェイスは抽象クラスの実装を提供できません。 抽象クラスは、他の Java クラスを拡張し、複数の Java インターフェイスを実装することができます。 インターフェイスは、他の Java インターフェイスのみを拡張できます。 Java 抽象クラスには、プライベート クラス メンバーと保護されたクラス メンバーを含めることができます Java インターフェースのメンバーはデフォルトでパブリックです -
static
クラス内で変数やメソッドを宣言できますかabstract
?static
はい、メソッド内で変数やメソッドを宣言することが可能ですabstract
。静的コンテキストにアクセスするためのオブジェクトを作成する必要はありません。abstract
したがって、クラス名を使用して、クラス内で宣言された静的コンテキストにアクセスできますabstract
。 -
JVM によって割り当てられるメモリ領域の種類は何ですか?
クラス領域には、ランタイム定数プール、フィールド、メソッド データ、メソッドのすべてのコードなど、クラスごとの構造が格納されます。
ヒープは、オブジェクトにメモリが割り当てられる実行時データ領域です。
スタックにはフレームが格納されます。これにはローカル変数と部分的な結果が含まれており、メソッドの呼び出しと戻りに関与します。すべてのスレッドにはプライベート JVM スタックがあり、スレッドと同時に作成されます。メソッドが呼び出されるたびに、新しいフレームが作成されます。フレームは、メソッドの呼び出しが完了すると破棄されます。
プログラム カウンター レジスタには、現在実行されている Java 仮想マシン命令のアドレスが含まれています。
ネイティブ メソッド スタックには、アプリケーションで使用されるすべてのネイティブ メソッドが含まれています。
-
なぜJavaでは多重継承が許可されないのですか?
それは本当に複雑でしょう。3 つのクラス
A
、B
、 および がC
およびをC
継承すると想像してください。さて、クラスには同じメソッドがあり、それを子クラス オブジェクトから呼び出します...どれでしょうか? か、それとも?ここには曖昧さがあります。A
B
A
B
A
B
2 つのクラスを継承しようとすると、Java はコンパイル時エラーを返します。
-
メソッドをオーバーロードできますか
main()
?main
確かに、メソッドのオーバーロードを使用すると、Java プログラム内に多くのメソッドを含めることができます。やってみて! -
コンストラクターを次のように宣言できますか
final
?いいえ。コンストラクターは継承できないため、 として宣言できません
final
。したがって、コンストラクターを として宣言することは無意味ですfinal
。ただし、これを実行しようとすると、Java コンパイラによってエラーがスローされます。 -
インターフェイスを次のように宣言できますか
final
?いいえ、それはできません。
final
インターフェイスは、その定義に従って何らかのクラスによって実装される必要があるため、インターフェイスを使用することはできません。したがって、インターフェイスを作成する意味はありませんfinal
。ただし、これを実行しようとすると、コンパイラによってエラーが表示されます。 -
static binding
とはどう違いますかdynamic binding
?binding
コンパイラによってコンパイル時に解決できるものは、呼び出しまたはstatic
早期バインディングと呼ばれます。Binding
すべての および メソッドのstatic
処理private
はfinal
コンパイル時に行われます。コンパイラでは
Dynamic binding
呼び出すメソッドを選択できません。オーバーライドはその好例ですdynamic binding
。オーバーライドでは、親クラスと子クラスの両方が同じメソッドを持ちます。Static Binding class Cat{ private void talk() {System.out.println("cat is mewing..."); } public static void main(String args[]){ Cat cat=new Cat(); cat.talk(); } } Dynamic Binding class Animal{ void talk(){ System.out.println("animal is talking..."); } } class Cat extends Animal{ void talk(){ System.out.println("cat is talking..."); } public static void main(String args[]){ Animal animal=new Cat(); animal.talk(); } }
-
Javaで読み取り専用クラスを作成するにはどうすればよいですか?
これを行うには、クラスのすべてのフィールドをプライベートにします。読み取り専用クラスには、クラスのプライベート プロパティを
main
メソッドに返すゲッター メソッドのみがあります。このプロパティは変更できません。その理由は、setter メソッドがないためです。public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } }
-
Javaで書き込み専用クラスを作成するにはどうすればよいですか?
繰り返しますが、クラスのすべてのフィールドを にする必要があります
private
。これで、書き込み専用クラスにはセッター メソッドのみが含まれ、ゲッターは含まれなくなります。したがって、クラスのプロパティを読み取ることができません。public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } }
-
各
try
ブロックの後にはブロックが続く必要がcatch
ありますね。いいえ。必需品ではありません。各
try
ブロックにはブロックがなくてもかまいませんcatch
。その後に catchblock またはfinally ブロックが続くこともありますが、それらがまったくない場合もあります。public class Main{ public static void main(String []args){ try{ int variable = 1; System.out.println(variable/0); } finally { System.out.println("the other part of the program..."); } } }
出力:
Exception in thread main java.lang.ArithmeticException:/ by zero the other part of the program...
もう 1 つの例:class Main { public static void main(String[] args) throws IOException { try(InputStreamReader inputStreamReader = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(inputStreamReader)){ System.out.println("test"); } } }
出力:
test
PS: Java 8 より前は、インターフェイス内のメソッドは抽象のみでした。Java 8 以降では、デフォルトのメソッドを定義し、インターフェースに直接実装できるようになりました。 -
throw
とキーワードの違いは何ですかthrows
?Throws
は例外を宣言するために使用されるため、try-catch
ブロックと同様に機能します。Throw
キーワードは、メソッドまたは他のコード ブロックから明示的に例外をスローするために使用されます。Throw
の後にはクラスのインスタンスが続きException
、throws の後には例外クラス名が続きます。Throw
メソッド本体で例外をスローするために使用されます。Throws
は、メソッド内のステートメントで発生する可能性のある例外を宣言するためにメソッド シグネチャで使用されます。一度に 1 つの例外をスローすることができますが、
throw
キーワードを使用して宣言することで複数の例外を処理できます。複数の例外を宣言できます (例:public void method()throws IOException
、SQLException
)。
GO TO FULL VERSION