-
“ถอดประกอบ”
public static void main(String args[])
.หนึ่งในคำถามสัมภาษณ์จาวายอดนิยมสำหรับน้องใหม่ และคำถามง่ายมากๆ
-
public
เป็นตัวดัดแปลงการเข้าถึง เราใช้เพื่อระบุการเข้าถึงวิธีนี้ ตัวแก้ไขที่นี่เป็น "สาธารณะ" ดังนั้นคลาสใด ๆ จึงสามารถเข้าถึงวิธีนี้ได้ -
static
. คีย์เวิร์ด Java นี้หมายความว่าเราใช้วิธีนี้โดยไม่ต้องสร้าง Object ของคลาสใหม่ -
Void
เป็นประเภทผลตอบแทนของวิธีการ หมายความว่าเมธอดไม่ส่งคืนค่าใด ๆ -
main
เป็นชื่อของวิธีการ JVM "รู้" ว่าเป็นจุดเข้าสู่แอปพลิเคชัน (ควรมีลายเซ็นเฉพาะ)Main
เป็นวิธีที่เกิดการดำเนินการหลัก -
String args[]
. นี่คือพารามิเตอร์ที่ส่งไปยังเมธอดหลัก ที่นี่เรามีอาร์กิวเมนต์ประเภทสตริงที่แอปพลิเคชัน Java ของคุณยอมรับเมื่อคุณเรียกใช้ คุณสามารถพิมพ์บนเทอร์มินัล
-
-
อะไรคือความแตกต่างระหว่าง
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
แล้วการขาดเมธอดหลักทั้งหมดล่ะ? หากคุณพยายามเรียกใช้คลาสธรรมดาโดยไม่มีเมธอดหลักเลย คุณจะพบข้อผิดพลาดถัดไป: ไม่พบเมธอดหลักในการทดสอบคลาส โปรดกำหนดเมธอดหลักเป็น: public static void main (String [] args) หรือแอปพลิเคชัน JavaFX คลาสต้องขยาย javafx.application.Application ข้อผิดพลาดระบุว่าหากนี่เป็นแอปพลิเคชัน JavaFX และคลาสนั้นสืบทอดมาจาก javafx.application.Application ก็เป็นไปได้
-
วัตถุ คืออะไร
immutable
? คุณสามารถสร้างimmutable
วัตถุ?คุณไม่สามารถแก้ไขวัตถุของ
immutable
ชั้นเรียนได้หลังจากสร้างแล้ว ดังนั้นเมื่อคุณสร้างแล้ว คุณจะไม่สามารถเปลี่ยนแปลงได้ หากคุณพยายามแก้ไขImmutable
วัตถุ คุณจะได้รับวัตถุใหม่ (โคลน) และเปลี่ยนโคลนนี้ในขณะที่สร้างตัวอย่างที่ดีคือ
String
มันอยู่immutable
ใน Java ซึ่งหมายความว่าคุณไม่สามารถเปลี่ยนวัตถุได้ แต่คุณสามารถเปลี่ยนการอ้างอิงไปยังวัตถุได้ -
มีกี่อ็อบเจกต์ที่สร้างขึ้นในโค้ดต่อไปนี้?
หนึ่งในคำถามสัมภาษณ์ทางเทคนิคของจาวาที่ใช้แทน #4
String s1="Hello"; String s2="Hello"; String s3="Hello";
คำตอบคือ “อันเดียว” เพราะ Java มี String Pool เมื่อเราสร้างวัตถุสตริงโดยใช้ตัวดำเนินการ new() จะสร้างวัตถุใหม่ในหน่วยความจำฮีป ถ้าเราใช้ไวยากรณ์ตัวอักษรของสตริง เช่นในตัวอย่างของเรา มันอาจส่งคืนวัตถุที่มีอยู่จากพูลสตริง หากมีอยู่แล้ว
-
มีกี่อ็อบเจกต์ที่สร้างขึ้นในโค้ดต่อไปนี้?
String s = new String("Hello");
มี 2 องค์ อันหนึ่งอยู่ในพูลคงที่ของสตริง (หากยังไม่มี) และอีกอันอยู่ในฮีป
-
อะไรคือความแตกต่างระหว่าง
String
,StringBuilder
และStringBuffer
คลาสในภาษาจาวา ?มีหนึ่งในผู้นำในคำถามสัมภาษณ์ Java อันดับต้น ๆ
ประการแรก
String
คือคลาสที่ไม่เปลี่ยนรูป ซึ่งหมายความว่าคุณไม่สามารถแก้ไขเนื้อหาได้เมื่อสร้างขึ้นแล้ว ในขณะที่StringBuffer
เป็นStringBuilder
คลาสที่ไม่แน่นอน คุณจึงเปลี่ยนได้ในภายหลัง ถ้าเราเปลี่ยนเนื้อหาของString
อ็อบเจกต์ มันจะสร้างสตริงใหม่ ดังนั้นมันจะไม่แก้ไขสตริงเดิม นั่นเป็นเหตุผลว่าทำไมประสิทธิภาพด้วยStringBuffer
จึงดีกว่าString
ด้วยความแตกต่างที่สำคัญระหว่าง
StringBuffer
และของเมธอดStringBuilder
นั้น จะถูกซิงโครไนซ์ในขณะที่ ไม่ใช่StringBuffer
StringBuilder
-
มีความแตกต่างใน
String
การสร้างโดยใช้ตัวอักษรและnew()
ตัวดำเนินการหรือไม่?มี หากเราสร้างสตริงด้วย
new()
ตัวดำเนินการ มันจะปรากฏในฮีปและในกลุ่มสตริง (หากยังไม่มี) หากคุณสร้าง aString
โดยใช้ตัวอักษร มันจะถูกสร้างขึ้นในกลุ่มสตริง (หากยังไม่มี) สระสตริงเป็นพื้นที่จัดเก็บภายในฮีปซึ่งเก็บตัวอักษรสตริง -
คุณสามารถแทนที่
private
หรือstatic
วิธีการใน Java?หนึ่งในคำถามสัมภาษณ์จาวาที่ยุ่งยากสำหรับมือใหม่ คุณไม่สามารถแทนที่
private
หรือstatic
เมธอดใน Java ได้คุณไม่สามารถแทนที่เมธอดได้
private
เนื่องจากขอบเขตของตัวระบุการเข้าถึงส่วนตัวนั้นอยู่ภายในคลาสเท่านั้น เมื่อคุณกำลังจะแทนที่บางสิ่ง เราควรจะมีคลาสหลักและคลาสย่อย หากเมธอดของซูเปอร์คลาสเป็น คลาสprivate
ลูกจะใช้ไม่ได้ และวิธีการในคลาสย่อยจะถือว่าเป็นเมธอดใหม่ (ไม่ถูกแทนที่)Static
ไม่สามารถแทนที่เมธอดได้ เนื่องจากstatic
เมธอดเป็นส่วนหนึ่งของคลาสเอง และไม่ใช่ส่วนหนึ่งของออบเจกต์ใดๆ ของคลาส แน่นอนว่าคุณสามารถประกาศstatic
เมธอดเดียวกันด้วยลายเซ็นเดียวกันในคลาสย่อยได้ แต่อีกครั้ง จะถือว่าเป็นเมธอดใหม่ -
ความแตกต่างระหว่าง
Abstract Class
และInterface
หนึ่งในคำถามสัมภาษณ์นักพัฒนาจาวาที่ได้รับความนิยมซึ่งมีหลักการ OOP ก่อนอื่น ใน Java
interface
กำหนดลักษณะการทำงานและabstract class
สร้างลำดับชั้นคลาสนามธรรม อินเตอร์เฟซ เป็นไปได้ที่จะมีเนื้อความของเมธอด (เมธอดที่ไม่ใช่นามธรรม) ในคลาสนามธรรม ส่วนต่อประสานสามารถมีวิธีการนามธรรมเท่านั้น ใน Java 8 หรือใหม่กว่า เป็นไปได้ที่จะกำหนดเมธอดดีฟอลต์และนำไปใช้โดยตรงในอินเทอร์เฟซ นอกจากนี้ อินเตอร์เฟสใน Java 8 อาจมีเมธอดแบบสแตติก ตัวแปรอินสแตนซ์สามารถอยู่ในคลาสนามธรรม อินเทอร์เฟซไม่สามารถมีตัวแปรอินสแตนซ์ อนุญาตให้ใช้ตัวสร้าง อินเทอร์เฟซไม่สามารถมีตัวสร้างใดๆ อนุญาตให้ใช้วิธีคงที่ ไม่อนุญาตวิธีการแบบคงที่ คลาสสามารถมีพาเรนต์ที่เป็นนามธรรมได้เพียงตัวเดียว หนึ่งอินเทอร์เฟซอาจใช้คลาสที่แตกต่างกัน คลาสนามธรรมอาจจัดเตรียมการใช้งานอินเทอร์เฟซ อินเทอร์เฟซไม่สามารถจัดเตรียมการใช้งานคลาสนามธรรมได้ คลาสนามธรรมได้รับอนุญาตให้ขยายคลาส Java อื่นและใช้อินเตอร์เฟส Java หลายตัว อินเตอร์เฟสได้รับอนุญาตให้ขยายอินเตอร์เฟส Java อื่นเท่านั้น คลาสนามธรรม Java สามารถมีสมาชิกคลาสส่วนตัวและป้องกันได้ สมาชิกของอินเทอร์เฟซ Java เป็นแบบสาธารณะตามค่าเริ่มต้น -
เราสามารถประกาศ
static
ตัวแปรและเมธอดในabstract
คลาสได้หรือไม่?ใช่ เป็นไปได้ที่จะประกาศ
static
ตัวแปรและเมธอดในabstract
เมธอด ไม่มีข้อกำหนดในการสร้างวัตถุเพื่อเข้าถึงบริบทแบบคงที่ ดังนั้นเราจึงได้รับอนุญาตให้เข้าถึงบริบทคงที่ที่ประกาศภายในabstract
คลาสโดยใช้ชื่อของabstract
คลาส -
JVM จัดสรรพื้นที่หน่วยความจำประเภทใดบ้าง
พื้นที่คลาสจัดเก็บโครงสร้างต่อคลาส เช่น พูลค่าคงที่รันไทม์ ฟิลด์ ข้อมูลเมธอด และโค้ดทั้งหมดสำหรับเมธอด
ฮีปเป็นพื้นที่ข้อมูลรันไทม์ที่จัดสรรหน่วยความจำให้กับวัตถุ
กองเก็บเฟรม ประกอบด้วยตัวแปรโลคัลและผลลัพธ์บางส่วน และมีส่วนร่วมในการเรียกใช้เมธอดและส่งคืน ทุกเธรดมีสแต็ก JVM ส่วนตัว ซึ่งสร้างขึ้นพร้อมกันกับเธรด เฟรมใหม่จะถูกสร้างขึ้นทุกครั้งที่เรียกใช้เมธอด เฟรมจะถูกทำลายเมื่อการเรียกใช้เมธอดเสร็จสิ้น
Program Counter Registerมีที่อยู่ของคำสั่ง Java virtual machine ที่กำลังดำเนินการอยู่
Native Method Stackประกอบด้วย Native Method ทั้งหมดที่ใช้ในแอปพลิเคชัน
-
เหตุใดจึงไม่อนุญาตการสืบทอดหลายรายการใน java
มันจะซับซ้อนจริงๆ ลองนึกภาพสามคลาส
A
,B
และC
และC
สืบทอดA
และB
ตอนนี้A
และB
คลาสมีเมธอดเดียวกันและคุณเรียกมันจากออบเจกต์คลาสลูก... อันไหนA
's หรือB
's? ที่นี่เรามีความคลุมเครือหากคุณพยายามสืบทอดสองคลาส Java จะแสดงข้อผิดพลาดในการคอมไพล์
-
เราสามารถโอเวอร์โหลด
main()
เมธอดได้หรือไม่?แน่นอน เราได้รับอนุญาตให้มีหลาย
main
วิธีในโปรแกรม Java โดยใช้เมธอดโอเวอร์โหลด ลองดูสิ! -
เราสามารถประกาศตัวสร้างเป็น
final
?ไม่. ไม่สามารถประกาศตัวสร้างเป็น a
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 ได้อย่างไร
คุณสามารถทำได้โดยทำให้ฟิลด์ของคลาสทั้งหมดเป็นแบบส่วนตัว คลาสแบบอ่านอย่างเดียวมีเมธอด getter เท่านั้นที่ส่งคืนคุณสมบัติส่วนตัวของคลาสเป็น
main
เมธอด คุณไม่สามารถแก้ไขคุณสมบัตินี้ได้ เหตุผลคือการขาด setters methodpublic class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } }
-
จะสร้างคลาสแบบเขียนอย่างเดียวใน Java ได้อย่างไร
private
คุณ ควรสร้างฟิลด์ของคลาสทั้งหมดอีกครั้ง ตอนนี้คลาสเขียนอย่างเดียวของคุณควรมีเมธอด setter เท่านั้นและไม่มี getter ดังนั้นเราจึงไม่สามารถอ่านคุณสมบัติของคลาสได้public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } }
-
แต่ละ
try
บล็อกต้องตามด้วยcatch
บล็อกใช่ไหมไม่. ไม่ใช่เรื่องจำเป็น แต่ละ
try
บล็อกสามารถไม่มีcatch
บล็อก อาจตามมาด้วย catchblock หรือบล็อกสุดท้าย หรือแม้แต่ไม่มีเลย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...
อีกหนึ่งตัวอย่าง: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
คลาสและโยนตามด้วยชื่อคลาสข้อยกเว้นThrow
ถูกใช้ในเนื้อความของเมธอดเพื่อส่งข้อยกเว้นThrows
ใช้ในลายเซ็นเมธอดเพื่อประกาศข้อยกเว้นที่อาจเกิดขึ้นในคำสั่งที่มีอยู่ในเมธอดอนุญาตให้โยนข้อยกเว้นได้ครั้งละหนึ่งรายการ แต่คุณสามารถจัดการข้อยกเว้นหลายรายการได้โดยการประกาศโดยใช้คำ
throw
สำคัญ คุณสามารถประกาศข้อยกเว้นได้หลายรายการ เช่นpublic void method()throws IOException
,SQLException
คำถามสัมภาษณ์ Java 21 อันดับแรก
มีคำถามสัมภาษณ์ Java มากมายและเราไม่สามารถรวบรวมทั้งหมดได้ในบทความเดียว อย่างไรก็ตาม คุณสามารถค้นหาคำถามสัมภาษณ์เกี่ยวกับ Java ที่พบบ่อยได้ที่นี่ อ้างอิงจากผู้จัดการฝ่ายทรัพยากรบุคคลของบริษัทไอที
GO TO FULL VERSION