עבור לתוכן

שאלה בג'אווה לגבי הגדרת עצם

Featured Replies

פורסם

לצורך העניין, נניח אני רוצה ליצור עצם חדש בשם red מסוג color, אבל אני לא רוצה להכניס אליו שום ערך, כי אני בכל מקרה מתכוון להגיד שהוא שווה למשהו אח"כ. כלומר, אני רוצה ליצור אותו ריק, רק שיהיה לו שם.

איך רושמים את זה תחבירית?

אפשרות #1

color red;

אפשרות #2

color red=new color();

האפשרות השנייה אני כבר יודע שהיא עובדת, בהנחה שיש בקלאס של color קונסטראקטור ריק, שנראה כך:

color()
{
}

אבל האם הראשונה גם תקינה?

ושוב אני מזכיר שאני מכניס משהו לred, בשלב מאוחר יותר, נניח:

שיש לי עוד עצם מטיפוס color שקוראים לו blue, אז אני רושם:

red=blue;

תודה

פורסם

color red;

OR

color red = null;

will do it (it's the same thing).

just don't use any function on that object until you write: red = new color(...);

פורסם

מה שאתה צריך לשים לב זה כי לרשום

Color Red;

אינו יוצר שום אובייקט או מקצה מקום בזכרון. הוא רק יוצר מצביע (בשם Red) שכרגע לא מצביע לשום מקום

רק בעת השימוש במילה השמורה New אתה ממש יוצר אובייקט ואז מוקצה מקום בזכרון בהתאם

פורסם
  • מחבר

טוב אז במקום לעבוד באופן כ"כ תיאורטי למה לא לבנות מהר מחלקה ואיזו פעולה? בניתי משהו קטן:

class Details
{
private int digit;
private int appears;
Details (int Digit, int Appears)
{
this.appears=Appears;
this.digit=Digit;
}
Details()
{
}
int getAppears()
{
return this.appears;
}
int getDigit()
{
return this.digit;
}
void setAppears(int Appears)
{
this.appears=Appears;
}
void setDigit(int Digit)
{
this.digit=Digit;
}
}

import java.util.*;
class testingHere

{
static Scanner reader=new Scanner(System.in);
public static void main(String[]args)
{
System.out.println("Enter digit, appears");
int d=reader.nextInt();
int a=reader.nextInt();
Details d1=new Details(d, a);
Details d2;
d2=d1;
System.out.println(d1.getAppears() + d2.getAppears());
}
}

עבד מצויין, בדיוק כמו שעשיתי במתכנות שהייתה לי לא מזמן, כך שאני שמח ;D (הייתי בטוח שטעיתי שם)(למקרה שלא הובן כהלכה מה שרציתי לבדוק פה זה למעשה השורות האחרונות בקוד השני - הקטע עם הDetails d2 וה-d2=d1)

------------------------------------

לגבי הפוסט מעליי:

הבנתי למה אתה מתכוון, אבל האם במובן הפרקטי זה משנה?

במקרה שלי אם שמת לב לא השתמשתי במילה new כשיצרתי את העצם השני (=d2), אבל זה בגלל שעשיתי השוואה בין העצם הכביכול "שלא קיים" ובין עצם עם ערכים בתכונות.

פורסם

זה משנה אם אתה מנסה לגשת אליו

בדוגמא שלך יצרת את d2 ובשורה הבאה הכנסת אליו ערך:

    Details d2;
d2=d1;

אם היית מנסהלגשת ל-d2 בין השורה הראשונה לשנייה היית מקבל Null Pointer Exception (או איך שקוראים למקבילה של JAVA של זה)

והתוכנית שלך הייתה עפה (בזמן ריצה או בזמן קומפילציה, אני לא סגור על זה)

זאת לא טעות להכריז על d2 בלי לאתחל אותו, אבל כשעושים את זה צריך לשים לב שאנחנו נשים

ערך ב-d2 כדי שלא בטעות נפנה אליו והתוכנית תעוף.

כמובן יש לזה שימושים, אבל לא במקרה הנוכחי, שיכולת בשורה אחת להצהיר עליו ולהכניס בו בערך

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים