
-
"לפרק"
public static void main(String args[])
.אחת משאלות הראיונות הפופולריות ב-Java לטריים, וקלה מאוד.
-
public
הוא משנה גישה. אנו משתמשים בו כדי לציין את הגישה לשיטה זו. כאן השינוי הוא "ציבורי", כך שלכל מחלקה יש גישה לשיטה זו. -
static
. מילת מפתח זו של Java פירושה שאנו משתמשים בשיטה זו מבלי ליצור אובייקט חדש של מחלקה. -
Void
הוא סוג ההחזרה של השיטה. זה אומר שהשיטה לא מחזירה שום ערך. -
main
זה שם השיטה. JVM "מכיר" אותו כנקודת כניסה לאפליקציה (צריכה להיות לה חתימה מסוימת).Main
היא שיטה שבה מתרחשת הביצוע העיקרי. -
String args[]
. זה הפרמטר המועבר לשיטה הראשית. כאן יש לנו את הטיעונים מסוג String שאפליקציית 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
אובייקט אתה מקבל אובייקט חדש (clone) ומשנה את השיבוט הזה בזמן היצירה.דוגמה טובה היא
String
, זה נמצאimmutable
בג'אווה. זה אומר שאתה לא יכול לשנות את האובייקט עצמו, אבל אתה יכול לשנות את ההתייחסות לאובייקט. -
כמה אובייקטים נוצרים בקוד הבא?
אחת משאלות הראיונות הטכניות ב-Java שמחליפה את מספר 4.
String s1="Hello"; String s2="Hello"; String s3="Hello";
התשובה היא "רק אחת" כי לג'אווה יש מאגר מחרוזות. כאשר אנו יוצרים אובייקט String באמצעות האופרטור new() הוא יוצר אובייקט חדש בזיכרון הערימה. אם נשתמש בתחביר מילולי של String, כמו בדוגמה שלנו, הוא עשוי להחזיר אובייקט קיים ממאגר המחרוזות, אם הוא כבר קיים.
-
כמה אובייקטים נוצרים בקוד הבא?
String s = new String("Hello");
יש 2 חפצים. האחד נמצא במאגר קבוע של מיתר (אם לא קיים כבר) והשני בערימה.
-
מה ההבדל בין
String
שיעוריםStringBuilder
ב-StringBuffer
Java?יש אחד מהמובילים בשאלות הראיונות המובילות בג'אווה.
קודם כל
String
זה מחלקה בלתי משתנה. זה אומר שאתה לא יכול לשנות את התוכן שלו ברגע שנוצר. בעודStringBuffer
ומחלקותStringBuilder
ניתנות לשינוי, כך שתוכל לשנות אותן מאוחר יותר. אם נשנה את תוכןString
האובייקט, הוא יוצר מחרוזת חדשה ולכן הוא לא משנה את המקור. זו הסיבה שהביצועים עםStringBuffer
טובים יותר מאשר עםString
.ההבדל העיקרי בין השיטות של זה
StringBuffer
מסונכרנות ואילו של לא.StringBuilder
StringBuffer
StringBuilder
-
האם יש הבדל בכך
String
שנוצר באמצעות מילולית ועםnew()
אופרטור?יש. אם ניצור String עם
new()
האופרטור, הוא מופיע בערימה וב-String pool (אם עדיין לא קיים). אם אתה יוצרString
באמצעות מילולית, הוא נוצר במאגר המחרוזות (אם לא קיים כבר). בריכת מיתרים היא אזור אחסון בתוך הערימה, המאחסן מילולי מיתרים. -
האם אתה יכול לעקוף
private
אוstatic
שיטה ב-Java?אחת משאלות הראיונות המסובכות של ג'אווה עבור טירונים. אתה באמת לא יכול לעקוף
private
אוstatic
שיטה ב-Java.אתה לא יכול לעקוף את
private
השיטות מכיוון שההיקף של מפרט הגישה הפרטית הוא רק בתוך המחלקה. כאשר אתה מתכוון לעקוף משהו, כדאי שיהיה לנו כיתת הורים וילדים. אם השיטה של מחלקת העל היאprivate
, כיתת ילד לא יכולה להשתמש בה, והשיטות בכיתת ילד יטופלו כמתודות חדשות (לא ידרסו).Static
גם לא ניתן לעקוף שיטות, מכיווןstatic
ששיטות הן חלק מהמחלקה עצמה, ולא חלק מכל אובייקט של המחלקה. בטח שאתה יכול להכריז על אותהstatic
שיטה עם אותה חתימה בכיתות ילדים, אבל שוב, הן יטופלו כשיטות חדשות. -
ההבדל בין
Abstract Class
לביןInterface
אחת משאלות הראיונות הפופולריות למפתחי ג'אווה הנוגעת לעקרונות OOP. קודם כל, בג'אווה
interface
מגדיר התנהגות ויוצרabstract class
היררכיה.שיעור מופשט מִמְשָׁק אפשר שיהיה גוף מתודה (שיטות לא מופשטות) בכיתה מופשטת לממשק יכולות להיות רק שיטות מופשטות. ב-Java 8 ומעלה, ניתן היה להגדיר שיטות ברירת מחדל וליישם אותן ישירות בממשק. כמו כן, ממשקים ב-Java 8 יכולים להיות בעלי שיטות סטטיות. משתני מופע יכולים להיות במחלקה מופשטת ממשק לא יכול לכלול משתני מופע. מותר לבנות לממשק לא יכול להיות שום בנאי. שיטות סטטיות מותרות שיטות סטטיות אינן מותרות לכיתה יכול להיות רק הורה מופשט אחד ממשק אחד עשוי ליישם מחלקות שונות המחלקה המופשטת עשויה לספק את היישום של הממשק. הממשק לא יכול לספק את היישום של המחלקה המופשטת. מחלקה אבסטרקטית רשאית להרחיב את מחלקת Java האחרת ולהטמיע ממשקי Java מרובים. ממשק מותר להרחיב את ממשק Java האחר בלבד. לכיתה מופשטת של Java יכולים להיות חברי כיתה פרטיים ומוגנים חברים בממשק Java הם ציבוריים כברירת מחדל -
האם נוכל להכריז על
static
משתנים ושיטות במחלקהabstract
?כן, אפשר להצהיר על
static
משתנים ושיטותabstract
בשיטה. אין דרישה ליצור אובייקט כדי לגשת להקשר הסטטי. אז מותר לנו לגשת להקשר הסטטי המוצהר בתוך המחלקהabstract
על ידי שימוש בשם המחלקהabstract
. -
אילו סוגי אזורי זיכרון מוקצים על ידי JVM?
Class Area מאחסן מבנים לפי מחלקה, למשל, מאגר קבוע של זמן ריצה, שדות, נתוני מתודות וכל הקוד של המתודות.
Heap הוא אזור נתונים בזמן ריצה שבו זיכרון מוקצה לאובייקטים.
מחסנית מסגרות מחסנית. הוא מכיל משתנים מקומיים ותוצאות חלקיות, ולוקח חלק בהפעלת השיטה והחזרה. לכל שרשור יש ערימת JVM פרטית, שנוצרה במקביל לשרשור. מסגרת חדשה נוצרת בכל פעם שמתודה מופעלת. מסגרת נהרסת כאשר הפעלת השיטה שלה מסתיימת.
Program Counter Register מכיל כתובת של הוראת המכונה הוירטואלית של Java שמתבצעת כעת.
Native Method Stack מכיל את כל השיטות המקוריות המשמשות באפליקציה.
-
מדוע אסורה ירושה מרובה ב-Java?
זה יהיה ממש מסובך. תאר לעצמך שלוש מחלקות
A
,B
, וC
וC
יורשA
וB
. עכשיו,A
ולמחלקותB
יש את אותה שיטה ואתה קורא לה מאובייקט כיתת ילד... איזה מהם?A
של אוB
של? כאן יש לנו אי בהירות.אם תנסה לרשת שתי מחלקות, 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?
אתה יכול לעשות זאת על ידי הפיכת כל שדות הכיתה לפרטיים. למחלקה לקריאה בלבד יש רק מתודות getter אשר מחזירות את הרכוש הפרטי של המחלקה למתודה
main
. אתה לא יכול לשנות את המאפיין הזה, הסיבה היא היעדר שיטת קובעים.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
בלוק. זה יכול להיות אחריו בלוק קאץ' או בלוק סופית או אפילו בלעדיהם בכלל.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
נ.ב.: לפני Java 8 שיטות בממשקים היו יכולות להיות מופשטות בלבד. ב-Java 8 ומעלה, ניתן היה להגדיר שיטות ברירת מחדל וליישם אותן ישירות בממשק. -
מה ההבדל בין
throw
מילותthrows
מפתח?Throws
משמש להכרזה על חריג, כך שהוא פועל בדומה לבלוקtry-catch
.Throw
מילת המפתח משמשת כדי לזרוק חריג במפורש משיטה או מכל בלוק קוד אחר.Throw
אחריו מופיע מופע שלException
מחלקה ואחריו Throws מופיעים שמות מחלקות חריגות.Throw
משמש בגוף השיטה כדי לזרוק חריג.Throws
משמש בחתימת שיטה כדי להכריז על החריגים שעלולים להתרחש בהצהרות הקיימות בשיטה.מותר לזרוק חריג אחד בכל פעם, אבל אתה יכול לטפל במספר חריגים על ידי הכרזה עליהם באמצעות
throw
מילת מפתח. אתה יכול להכריז על מספר חריגים, למשל,public void method()throws IOException
,SQLException
.
GO TO FULL VERSION