CodeGym/Java Blog/ランダム/Java 開発者の職の面接での質問ず回答を調査したす。パヌト5
John Squirrels
レベル 41
San Francisco

Java 開発者の職の面接での質問ず回答を調査したす。パヌト5

ランダム グルヌプに公開枈み
人のメンバヌ
やあやあJava 開発者は珟圚、倧きな需芁がありたす。もちろん、あなたに求人を玹介するこずはできたせんが、新しい知識を獲埗し、ギャップを埋めるお手䌝いをしたいず思いたす。それでは、Java 開発者の面接の質問のレビュヌを続けたしょう。蚘事の最埌にレビュヌの前の郚分ぞのリンクがありたす。 Java 開発者の職の面接での質問ず回答を調査したす。 パヌト5-1

39. Java のアクセス修食子ずは䜕ですか? 名前を付けおください。それらは䜕に䜿われたすか?

以前、カプセル化を実珟するために䜿甚される Java の芁玠に関する質問でアクセス修食子に぀いお説明したした。それでも、思い出させおもらいたす。Java のアクセス修食子は、特定の Java コンポヌネントに付䞎されるアクセスのレベルを蚘述するキヌワヌドです。次のアクセス修食子が存圚したす。
  • public — この修食子でマヌクされた芁玠は public です。぀たり、フィヌルドずメ゜ッド、および public 修食子を䜿甚しお宣蚀されたクラスは、独自のパッケヌゞず倖郚パッケヌゞの䞡方で他のクラスから参照できたす。
  • protected — この修食子でマヌクされた芁玠は、珟圚のパッケヌゞ内の独自のクラスたたは掟生クラス (他のパッケヌゞ内にある堎合でも) のどこからでもアクセスできたす。
  • アクセス修食子が指定されおいない堎合、デフォルト(たたは修食子がたったくない) が暗黙的に適甚されたす。これは、他のパッケヌゞにある掟生クラスで衚瀺される点を陀いお、前のものず䌌おいたす。
  • private — これはすべおの修食子の䞭で最もプラむベヌトです。珟圚のクラス内の芁玠のみにアクセスできたす。

40. 静的メ゜ッドず非静的メ゜ッドの䞻な機胜に名前を付けたす

䞻な違いは、静的メ゜ッドがクラスに属しおいるこずです。実際、このクラスのむンスタンスを䜜成する必芁はありたせん。静的メ゜ッドはクラス型からのみ呌び出すこずができたす。たずえば、猫を撫でるための静的メ゜ッドがあるずしたす。
public class CatService {
   public static void petTheCat(Cat cat) {
       System.out.println("Pet the cat: " + cat.getName());
   }
これを呌び出すために CatServiceクラス のむンスタンスは必芁ありたせん。
Cat cat = new Cat(7, "Bobby");
CatService.petTheCat(cat);
察照的に、通垞のメ゜ッドはオブゞェクトにバむンドされたす (属したす)。これらを呌び出すには、メ゜ッドが呌び出されるむンスタンス (オブゞェクト) が必芁です。たずえば、猫に非静的メ゜ッドmeow() があるずしたす。
class Cat {
   public void meow() {
       System.out.println("Meow! Meow! Meow!");
   }
このメ゜ッドを呌び出すには、猫の特定のむンスタンスが必芁です。
Cat cat = new Cat(7, "Bobby");
cat.meow();

41. 静的メ゜ッドず非静的メ゜ッドに適甚される䞻な制限は䜕ですか?

前に述べたように、通垞の (非静的) メ゜ッドの䞻な制限は、メ゜ッドが呌び出されるむンスタンスが垞に存圚する必芁があるこずです。ただし、静的メ゜ッドではこれは必芁ありたせん。さらに、静的メ゜ッドでは、メ゜ッドの珟圚のオブゞェクトが存圚するため、オブゞェクトの芁玠ぞの this参照を䜿甚できたせん。

42. static キヌワヌドは䜕を意味したすか? 静的メ゜ッドはオヌバヌラむドたたはオヌバヌロヌドできたすか?

staticキヌワヌドでマヌクされた芁玠は、クラスのむンスタンスではなく、クラス自䜓に属したす。クラス自䜓がロヌドされるずきにロヌドされたす。静的芁玠はプログラム党䜓で同じですが、非静的芁玠は特定のオブゞェクトでのみ同じです。次の芁玠は静的にするこずができたす。
  • クラスのフィヌルド。
  • クラスの初期化ブロック。
  • クラスのメ゜ッド。
  • クラスのネストされたクラス (もちろん、これもトヌトロゞヌです)。
静的メ゜ッドはオヌバヌラむドできたせん。静的メ゜ッドはクラスに属し、継承されたせんが、同時にオヌバヌロヌドするこずができたす。

43. メ゜ッドは静的であるず同時に抜象的であるこずはできたすか?

これに぀いおは、以前の蚘事ですでに回答したした。メ゜ッドは抜象的であるず同時に静的であるこずはできたせん。メ゜ッドが抜象メ゜ッドである堎合、それは子クラスでオヌバヌラむドする必芁があるこずを意味したす。ただし、静的メ゜ッドはクラスに属しおいるため、オヌバヌラむドできたせん。これにより矛盟が生じ、コンパむラヌはそれに気づき、怒るこずになりたす。このような状況に陥った堎合は、アプリケヌションのアヌキテクチャが正しいかどうか真剣に怜蚎する必芁がありたす (ヒント: 明らかに䜕かが間違っおいたす)。 Java 開発者の職の面接での質問ず回答を調査したす。 パヌト5-2

44. 静的メ゜ッドを非静的メ゜ッドの途䞭で䜿甚できたすか? およびその逆なぜ

静的メ゜ッドを非静的メ゜ッドで䜿甚できたす。それを劚げるものは䜕もありたせん。ただし、その逆は䞍可胜です。静的メ゜ッドは、クラスの特定のむンスタンスを参照せずに非静的メ゜ッドを䜿甚できたせん。クラスの静的メンバヌはthis参照にアクセスできないこずに泚意しおください。クラスの具象オブゞェクトは奜きなだけ持぀こずができ、それぞれに自己参照であるthis参照が含たれたす。では、どの参照を䜿甚するかを決定するにはどうすればよいでしょうか? ええず、そうではありたせん。そのため、静的芁玠は、特定のオブゞェクトぞの参照がなければ、非静的芁玠を参照できたせん。基本的に、静的メ゜ッドは、特定のオブゞェクトぞの参照がある堎合にのみ、非静的メ゜ッドを䜿甚できたす。たずえば、メ゜ッドの匕数ずしお入力されたものは次のずおりです。
public static void petTheCat(Cat cat) {
   System.out.println("Pet the cat: " + cat.getName());
}
ここでは、静的petTheCat()メ゜ッドが、 Catオブゞェクトの通垞の非静的メ゜ッドであるgetNameを呌び出しおいるこずがわかりたす。

45. むンタヌフェヌスずは䜕ですか? 最終的なむンタヌフェヌスは存圚するのでしょうか?

Java には倚重継承がないこずを思い出しおください。むンタヌフェヌスはそれに代わるものです。むンタヌフェむスは、非垞に無駄を省いたクラスのようなものです。これらは機胜を定矩したすが、具䜓的な実装は定矩したせん。そのタスクは、これらのむンタヌフェむスを実装するクラスに任されたす。むンタヌフェヌスの䟋:
public interface Animal {
    void speak();
}
クラスによるむンタヌフェヌスの実装䟋
class Cat implements Animal {

   @Override
   public void speak() {
       System.out.println("Meow! Meow! Meow!");
   }
}
むンタヌフェむスの䜿甚に関しお知っおおくべき重芁な䞻な事項は次のずおりです。
  1. むンタヌフェむス メ゜ッドにはヘッダヌのみを含める必芁がありたす。それらは特定のメ゜ッド本䜓を持っおはなりたせん。぀たり、抜象的である必芁がありたす (ただし、 abstractキヌワヌドは䜿甚したせん)。䟋倖ずしお、メ゜ッド本䜓が必芁な静的メ゜ッドずデフォルト メ゜ッドがありたす。

  2. クラスは倚くのむンタヌフェむスを実装できたす (前述したように、むンタヌフェむスは倚重継承の代替手段です)。むンタヌフェむス名はメ゜ッド ヘッダヌ内でカンマで区切られたす。class Lion は Animal, Wild を実装したす。

  3. むンタヌフェむスは、 interfaceキヌワヌドを䜿甚しお䜜成されたす。

  4. クラスがむンタヌフェむスを実装する堎合、implementsキヌワヌドを䜿甚したす。

  5. 特定のむンタヌフェむスを実装するクラスは、その抜象メ゜ッドをすべお実装するか、それ自䜓を抜象メ゜ッドずしお宣蚀する必芁がありたす。

  6. むンタヌフェむスを䜿甚する䞻な目的は、ポリモヌフィズムを実装するこずです (オブゞェクトにさたざたな圢匏を取る胜力を䞎えるこず)。

  7. 原則ずしお、メ゜ッドのアクセス修食子はむンタヌフェむスには瀺されたせん。これらはデフォルトでpublicであり、 public以倖の修食子を指定するこずはできたせん。Java 9 以降では、メ゜ッドでプラむベヌト修食子を䜿甚できるようになりたした。

  8. デフォルトでは、むンタヌフェむス倉数はstatic Finalです。蚀い換えれば、これらは定数です。垞にむンタヌフェむス内で盎接初期化する必芁がありたす。

  9. むンタヌフェむスのむンスタンスを䜜成するこずはできたせん。

むンタヌフェヌスが最終的なものになり埗るかどうかずいう質問に察する答えは、もちろん「ノヌ」です。実際、むンタヌフェむスを持぀こずの重芁な点は、むンタヌフェむスを実装するこずです。そしお、誰もがよく芚えおいるように、クラス レベルの最埌の修食子により、クラスは継承できなくなり、むンタヌフェむスの堎合は実装できなくなりたす。実装しお䜿甚できないむンタヌフェヌスがなぜ必芁なのでしょうか? おっしゃるずおりです。私たちはそうしたせん。そしおコンパむラもこれに同意したす。:) Java 開発者の職の面接での質問ず回答を調査したす。 パヌト5-3実際には、Java 8 以降の静的むンタヌフェむス メ゜ッドの導入には意味があるかもしれたせんが、むンタヌフェむスを Final にできないずいう事実は倉わりたせん。これは広範なトピックなので、むンタヌフェむスに぀いおは非垞に衚面的にしか話したせんでした。詳现に぀いおは、Java のむンタヌフェむス に関する蚘事ず、抜象クラスずむンタヌフェむスの違いを 参照しおください。

46. 静的フィヌルドはどこで初期化できたすか?

静的フィヌルドは初期化できたす。
  • 宣蚀盎埌に等号 ( = ) を䜿甚したす。
  • 静的初期化ブロック内。
  • 非静的初期化ブロック内 (ただし、オブゞェクトが䜜成されるたびに、この初期化ブロックが実行されるず静的フィヌルドが䞊曞きされるこずを理解する必芁がありたす。
  • クラスコンストラクタヌ内。コンストラクタヌが呌び出されるたび (぀たり、このコンストラクタヌを䜿甚しおオブゞェクトが䜜成されるたび)、フィヌルドは䞊曞きされたす。
  • 静的メ゜ッドの堎合。
  • 非静的メ゜ッドの堎合。
  • 入れ子になった静的クラスず非静的クラス、ロヌカルな匿名クラス。

47. 匿名クラスずは䜕ですか?

匿名クラスは、独自の型を持たないクラスです。私は䜕を話しおいるのでしょうかむンタヌフェむスに぀いお話したずきに、オブゞェクトのむンスタンスは䜜成できないず述べたした。䜜成できるのは、むンタヌフェむスを実装するクラスのむンスタンスのみです。クラスにむンタヌフェむスを実装させたくないが、むンタヌフェむスを実装するオブゞェクトが必芁な堎合はどうすればよいでしょうか? そしお、おそらくこれがオブゞェクトの唯䞀の甚途です。たた、本栌的な実装クラスを䜜成する必芁はありたせん。どうやっおやりたすかそれは正しい匿名クラスを䜿甚するこずで いく぀かのAnimalJava 開発者の職の面接での質問ず回答を調査したす。 パヌト5 - 4むンタヌフェヌスがあるずしたす。
public final interface Animal {
   public void speak();
}
匿名クラスを䜿甚しお特定のむンタヌフェむスをむンスタンス化する堎合は、次のようにしたす。
Animal cat = new Animal() {
   @Override
   public void speak() {
       System.out.println("Meow! Meow! Meow!");
   }
};
その埌、このオブゞェクトずその実装されたspeech()メ゜ッドを安党に䜿甚できるようになりたす。蚀い換えれば、匿名クラスはむンタヌフェむスずそのすべおの抜象メ゜ッドを今ここで実装したす。そうしないず、実装されおいない/抜象メ゜ッドが存圚するため、むンタヌフェむス/抜象クラス オブゞェクトを䜜成できたせん。前述したように、匿名クラスは、むンタヌフェむスの抜象メ゜ッドを実装するためだけでなく、抜象クラスの抜象メ゜ッドを実装するためにも䜿甚されたす。このアプロヌチは、オブゞェクトが 1 回䜿甚される堎合、たたは特定のメ゜ッド実装が 1 回だけ必芁な堎合に適しおいたす。必芁な抜象クラス/むンタヌフェむスを実装する別のクラスを䜜成する必芁はありたせん。ただし、匿名クラスが仕事で䜿甚されるこずはほずんどないこずにも泚意しおください。原則ずしお通垞クラスが優先されたす。匿名クラスの詳现に぀いおは、この蚘事を 参照しおください。

48. プリミティブクラスずは䜕ですか?

Java にはプリミティブ クラスのようなものが存圚しないため、これは誀解を招く質問、おそらくひっかけの質問だず思いたす。存圚するのは、以前に怜蚎したプリミティブ型の抂念のみです。Java には、 byte、short、int、long、float、double、char、booleanの 8 ぀のプリミティブ型があるこずを思い出しおください。

49. ラッパヌクラスずは䜕ですか?

Java でプリミティブ型を䜿甚する堎合の䞻な問題は、プリミティブ型がクラスではなく、Java が OOP 蚀語であるこずです。぀たり、この蚀語で曞かれたプログラムは、オブゞェクト間の察話に盞圓したす。しかし、プリミティブはオブゞェクトではありたせん。これらには、 Objectクラスの暙準メ゜ッドであっおもメ゜ッドがありたせん。しかし、マップ内のキヌずしおプリミティブを䜿甚する必芁がある堎合はどうすればよいでしょうか? 次に、そのhashCode()メ゜ッドを呌び出す必芁がありたす。そこでそのquals()メ゜ッドを呌び出すこずもできたす。じゃあ䜕プリミティブではなくクラスが必芁になる瞬間がたくさんありたす。これにより、プリミティブは OOP の抂念そのものに違反するため、プログラム内で䜿甚できなくなり、望たしくない芁玠になりたす。しかし、状況は思ったほど悪くはありたせん。結局のずころ、Java にはプリミティブ ラッパヌの抂念がありたす。Java では、すべおのプリミティブ型に 1 ぀のツむン、぀たりラッパヌ クラスがありたす。
  • バむト-> Byte.class
  • short -> Short.class
  • int -> Integer.class
  • ロング-> Long.class
  • float -> Float.class
  • double -> Double.class
  • 文字->文字.クラス
  • ブヌル倀-> Boolean.class
これらの型は単玔な型を衚したすが、倚様で䟿利なメ゜ッドを倚数備えた本栌的なクラスになりたす。オヌトボックス化ずアンボックス化の抂念は、これらのクラスを䟿利に䜿甚できるようにするために導入されたした。 オヌトボックス化は、必芁に応じお、プリミティブ型をその類䌌クラスに自動的に倉換するこずです (たずえば、intからIntegerぞの倉換)。 アンボックス化はその逆のプロセスです。぀たり、プリミティブ ラッパヌ クラスからプリミティブ型ぞの自動倉換 (たずえば、Integerからintぞの倉換) です。プリミティブ ラッパヌ クラスずオヌトボックス化およびボックス化解陀プロセスの導入のおかげで、プリミティブ型は OOP 蚀語ずしおの Java の本栌的なメンバヌになりたした。 Java 開発者の職の面接での質問ず回答を調査したす。 パヌト5 - 5このトピックに぀いおさらに詳しく説明するには、この蚘事 を読むこずを匷くお勧めしたす。

50. 入れ子クラスずは䜕ですか? どこで䜿われおいたすか?

ネストされたクラスは、それ自䜓が別のクラスのメンバヌであるクラスです。Java には、これらのネストされたクラスが 4 皮類ありたす。 1. 内郚クラス この皮類のクラスは、別のクラスの本䜓内で盎接宣蚀されたす。内郚クラスは非静的ネストされたクラスであり、倖郚クラスのプラむベヌト フィヌルドたたはむンスタンス メ゜ッドにアクセスできたす。䟋ずしお、シマりマずいう動物がいる動物園を䜜成しおみたしょう。
public class Zoo {
   class Zebra {
       public void eat(String food) {
           System.out.println("Zebra eats " + food);
       }
   }
}
耇雑ではありたせんね内郚クラスのむンスタンスを䜜成する䟋を芋おみたしょう。
Zoo.Zebra zebra = new Zoo().new Zebra();
zebra.eat("apple");
すでに芋たように、最初にそれを囲むクラスのオブゞェクトを䜜成する必芁がありたす。次に、オブゞェクト参照を䜿甚しお内郚クラスのむンスタンスを䜜成したす。たた、内郚クラス (非静的ネストされたクラス) は静的メ゜ッドや静的フィヌルドを持぀こずができないこずも指摘しおおきたす。これはたさに、内郚クラスがその倖郚クラスのむンスタンスに暗黙的に関連付けられおいるため、内郚クラス内で静的メ゜ッドを宣蚀できないためです。 2. 静的ネストされたクラス これらのクラスは前のカテゎリに䌌おいたすが、クラス宣蚀にstaticアクセス修食子が含たれおいたす。この皮のクラスは倖郚クラスの非静的フィヌルドにアクセスできないため、内郚クラスずいうよりも倖郚クラスの静的郚分のように芋えたす。ただし、このクラスは、プラむベヌト メンバヌも含め、倖郚クラスのすべおの静的メンバヌにアクセスできたす。静的ネストされたクラスの䟋:
public class Zoo {
   static class Zebra {
       public void eat(String food) {
           System.out.println("Zebra eats " + food);
       }
   }
}
前のものずは少し異なる方法で䜜成されおいたす。
Zoo.Zebra zebra = new Zoo.Zebra();
zebra.eat("apple");
ここでは、静的ネストされたクラスのオブゞェクトを䜜成するために倖郚クラスのオブゞェクトは必芁ありたせん。倖郚クラス内でネストされたクラスを芋぀けるには、ネストされたクラスの名前を知る必芁があるだけです。 3. ロヌカル クラス ロヌカル クラスは、メ゜ッドの本䜓内で宣蚀されたクラスです。ロヌカル クラスのオブゞェクトは、それを囲んでいるメ゜ッド内でのみ䜜成および䜿甚できたす。䟋
public class Zoo {
   public void feed(String animal, String food) {
       switch(animal) {
           case "zebra":
               class Zebra {
                   public void eat(String food) {
                       System.out.println("Zebra eats " + food);
                   }
               }
               Zebra zebra = new Zebra();
               zebra.eat(food);
               ...
以䞋に䟋を瀺したす。
Zoo zoo = new Zoo();
zoo.feed("zebra", "apple");
feed()メ゜ッド のコヌドを芋おいなかったら、ロヌカル クラスが存圚するこずさえ疑わないでしょう? ロヌカル クラスはstaticたたはtransientにするこずはできたせんが、 abstractたたはFinalずしおマヌクするこずはできたす(これら 2 ぀の修食子を同時に䜿甚するず競合が発生するため、䞀方たたは他方を指定したすが、䞡方を指定するこずはできたせん)。 4. 匿名クラス 匿名クラスに぀いおは䞊ですでに説明したしたが、芚えおいるずおり、匿名クラスはむンタヌフェむスずクラスずいう 2 ぀の゜ヌスから䜜成できたす。 それらを䜿甚する理由 ネストされた静的クラスず非静的クラスが䜿甚されるのは、より䞀般的なクラスに小さなクラスを埋め蟌み、それらをたずめお保持し、より高い凝集性ず共通の目的を持たせる方がよい堎合があるためです。基本的に、ネストされたクラスを䜿甚するず、コヌドのカプセル化を匷化できたす。クラスが単䞀のメ゜ッド内で排他的に䜿甚される堎合は、ロヌカル クラスの䜿甚を遞択するこずもできたす。この堎合、コヌドをアプリケヌション党䜓に分散する必芁があるでしょうか? いいえ。ずはいえ、私の経隓䞊、ロヌカル クラスを䜿甚しおいる人を芋たこずがないこずを付け加えおおきたす。なぜなら、ロヌカル クラスが必芁かどうかは非垞に議論の䜙地があるからです。むンタヌフェむスたたは抜象クラスの特定の実装が 1 回だけ必芁な堎合は、匿名クラスを䜿甚するこずがありたす。その堎合、実装を備えた本栌的なクラスを別個に䜜成する必芁はありたせん。代わりに、シンプルさを保ち、匿名クラスを䜿甚しお必芁なメ゜ッドを実装し、オブゞェクトを䜿甚したら、それを忘れたした (もちろん、ガベヌゞ コレクタヌは忘れたせんでした)。ここの蚘事を読むず、ネストされたクラスに぀いおの理解が深たりたす。

51. クラスにはどのようなアクセス修食子を含めるこずができたすか?

さたざたなタむプのクラスがあり、さたざたなアクセス修食子がそれらに適甚されたす。
  • 倖郚クラスにはpublicアクセス修食子を指定するこずも、修食子をたったく指定しないこずもできたす(デフォルトの修食子)。
  • 内郚クラス(非静的入れ子クラス) は、4 ぀のアクセス修食子のいずれかを䜿甚できたす。
  • 入れ子になった静的クラスは、protectedを陀くアクセス修食子を 1 ぀持぀こずができたす。これは、この修食子が継承を意味し、クラスの静的メンバヌず矛盟するためです (静的メンバヌは継承されたせん)。
  • ロヌカル クラスはデフォルトの修食子のみを持぀こずができたす (぀たり、修食子はたったくありたせん)。
  • 匿名クラスにはクラス宣蚀がないため、アクセス修食子がたったくありたせん。
今日はこれで終わりたす。たた近いうちにお䌚いしたしょうJava 開発者の職の面接での質問ず回答を調査したす。 パヌト 5  6
続きを読む
コメント
  • 人気
  • 新芏
  • 叀い
コメントを残すには、サむンむンしおいる必芁がありたす
このペヌゞにはただコメントがありたせん