CodeGym /Java Blog /ランダム /Java 面接での質問トップ 21
John Squirrels
レベル 41
San Francisco

Java 面接での質問トップ 21

ランダム グループに公開済み
Java の面接の質問は無数にあり、すべてを 1 つの記事にまとめることはできません。ただし、IT 企業の人事マネージャーによると、ここでは非常に一般的な Java 面接の質問をいくつか見つけることができます。 Java 面接での質問トップ 21 - 1
  1. 「分解」public static void main(String args[])

    Java の面接で新入生に人気の質問の 1 つで、非常に簡単です。

    • publicはアクセス修飾子です。これを使用して、このメソッドへのアクセスを指定します。ここでは修飾子が「public」であるため、どのクラスもこのメソッドにアクセスできます。

    • static。この Java キーワードは、クラスの新しいオブジェクトを作成せずにこのメソッドを使用することを意味します。

    • Voidメソッドの戻り値の型です。これは、メソッドが値を返さないことを意味します。

    • mainメソッドの名前です。JVM は、それをアプリケーションへのエントリ ポイントとして「認識」します (特定の署名を持つ必要があります)。Mainメインの実行が行われるメソッドです。

    • String args[]。これは main メソッドに渡されるパラメータです。ここには、Java アプリケーションが実行時に受け入れる String 型の引数があります。端末に入力できます。

  2. equals()とはどう違いますか==

    まず、「==」は演算子ですが、equals()はメソッドです。==参照比較 (またはアドレス比較) には演算子を使用し、equals()内容比較にはメソッドを使用します。これは、オブジェクト内の値を比較する==際に、両方のオブジェクトが同じメモリ位置を指しているかどうかをチェックすることを意味します。equals()

  3. 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
    
  4. main メソッドが完全に欠如している場合はどうなるでしょうか? main メソッドをまったく使用せずに通常のクラスを実行しようとすると、次のエラーが発生します: Main メソッドがクラス Test に見つかりません。main メソッドを次のように定義してください: public static void main (String [] args) または JavaFX アプリケーションクラスは javafx.application.Application を拡張する必要があります。エラー自体は、これが JavaFX アプリケーションであり、クラスが javafx.application.Application から継承されている場合、それが可能であることを示しています。
  5. オブジェクトとは何ですかimmutable? オブジェクトを作成できますかimmutable?

    immutableクラスのオブジェクトを作成後に変更することはできません。したがって、一度作成すると変更することはできません。オブジェクトを変更しようとすると、Immutable新しいオブジェクト (クローン) が取得され、作成中にこのクローンが変更されます。

    良い例はJavaStringです。immutableつまり、オブジェクト自体は変更できませんが、オブジェクトへの参照は変更できます。

  6. 次のコードではオブジェクトがいくつ作成されますか?

    Java 技術面接の質問の 1 つで、#4 に代わるものです。

    
    String s1="Hello";  
    String s2="Hello";  
    String s3="Hello";  
    

    Java には文字列プールがあるため、答えは「1 つだけ」です。new() 演算子を使用して String オブジェクトを作成すると、ヒープ メモリに新しいオブジェクトが作成されます。この例のように、文字列リテラル構文を使用すると、文字列プールから既存のオブジェクトが返されることがあります (すでに存在する場合)。

  7. 次のコードではオブジェクトがいくつ作成されますか?

    
    String s = new String("Hello");
    

    オブジェクトが 2 つあります。1 つは文字列定数プール (まだ存在しない場合) 内にあり、もう 1 つはヒープ内にあります。

  8. Java のStringStringBuilder、クラスの違いは何ですか?StringBuffer

    Java の面接でのトップ質問のリーダーの 1 人がいます。

    まずはStringImmutableクラスです。つまり、作成後にコンテンツを変更することはできません。whileStringBufferと はStringBuilder可変クラスなので、後で変更できます。オブジェクトの内容を変更するとString、新しい文字列が作成されるため、元の文字列は変更されません。そのため、 を使用した場合よりも を使用した方がパフォーマンスStringBufferが優れていますString

    との主な違いはStringBufferStringBuilderStringBufferメソッドは同期されますが、StringBuilderのメソッドは同期されません。

  9. Stringリテラルを使用して作成されたものと演算子を使用して作成されたものに違いはありますかnew()?

    がある。演算子を使用して String を作成するとnew()、それはヒープと文字列プール (まだ存在しない場合) に表示されます。リテラルを使用してを作成するとString、文字列プールに作成されます (まだ存在しない場合)。文字列プールは、文字列リテラルを保存するヒープ内の記憶域です。

  10. Javaでメソッドprivateをオーバーライドできますか?static

    Java の新人にとって難しい面接の質問の 1 つ。privateJava では実際にメソッドをオーバーライドすることはできませんstatic

    privateプライベート アクセス指定子のスコープはクラス内のみであるため、メソッドをオーバーライドすることはできません。何かをオーバーライドする場合は、親クラスと子クラスを使用する必要があります。スーパークラスのメソッドが の場合private、子クラスはそれを使用できず、子クラスのメソッドは新しいメソッドとして扱われます(オーバーライドされません)。

    Staticstaticまた、メソッドはクラス自体の一部であり、クラスのオブジェクトの一部ではないため、メソッドをオーバーライドすることもできません。確かに、子クラスで同じシグネチャを持つ同じメソッドを宣言することはできますstaticが、やはり、それらは新しいメソッドとして扱われます。

  11. Abstract Classとの違いInterface

    Java 開発者の面接でよく聞かれる質問の 1 つは、OOP 原則に関係しています。まず、Java ではinterface動作を定義し、abstract class階層を作成します。

    抽象クラス インターフェース
    抽象クラス内にメソッド本体(非抽象メソッド)を含めることが可能 インターフェイスには抽象メソッドのみを含めることができます。Java 8 以降では、デフォルトのメソッドを定義し、インターフェースに直接実装できるようになりました。また、Java 8 のインターフェイスには静的メソッドを含めることができます。
    インスタンス変数は抽象クラスに含めることができます インターフェイスにはインスタンス変数を含めることはできません。
    コンストラクターは許可されます インターフェイスにはコンストラクターを含めることはできません。
    静的メソッドが許可されます 静的メソッドは許可されません
    クラスは抽象親を 1 つだけ持つことができます 1 つのインターフェイスで異なるクラスを実装できる
    抽象クラスはインターフェイスの実装を提供する場合があります。 インターフェイスは抽象クラスの実装を提供できません。
    抽象クラスは、他の Java クラスを拡張し、複数の Java インターフェイスを実装することができます。 インターフェイスは、他の Java インターフェイスのみを拡張できます。
    Java 抽象クラスには、プライベート クラス メンバーと保護されたクラス メンバーを含めることができます Java インターフェースのメンバーはデフォルトでパブリックです
  12. staticクラス内で変数やメソッドを宣言できますかabstract?

    staticはい、メソッド内で変数やメソッドを宣言することが可能ですabstract。静的コンテキストにアクセスするためのオブジェクトを作成する必要はありません。abstractしたがって、クラス名を使用して、クラス内で宣言された静的コンテキストにアクセスできますabstract

  13. JVM によって割り当てられるメモリ領域の種類は何ですか?

    クラス領域には、ランタイム定数プール、フィールド、メソッド データ、メソッドのすべてのコードなど、クラスごとの構造が格納されます。

    ヒープは、オブジェクトにメモリが割り当てられる実行時データ領域です。

    スタックにはフレームが格納されます。これにはローカル変数と部分的な結果が含まれており、メソッドの呼び出しと戻りに関与します。すべてのスレッドにはプライベート JVM スタックがあり、スレッドと同時に作成されます。メソッドが呼び出されるたびに、新しいフレームが作成されます。フレームは、メソッドの呼び出しが完了すると破棄されます。

    プログラム カウンター レジスタには、現在実行されている Java 仮想マシン命令のアドレスが含まれています。

    ネイティブ メソッド スタックには、アプリケーションで使用されるすべてのネイティブ メソッドが含まれています。

  14. なぜJavaでは多重継承が許可されないのですか?

    それは本当に複雑でしょう。3 つのクラスAB、 および がCおよびをC継承すると想像してください。さて、クラスには同じメソッドがあり、それを子クラス オブジェクトから呼び出します...どれでしょうか? か、それとも?ここには曖昧さがあります。ABABAB

    2 つのクラスを継承しようとすると、Java はコンパイル時エラーを返します。

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

    main確かに、メソッドのオーバーロードを使用すると、Java プログラム内に多くのメソッドを含めることができます。やってみて!

  16. コンストラクターを次のように宣言できますかfinal?

    いいえ。コンストラクターは継承できないため、 として宣言できませんfinal。したがって、コンストラクターを として宣言することは無意味ですfinal。ただし、これを実行しようとすると、Java コンパイラによってエラーがスローされます。

  17. インターフェイスを次のように宣言できますかfinal?

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

  18. static bindingとはどう違いますかdynamic binding

    bindingコンパイラによってコンパイル時に解決できるものは、呼び出しまたはstatic早期バインディングと呼ばれます。Bindingすべての および メソッドのstatic処理privatefinalコンパイル時に行われます。

    コンパイラでは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();  
     }  
    }
    
  19. Javaで読み取り専用クラスを作成するにはどうすればよいですか?

    これを行うには、クラスのすべてのフィールドをプライベートにします。読み取り専用クラスには、クラスのプライベート プロパティをmainメソッドに返すゲッター メソッドのみがあります。このプロパティは変更できません。その理由は、setter メソッドがないためです。

    
    public class HockeyPlayer{    
    private String team ="Maple leaf";    
    public String getTeam(){    
    return team;    
    }    
    }
    
  20. Javaで書き込み専用クラスを作成するにはどうすればよいですか?

    繰り返しますが、クラスのすべてのフィールドを にする必要がありますprivate。これで、書き込み専用クラスにはセッター メソッドのみが含まれ、ゲッターは含まれなくなります。したがって、クラスのプロパティを読み取ることができません。

    
    public class HockeyPlayer{       
    private String team;    
    public void setTeam(String college){    
    this.team = team;    
    }    
    }    
    
  21. 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 以降では、デフォルトのメソッドを定義し、インターフェースに直接実装できるようになりました。
  22. throwとキーワードの違いは何ですかthrows?

    Throwsは例外を宣言するために使用されるため、try-catchブロックと同様に機能します。Throwキーワードは、メソッドまたは他のコード ブロックから明示的に例外をスローするために使用されます。

    Throwの後にはクラスのインスタンスが続きException、throws の後には例外クラス名が続きます。

    Throwメソッド本体で例外をスローするために使用されます。Throwsは、メソッド内のステートメントで発生する可能性のある例外を宣言するためにメソッド シグネチャで使用されます。

    一度に 1 つの例外をスローすることができますが、throwキーワードを使用して宣言することで複数の例外を処理できます。複数の例外を宣言できます (例: public void method()throws IOExceptionSQLException)。

ここでは、Java インタビューの質問と回答がいくつかあるだけでした。この記事はインタビューシリーズの第1弾です。次の質問 (近日公開予定) は、データ構造に関する質問です。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION