آموزش مقدماتی جاوا (J2SE)

آموزش مقدماتی جاوا (J2SE) شامل مفاهیم پایه‌ برای شروع کار با زبان برنامه نویسی جاوا است.

شروع کد نویسی

برای شروع کدنویسی جاوا نیاز به یک ادیتور داریم. من از ادیتور IntelliJ استفاده می‌کنم. همچنین شما می‌توانید از‌ ادیتور Eclips نیز استفاده کنید.

نکاتی در مورد نام‌گذاری در جاوا

در زبان برنامه نویسی جاوا نام پکیج‌ها را با حروف کوچک بنویسید. حرف اول نام کلاس را با حرف بزرگ شروع کنید‌ و در ادامه از روش camelCase استفاده کنید مانند:

Hooman, Pouria,Mashhad,PouriaParhami

برای نام متغییرها و متدها ازروش camelCase استفاده کنید مانند:

getName, getValue

در نام گذاری پکیج‌ها دقت کنید، بهتر است به این شکل نام‌گذاری کنید:

نام پروژه.نام سازمان.org = سازمان
org.abofazelab.shalgham
نام پروژه.نام شرکت.com = شرکت
com.darkoobweb.havij
نام پروژه.نام دانشگاه.uni = دانشگاه
uni.ferdowsi.khiar
نام پروژه.اسم سایت یا مکانی که پروژه خود را ثبت کردید.net = شخص هستید
net.sf.golabi

متغییر ها در جاوا

برای ساخت یک متغییر کافی‌است مشخص کنیم عمومی‌ (Public)، خصوصی (Private) یا محافظت شده (Protect) است، سپس نوع متغییر و در آخر نام آن را مشخص می کنیم.

و اگر متغییر در سطح متد باشد:

همان‌طور که می‌دانید از متغییر‌ها برای نگه‌داری داده‌ها استفاده می‌کنیم.

نوع داده و کلاس ها در جاوا (Data type And Class)

در کد بالا می‌بینید که برای نگه‌داری اعداد صحیح از int، اعداد‌اعشاری از float، (دقت کنید که بعد از عدد اعشاری باید حرف f را بنویسید)، برای اعداد صحیح بزرگ از long، (دقت کنید که برای اعداد‌ صحیح بزرگ بعد از عدد حرف L را بنویسید)، برای اعداد اعشاری بزرگ از double، (دقت‌کنید که برای اعداد‌ اعشاری بزرگ بعد از عدد حرف d را بنویسید)، برای اعداد‌ صحیح کوچک از short برای کاراکتر از char (می‌توانید کد اسکی کاراکتر را نیز بدهید مانند مثال بالا)، برای وضعیت منطقی از boolean استفاده می‌کنیم، این‌ها نوع‌داده‌ها(Data type) در جاوا هستند، (حرف اول آنها کوچک است)، کلاس‌هایی نیز داریم، به کد زیر دقت کنید:

همان طور که در کد بالا می‌بینید، این‌ها کلاس‌ها هستند و با حرف اول بزرگ نوشته می‌شوند.

عملگرها در جاوا

جمع تفریق ضرب تقسیم باقیمانده بزرگتر
+ * / % <
کوچکتر مساوی مخالف کوچکتر مساوی بزرگتر مساوی و
> == =! => =< &&

اجرای برنامه در جاوا

برای اجرای برنامه شما به متدی به نام main نیاز دارید :

جاوا برای شروع به بدنبال این متد می‌گردد و این متد را اجرا می‌کند، با اجرا شدن این متد برنامه شما نیز اجرا می شود.

برای نوشتن تو ضیحات یک خطی از // و چند خطی از /**/ استفاده می‌کنیم .

برای چاپ در جاوا از دو متد () System.out.print و ()System.out.println استفاده می‌کنیم، به مثال زیر دقت کنید:

در مثال بالا من پکیجی به نام darkoobweb ایجاد کردم، درون آن کلاسی به نام Hooman ساختم، در متد main این کلاس من از print و println برای چاپ رشته‌ها استفاده کردم، و پاسخ بدین شکل خواهد بود:

برای println :

Salam

Man Java

Hastam

و برای print :

Salam Man Java Hastam

