درباره statement های شبیه ;x=x+10
سلام در برنامه نویسی جاوا مبتدی ولی علاقه مند هستم
در اکلیپس یه کلاس ساده ایجاد کردم و یک Field بصورت ;int x=10 تعریف کردم، تا این جای کار مشکلی نبود، اما زمانی که استمینت ;x=x+10 رو کد زدم، اکلیپس به سمیکالن استیمنت (;int x=10) ایراد گرفت. شک کردم روی استیمنت (;x=x+10) و پاکش کردم خطا از بین رفت.
سوالم اینه که مگه این استیمنت (;x=x+10) یک نوع فیلد و یا به اصطلاح Variable Declaration محسوب نمیشه، از طرفی مگه ما نمی تونیم هر چقدر فیلد خواستیم تعریف کنیم و نباید مشکلی داشته باشیم؟ پس مشکل کجاست؟
عذر خواهی میکنم اگه از کلمات و اصطلاحات زبان استفاده می کنم چون هم دوست دارم و هم این طوری دارم یاد می گیرم/
ممنون میشم اگه جوابی دریافت کنم.
آپدیت: این دفعه این دو تا استیمنت رو داخل یک متد تعریف کردم دیگه خطایی نداد. ?What's the problem
ببخشید سرتون رو درد آوردم.
11 پاسخ
سلام
اولا باید بگم نمی دونم چرا نمیشه برای شما دکمه پسندیدم رو فعال کنم و به اصطلاح لایک بذارم
درسته، بله حتی تعریف یک متغیر هم نوعی استیمنت هستش اما سوالم این بود که "عمل جمع زدن" در این جا چیزی خاصی محسوب میشه یا صرفا یک استیمنت هستش؟
راستش جاوا رو بلد نیستم ، با اطلاعات c# ای دارم جواب میدم که البته مسئله مربوط میشه به بحث کلاس ها.
شما داخل کلاس ( نه method ) یک property تعریف کردید ، int x=10. تا اینجا درسته و این x توسط تمام متذ های کلاس دیده میشه . ( و این میشه variable declaration )
اما برای استفاده از اون حتما باید داخل یک method استفاده اش کنید. کلا نمی تونید داخل تعریف خود کلاس کد بزنید.
ببینید در برنامه نویسی هر دستور برنامه نویسی رو یک استیتمنت میگن. یعنی تعریف متغیر یک استیتمنت هست. جمع زدن یک استیتمنت هستش و حتی بعضی وقت ها شرط ها و حلقه ها رو هم به عنوان استیتمنت میشناسن.
دقت داشته باشید که توی متد هم میشه متغیر معرفی کرد ولی دیگه اون متغیر محلی حساب میشه و بقیه متد ها نمی تونن به اون دسترسی داشته باشند.
توی بدنه کلاس شما میتونید علاوه بر متغیر (خصوصیت) میتونید ثابت هم تعریف کنید. متدهای کلاس پدر رو override کنید و همچنین constructor تعریف کنید.
با تشکر از استاد عادلی فر بخاطر صبر و حوصله ای که دارند و عزیزمون آقای آقامیری
ببخشید اگه سوالات من ابتدایی هست اما خب بنظرم مهم هستش
در یک توتریال انگلیسی که در حال یادگیری زبان جاوا هستم در مورد Instance Variables نوشته که این متغیر ها توسط تمامی متدها، کانستراکتورها و بلاک ها قابل رویت هستند. من هم در یک کلاس ساده اومدم و یک متغیر ساده بصورت مثلا ;"String s="Abbas رو تعریف کردم. طبق تعریف این استیمنت یک تعریف متغیر محسوب میشه. حالا بلافاصله در خط بعدی از متد (System.out.println(s استفاده کردم اما اکلیپس به مغیر s ایراد گرفت یعنی این متد این متغیر رو نمی بینه.
البته اومدم و اون رو در یک متدی که خودم ساخته بودم تعریف کردم یعنی به این صورت:
{(public void showName() {System.out.println(s
حالا مشکل حل شده بود.
سوال اینه که منظور از متدی که در اون آموزش گفته بود، متدهایی که خودمون تعریف می کنیم و یا متدهایی هستش که در خود جاوا مثل ......System رو وجود داره؟
سلام به شما دوست عزیز.
توی بدنه کلاس شما فقط می تونید یا property تعریف کنید و یا متد (constructor رو هم جزو متدها حساب کنید) ولی نمی تونید توی بدنه کلاس از عملگرها و عبارت های محاسبه ای و کلا هر کد دیگری غیر از تعریف کردن استفاده کنید.
int x=10 یک تعریف متغیر محسوب میشه و مشکی نداره که توی بدنه کلاس باشه. ولی x=x+10 تعریف خصوصیت یا متد نیست بلکه یک عمل محاسباتی و پردازشی هستش که شما اجازه ندارید اون رو توی بدنه کلاس انجام بدین. برای این کار شما باید یک متد تعریف کنید و این کار رو توی اون متد انجام بدین.
شاید بشه بهش گفت Assigment.
با سلام به اساتید بزرگوار و تشکر از این دو بزرگوار
به این ترتیب میشه گفت که x=x+10 رو نمیشه در بدنه کلاس و خارج از یک متد تعریف کرد، اما سوال اینه که پس این استیمنت چیه؟ تعریف متغیر که قطعا نیست. آیا Variable Assignment محسوب میشه؟
منظور از متد متدهایی هستن که شما تعریف کرده بودین و متدهایی که توی همین کلاس تعریف شده اند.
در کد شما متغیر s یک instance variable هست و توسط همه متدها و کانستراکتورهای کلاس شما قابل دسترس است.
عمل جمع زدن یعنی X=X+10 هم یک statement هست ولی statement به معنی عبارت برنامه نویسی هست. ولی statement های تعریف متغیر و تعریف متد رو فقط میتونیم توی بدنه کلاس داشته باشیم و statement های محاسبات و مقایسه و شرط و حلقه باید در داخل متد باشد.
امیدوارم تونسته باشم درست بیان کنم
پس تا اینجا متوجه شدم که تعریف متغیر رو تنها می توان بیرون متد و در داخل کلاس انجام داد.
یعنی نود درصد فضای کلاس در حقیقت در اختیار متد هست اما سوال اینجاست که بجز تعریف متغیر و یا مقدار دهی اولیه به اون دیگه چه چیزایی رو میشه خارج از متد انجام داد؟