متوجه شدید که محتویات جدید برای چاپ در println درخط بعدی چاپ می‌شوند، اما در print همه پشت سرهم چاپ می‌شوند و به اصطلاح خط نمی‌شکند.

شرط ها در جاوا

if

به کد زیر دقت کنید :

در مثال بالا مشاهده می‌کنید، برای نوشتن if اول کلمه کلیدی if را می‌نویسیم، سپس در داخل پرانتز شرط، و در داخل بلاک if دستور یا‌ دستوراتی که در صورت درست بودن شرط می‌خواهیم انجام شوند را می‌نویسیم، سپس اگر نیاز داشتیم می‌توانیم از else هم استفاده کنیم(در صورت نیاز) .

خوب بیایید با من if را بخوانیم، اگر محتوای متغییر str برابر بود با drinDrin چاپ کن salam، در غیر این صورت چاپ کن bye. حتما متوجه شدید که من می‌توانستم بنویسم (“if(str==”drinDrin اما بجای آن از equals استفاده کردم برای رشته‌ها بهتر‌است مقایسه به این شکل انجام شود.

Switch

به کد زیر دقت کنید:

اگر می‌خواهیم مقایسه‌های زیادی انجام دهیم می‌توانیم از این دستور استفاده کنیم، همان‌طور که در بالا مشاهده می‌کنید، برای نوشتن switch، از کلمه کلیدی switch استفاده می‌کنیم. سپس در داخل پرانتز عبارتی را که می‌خواهیم مورد بررسی قرار دهیم را می‌نویسیم، سپس با case چک می‌کنیم که اگر عبارت‌ما مانند عبارت روبه روی case بود، دستورات آن بلاک را انجام دهد و بعد خارج شود، خروج با دستور break انجام می‌شود، اگر عبارت‌ما و عبارت روبه‌روی case مانند هم نباشد، به case بعدی می‌رود و مقایسه می‌کند، اگر هیچ یک از case ها اجرا نشود، به سراغ default می‌رود و دستور یا دستورات آن بلاک را انجام می‌دهد.

حلقه ها در جاوا

for

در کد بالا ساختار حلقه for را مشاهده می‌کنید، یک متغییر، شرط، شمارنده، و سپس‌دستوراتی که اگر شرط هر بار بر‌قرار باشد، اجرا خواهد شد. در مثال بالا اعداد 0 تا 11 را چاپ کرده ایم، در حلقه بالا گفته می‌شود تا زمانی که i کوچکتر از 12 است، مقدار i را چاپ کن، سپس به i یک واحد اضافه کن. در صورتی که i کوچک‌تر از 12 نباشد(بزرگتر یا مساوی 12 باشد)، از حلقه خارج می‌شویم و چیزی چاپ نمی‌شود.

While

به مثال بالا توجه‌کنید، برای نوشتن حلقه while، به یک شمارنده احتیاج داریم که نقش آن را cunt بر عهده دارد، کلمه کلیدی while را می‌نویسیم، سپس در داخل پرانتز شرط را بیان می‌کنیم، در مثال بالا تا زمانی‌که مقدار cunt مخالف 10 باشد، مقدار cunt چاپ می‌شود و سپس یک واحد به آن اضافه می‌شود و دوباره روز از نو روزی از نو.

do while

این حلقه نیز مانند حلقه‌های دیگر‌است، برای همین به توضیح‌خاصی احتیاج ندارد، نکته در این است که این حلقه یک بار انجام می‌شود، حتی اگر شرط برقرار نباشد، مثلا حتی اگر gilas کوچکتر از 7 هم نباشد، یک بار مقدار gilas چاپ می‌شود و به gilas یک واحد اضافه می‌شود.

Foreach

ساختار foreach در‌جاوا به شکل بالا می‌باشد، در قسمت آرایه‌ها بیشتر با این حلقه آشنا خواهید شد.

آرایه در جاوا

در کد بالا می‌بینید که یک آرایه ایجاد کردیم، برای ساخت آرایه کافی است نوع آن را مشخص کنیم، در مثال بالا String، سپس علامت [] و در سمت راست درون [] طول آرایه را می‌نویسیم، طول آرایه ما 10 است، یعنی از 0 تا 9، برای مقدار‌دهی آرایه کافی است نام آن را بنویسیم و در داخل [] شماره‌خانه‌ای از آرایه را که می‌خواهیم داده ما در آن قرار بگیرد ذکر کنیم .

برای خواندن خانه‌های آرایه نیز می‌توانیم از حلقه‌ها استفاده کنیم :

برای چاپ من از حلقه foreach استفاده کرده‌ام، اول به متغییری هم جنس آرایه احتیاج داریم، سپس نام آرایه را می‌نویسیم، در این حالت، هر خانه از name را داخل asmai می‌ریزد و سپس مقدار asami را چاپ می کند.

آرایه دو‌ بعدی در جاوا

برای نوشتن آرایه‌ دو بعدی، مانند کد زیر عمل می‌کنیم :

در کد بالا من یک آرایه دو بعدی به نام core ساختم و در خانه 2 و3 عدد 7 را قرار دادم .

اگر به‌خواهیم به کلاسی در پکیج دیگری دست‌رسی داشته باشیم، باید آن کلاس را import کنیم به شکل زیر:

همان‌طور که می‌بینید، کلمه import را نوشته بعد از آن نام پکیج بعد علامت نقطه و سپس نام کلاس را می‌نویسیم .

تعریف متد و پراپرتی در جاوا

فرض کنید کلاسی به نام پوریا دارم ، خصوصیات یا پراپرتی های پوریا چه چیز هایی می تواند باشد ؟؟

رنگ مو ، رنگ چشم ، قد و….

رفتارها یا متدهای پوریا چیست ؟؟؟

خوردن ، خوابیدن ، ورزش کردن ، سیگار کشیدن و….

حال بیایید با هم این پراپرتی ها و متد ها را بنویسیم :

خوب در مثال بالا می بینید که من دو پراپرتی دارم به نام های hairColor و age ،

hariColor پابلیک است ، یعنی همه به آن دست رسی دارند ، استاتیک است ، این متغییر یک بار در قسمت stack رم قرار می گیرید ،و از نوع رشته است .

age پابلیک است ، استاتیک است و از نوع عدد صحیح می باشد.

من چهار متد دارم ، khordan , khabidan, showHairColor,showAge

khordan پابلیک است ، یعنی همه به آن دست رسی دارند ، استاتیک است ، یعنی در قسمت stack رم قرار می گیرد و void است ، یعنی این متد چیزی به ما پس نمی دهد . این متد فقط چاپ می کند golabi khordam

متد khabidan مشابه khordan است ، اما متد showHairColor می خواهیم رنگ موی pouria را چاپ کنید برای این کار می نویسیم Pouria.hairColor

اما چگونه به پراپرتی ها مقدار بدیم ؟ و چطور متد ها را صدا بزنیم ؟؟؟ به این شکل :

کافیست درمتد main این کدها را بنویسم :

خوب اگر بخواهیم متد ما مقداری برگرداند چطور باید آن را بنویسیم ؟؟؟

در کد بالا متدی به نام sum را می بینید ، ایم متد دو مقدار از نوع int عدد صحیح در یافت می کند در x و y قرار می دهد ، سپس آنها را باهم جمع کرده در متغییری به نام result میریزد ، و بعد result را بر می گرداند ، دقت کنید که بعد از public static کلمه کلیدی int آورده شده یعنی این متد عدد صحیح به ما می دهد .

و برای استفاده از این متد به شکل زیر عمل می کنیم:

بیاد به شکل دیگری عمل کنیم ، من دو کلاس می سازم به نام های Mohamd و Amir دو پراپرتی برای Amir ایجاد می کنم ، hairColor و age حال می خواهم در کلاس Mohamad به پراپرتی های Amir دست رسی داشته باشم و به آنها مقدار بدم .

picOneEOne

در تصویر بالا مشاهده می کنید که کلاس Amir و Mohamad ایجاد شده است ، به کلاس های دیگر کاری نداریم ، همان طور که می بینید ، در پوشه src سورس کدهای من قرار دارد.

خوب این هم کدهای مربوط به کلاس Amir

چون پراپرتی های کلاس Amir استاتیک است می توانیم به این شکل به آنها دست رسی داشته باشیم Amir.hariColor = “red” اما من می خواهم چند شی از روی Amir ایجاد کنم تا با ساخت object یا شی هم آشنا بشید.

برای ساخت شی یا همان Object می نویسیم

نام کلاس ، کلمه کیدی new = نام دلخواه شی ، نام کلاس

Amir mair = new Amir();

به این ترتیب من 3 شی از روی کلاس Amir ایجاد کردم سپس برای هر کدام رنگ مو و سن را مقدار دهی کردم ، در کد بالا می بینید که رنگ مو و سن را به صورت مستقیم هم مقدار دهی کرده ام یعنی Amir.hairColor = “gold”;

در انتها رنگ مو و سن همه اشیاء و خود کلاس را چاپ کردم ، به نظر شما چه چیزی چاپ می شود ؟

gold, red, blue,black ,12,12,24,29 ؟ اگر فکر می کنید این داده ها چاپ می شوند اشتباه می کنید

این چیزیست که چاپ خواهد شد :

black

black

black

black

29

29

29

29

می بینید که رنگ موی همه balck و سن 29 چاپ می شود، اما چرا ؟؟

چون پراپرتی های Amir استاتیک هستند و در فضای stack رم قرار می گیرند ، اما آبجک های ایجاد شده در فضای هیپ در رم جای می گیرند ، و برای تمام آبجکت های ما فقط یک رنگ مو و یک سن وجود دارد ، پس هر گاه رنگ مو یا سن هر یک از آبجکت ها را تغییر دهیم ، رنگ مو یا سن همه تغییر می کند ، در کد بالا آخرین تغییر balck برای رنگ مو و 29 برای سن بوده است ، (در مورد فضای استک و هیپ در رم تخقیق کنید )

برای رفع این مشکل من پراپرتی های hairColor و age در Amir را غیر استاتیک می کنم به و کد به این شکل در می آید در کلاس Amir

اما در کلاس Mohamad دچار مشکل می شوم ، چهار خط از کد ما به مشکل بر خورده و کار نمی کند ، این خط کد ها :

چرا این کد ها دچار خطا شده اند ؟ چون ما نمی توانیم در فضای استک به متدها یا پراپرتی های غیر استاتیک دست رسی داشته باشیم ، به همین علت من نمی توانم مستقیم به صورت گذشته این پراپرتی ها را مقدار دهی کنم یا مقدار آنها را چاپ کنم ، برای دست رسی باید از روی کلاس آبجک بسازیم ، آبجک سازی را هم که در کد قبل آموختید .

پس کد ما به این شکل در می آید :

حالا اگر کد را اجرا کنید می بینید که مقدار رنگ مو و سن برای هر شی متفاوت چاپ شده است .

به خاطر داشته باشید ، از استاتیک کردن متدها و پراپرتی ها خود داری کنید ، مگر در مواقع نیاز وقتی پراپرتی یا متدی استاتیک می شود در داخل فضای استک رم می نشیند و تا زمانی که برنامه شما درحال اجراست آن پراپرتی پاک نمی شود ، فضای استک محدود است پس مراقب باشید که آن را بیهوده پر نکنید ، اما در مورد فضای هیپ جای نگرانی نیست ، چرا ؟

چون جاوا دارای GC یا Garbage Collector آشغال جمع کن می باشد ، وظیفه این فرد از بین بردن پراپرتی های است که برنامه ما دیگر از آنها استفاده نمی کند ، با این کار نمی گذارد فضای رم بی جهت پر شود .

پس در این دوره آموزشی پراپرتی های خود را استاتیک نکنید مگر آن که ضروری باشد ، می توانید در این باره در اینترنت بیشتر جستو جو کنید .

آشنایی با constructor در جاوا

وقتی شی می سازیم ، اگر override اش کنیم ، یک متد به صورت خود کار صدا زده می شود تکرار می کنم اگر override کنیم ، به این متد ، متد constructor می گویند ، ممکن است نیاز داشته باشیم در این متد کدی بنویسیم ، برای دست رسی و کد نویسی در متد constructor به این شکل عمل می کنیم :

خوب همان طور که در کد بالا می بینید یک متد static داریم به آن اصطلاحا JVM Constructor می گویند ، و فقط یک بار اجرا می شود حالا هر چند بار که آبجکت بسازید برای او فرقی ندارد .

به public parastoo(){} اصطلاحا Developer Constructor گفته میشود، این متد نه استاتیک است نه void و هر بار که آبجکت ایجاد کنید صدا زده می شود ، به مثال زیر و نتیجه آن دقت کنید .

کلاسی به نام درخت ساختم و داخل آن از کلاس پرستو 3 آبجکت ایجاد کردم ، اگر این کد را اجرا کنید ، رشته های زیر برای شما چاپ می شود.

 

salam man JVM constructor hastam va faghat ye bar ejra misham

salam man Developer constructor hastam va har bar ejra misham

salam man Developer constructor hastam va har bar ejra misham

salam man Developer constructor hastam va har bar ejra misham

 

همان طور که مشاهده می کنید ، رشته ای که در کانستراکتور استاتیک بود فقط یک بار چاپ شد ، اما ما 3 آبجک ساختیم ، و رشته ای که در دولوپر کانستراکتور بود ، 3 بار چاپ شد .

دقت کنید که برای مشاهده این رشته ها ما کدی را که در کلاس main بود را اجرا کردیم .

یکی از موارد استفاده از کانستراکتورها زمانی است که می خواهید همان موقعی که آبجکتی ساخته می شود مقادیری در سطح کلاس وارد شود ، بهترین راهکار کانستراکتور است.

ارث بری در جاوا

می خواهم مثال ساده ای ، برای ارث بری به شما نشان بدهم ، با خانواده آقای دارکوب وب آشناشوید.

اولین فرد هومن است ، کار او تیر اندازیست ،

هومن پسری به نام محمد دارد ، شغل محمد ساختمان سازی با چوب است ،

محمد پسری به نام مرتضی دارد ، شغل مرتضی مدیریت است ،

مرتضی پسری به نام ژیگو دارد ، کار ژیگو ساختمان سازی با آهن است.

 

حالا پکیجی به نام ersbari ایجاد می کنیم داخل آن کلاس ها را به این شکل می نویسیم :

تصویر پکیج :

 

picTwoETwo

کلاس‌ها در جاوا

در کلاس Main از روی ژیگویک آبجکتی می سازیم به کد زیر دقت کنید:

همان طور که مشاهده می کنید ، ژیگو می تواند هم تیراندازی کند هم ساختمان سازی هم مدیریت ، چرا ؟ چون این مهارت ها را از پدرش به ارث برده و پدر او ار پدرش …

اما موضوع قابل توجه این است که اگر کد را اجرا کنید ، متد ساختنی اجرا می شود که در کلاس ژیگو است و این کد می گوید با آهن ساختم هوهو ، و متدی که در پدربزگ ژیگو یعنی محمد وجود دارد چاپ نمی شود ، زیرا ژن فرزند بر ژن پدر قالب است و متد ژیگو اینجا صدا زده می شود ، اگر بخواهیم به متد محمد هم دست رسی داشته باشم می توانیم از کلمه کلیدی super به این شکل استفاده کنیم .

همان طور که می بیند به این شکل از super استفاده کردیم ، در این حال متد پدر صدا زده می شود .

 

کلاس انتزاعی یا Abstract Class

خوب حتما خانواده هایی را دیده اید که پدر عقده پزشکی مهندیسی یا وکالت داشته و فرزند خود را مجبور می کند در آن رشته تحصیل کنید ، در برنامه نویسی کلاس هایی داریم که کلاس فرزند را مجبور می کنند متدی را پیاده سازی کند.

به این کلاس ها کلاس عقده ای یا Abstract گویند ، فرض کنید مرتضی عقده پزشکی داشته باشد ، در این صورت ژیگو باید پزشکی بخواند، به کد های زیر دقت کنید :

خوب این کلاس مرتضا است ، این یک کلاس عقده ای می باشد و عقده آن پزشکی است ، می بینید که از کلمه کلیدی abstract استفاده کردیم هم در ساخت کلاس هم در ساخت متد ، این متد را در کلاس مرتضی پیاده سازی نمی کنیم ، و پیاده سازی آن توسط کلاس ژیگو انجام میشود.

در این کلاس شما باید متد pezeshki را پیاده سازی کنید ، در غیر این صورت برنامه شما دچار خطا خواهد شد . همان طور که در کد می بینید @override در کد نوشته شده ، به کاری که ما کردیم ، override کردن متد می گویند و این علامت @Override انوتیشن override است .

پیشنهاد می‌کنم این مقالات هم بخوانید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp
Share on facebook