در این مقاله از سایت دانشیار آی تی قصد داریم شما را با مقدمات و اصطلاحات مهم جاوا آشنا کنیم تا در فرایند یادگیری و آموزش جاوا سرعت بیشتری داشته باشید. هر چند زبان جاوا ممکن است کمی پیچیده به نظر بیاید اما سعی بر این شده است که به ساده ترین صورت ممکن این نوع زبان برنامه نویسی پرطرفدار را از مقدماتی تا پیشرفته به همراه اصطلاحات مهم و کاربردی آن، آموزش دهیم، با ما همراه باشید.
اگر روزی بخواهید برنامهی اندروید (Android) خود را برای سرگرمی یا کار بسازید، احتمالاً باید کمی کد بنویسید. روشهای مختلفی برای نوشتن اپلیکیشنهای اندرویدی وجود دارد، اما زبان رسمی اندروید، جاواست. پس این آموزش مقدماتی جاوا (Java) مناسب شماست.
آموزش مقدماتی جاوا برای مبتدیان
جاوا فقط زبان برنامهنویسی رسمی گوگل برای توسعهی اپلیکیشنهای اندرویدی نیست (همچنین کاتلین)، گوگل از جاوا در قسمتهای داخلی اندروید نیز استفاده کرده است. یادگیری جاوا برای نوشتن اپلیکیشن اندرویدی دو بخش جدا دارد. یک بخش خود زبان برنامهنویسی جاوا است و بخش دیگر فهمیدن قسمتهای مختلف یک اپلیکیشن مانند واسط کاربری، سیستمعامل اندروید و SDK اندروید است. در این آموزش دربارهی قسمت اول، یعنی زبان برنامهنویسی جاوا یاد خواهیم گرفت.
زبان جاوا در اواسط دههی ۱۹۹۰ میلادی از سوی شرکت سان (Sun Microsystems) معرفی شد. این زبان به گونهای طراحی شده بود که برنامهنویسان آشنا به C و C++ به سادگی بتوانند آن را یاد بگیرند. در سالهای ۲۰۰۶ و ۲۰۰۷ شرکت سان، جاوا را به عنوان یک نرمافزار رایگان و متنباز تحت پروانه عمومی همگانی گنو (GNU General Public License) منتشر کرد. اوراکل (Oracle) در سال ۲۰۰۹/۲۰۱۰ شرکت سان را خریداری کرد و در حال حاضر مالک جاوا است.
برای شروع کار با جاوا و نوشتن کد، باید کدهای خود را کامپایل و به یک فایل قابل اجرا برای جاوا تبدیل کنید. اغلب برای انجام اینکار (Java Development Kit (JDK را نصب میکنند. شیوهی نصب آن را میتوانید در سایت اوراکل پیدا کنید.
دورههای مرتبط در دانشیار آی تی
به هر حال، اگر دربارهی نصب JDK مطمئن نیستید و میخواهید سریعاً وارد مسیر برنامهنویسی جاوا شوید، compilejava.net را امتحان کنید. این سایت یک محیط برنامهنویسی آنلاین ساده است که میتوانید در آن برنامههای ساده جاوا بنویسید و بدون دردسرهای نصب JDK آنها را اجرا کنید. لازم به ذکر است که نسخهی آخر OpenJDK در Android Studio وجود دارد و دیگر حتی لازم نیست برای نوشتن اپلیکیشنهای اندرویدی، JDK نصب کنید.
compilejava.net از سه بخش مجزا تشکیل شده است. در قسمت بالایی کد جاوا خود را مینویسید و در پایین آن خروجی کامپایل (چپ) و اجرای (راست) کدتان را میبینید. از اینجا به بعد فرض میکنیم که از compilejava.net استفاده میکنید. اما اگر JDK را نصب کردید، باید به جای ویرایشگر متنِ این IDE آنلاین، از یک ویرایشگر متن نصبشده در سیستم خودتان استفاده کنید.
کد زیر را کپی و در ویرایشگر خود پیست کنید:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } }
اگر از JDK استفاده میکنید، این فایل را با نام HelloWorld.java ذخیره کنید. در جاوا، نام کلاس و سورسکد باید یکی باشند. خط اول کد کلاسی را با نام HelloWorld تعریف میکند، پس باید سورسکد را با نام HelloWorld ذخیره کنیم. البته compilejava.net هوشمندانه عمل میکند و به صورت خودکار سورسکد را به صورت HelloWorld.java ذخیره میکند!
حالا دکمهی “COMPILE & EXECUTE” را، که در پایین صفحه قرار دارد، بزنید. متن “Hello, World” را میبینید که در پنجرهی سمت راستی پایین صفحه نمایش داده میشود. تبریک!
کد جاوا، خروجی کامپایلر، خروجی برنامه
چه اتفاقی افتاد؟
خب بیایید چند لحظهای به بررسی این برنامه بپردازیم. اول سورسکد. این فایل سه کار انجام میدهد. ۱) کلاسی به نام HelloWorld تعریف میکند. ۲) یک متد (تابع) به نام main() را در کلاس HelloWorld تعریف میکند. ۳) متد main() برای نمایش متن،System.out.println را صدا میزند.
یک کلاس (Class) در جاوا، و تمام زبانهای برنامهنویسی شئگرا، یک شئ (Object) را تعریف میکند. یک شئ، یک آیتم مستقل است که با سایر اشیاء ارتباط دارد. در اندروید این شئ میتواند شامل المنتهایی در UI، اتصالات اینترنت، اطلاعات مکانی و …. باشد.
هر برنامهی جاوا باید حداقل در یکی از کلاسهایش، متد main را تعریف کند. این متد نقطهی شروع برنامه است. در مثال سادهی بالا متد main() تنها یک خط کد دارد که System.out.println را برای نمایش “Hello, World” صدا میزند. متدprintln() به کلاس PrintStream تعلق دارد که خود بخشی از کلاس System است. اطلاعات زیادی را میتوانید دربارهی این دو کلاس در سایت اوراکل پیدا کنید.
جاوا به معماری وابسته نیست، یعنی یک فایل .java برای یک پردازندهی خاص روی سیستمعاملی خاص (مثل ویندوز با پردازندهی Intel x86 یا اندروید با پردازندهی ARM Cortex-A) به صورت جدا کامپایل نمیشود. در عوض سورسکد جاوا به بایتکد (Java Bytecode) تبدیل میشود. حالا ماشین مجازی جاوا (Java Virtual Machine) وظیفه دارد این بایتکد را در یک پلتفرم خاص اجرا کند.
همراهان گرامی سایت دانشیار آی تی در این مقاله تاریخچه و جایگاه زبان جاوا بررسی میشود پیشنهاد میکنیم مطالعه کنید:
آموزش مقدمات برنامهنویسی جاوا
معرفی اصطلاحات مهم جاوا
متغیرها (Variable)
هنگام برنامهنویسی لازم میشود که دادههایی را به صورت کوتاه مدت ذخیره کنید. مثلاً در یک بازی اندروید میخواهید امتیاز کنونی بازیکن را ذخیره کنید. این بیتهای داده در متغیرها ذخیره میشوند؛ جعبهای که میتوانید در آن داده قرار دهید و بعداً همان داده را از آن بردارید. از آنجایی که دادهها انواع مختلفی دارند، باید برای هر متغیر یک نوع (Type) تعریف کنیم تا جاوا بفهمد که درون آن متغیر چه نوع دادهای ذخیره شده است. int (اعداد صحیح)، double (اعداد اعشاری) و Boolean (مقادیر صحیح/غلط) از برخی از مهمترین انواع دادهای در جاوا هستند.
در زیر یک برنامه را میبینید که به یک متغیر مقدار میدهد، آن مقدار را در کنسول نمایش میدهد، مقدار متغیر را عوض میکند و دوباره آن را نمایش میدهد:
public class VariableTest { public static void main(String[] args) { int i = 1; System.out.println("The value of i is: " + i); i = i + 24; System.out.println("The value of i is now: " + i); } }
COMPILE & EXECUTE را بزنید. خروجی برنامه به صورت زیر خواهد بود:
The value of i is: 1 The value of i is now: 25
همانطور که در کد میبینید، این برنامه متغیری به نام i را تعریف میکند و به آن مقدار اولیهی ۱ را میدهد. مقدار متغیر “i” در کنسول نمایش داده میشود. سپس مقدار جدیدi + 24 یا ۱ + ۲۴ به “i” داده میشود که همان عدد ۲۵ است. سپس مقدار جدید نمایش داده میشود.
حالا برنامه را به گونهای تغییر دهید که به جای int از double استفاده کند. به “i” مقداری مثل ۱٫۳ بدهید و سپس آن را با یک مقدار اعشاری دیگر مثل ۲۴٫۹ جمع کنید.
اگر به متد println() نگاه کنید، میبینید که یک مقدار صحیح با یک رشته (String) جمع شده است: “The value of i is: ” + i. در اینجا جاوا میداند که قسمت اول یک رشته است، پس مقدار “i” را به رشته تبدیل میکند که “۱” به دست میآید و سپس آن را به رشتهی قبلی وصل میکند. نتیجهی روبهرو حاصل میشود:“The value of i is: 1”.
دورههای مرتبط در دانشیار آی تی
رشتهها (String)
رشتهها یکی از مهمترین اجزای هر زبان برنامهنویسی هستند. رشته برخلاف int یا boolean یک نوع نیست، بلکه یک کلاس است. با ایجاد یک متغیر رشته، درواقع یک شئ String میسازید. یک رشته، به عنوان یک شئ، Propertyهایی مثل مقدار (خود رشته) و طول دارد. اعمال زیادی را میتوان روی یک رشته انجام داد، مثلاً میتوان آن را برش داد، یا دو رشته را به هم وصل یا با هم مقایسه و در یک رشته جستوجو کرد.
در کد زیر اعمال سادهای را روی یک رشته انجام می دهیم:
public class PlayingWithStrings { public static void main(String[] args) { String hello = "Hello, World"; System.out.println(hello); // Add an ! to the end hello = hello + "!"; System.out.println(hello); // Extract the word "Hello" from the String // i.e. starting at the beginning (0) for 5 characters String justHello = hello.substring(0,5); System.out.println(justHello); // Add some trailing spaces and then remove them with trim() hello = hello + " "; hello = hello.trim(); // Now output the string all in UPPERCASE and lowercase System.out.println(hello.toUpperCase()); System.out.println(hello.toLowerCase()); } }
مثل قبل این کد را کامپایل و اجرا کنید.
بخش اول برنامه یک شئ String با نام “hello” و مقدار “Hello, World” میسازد. شاید این کار شبیه تعریف و مقداردهی یک عدد صحیح یا یک نوع دیگر باشد، اما رشتهها کمی پیچیدهتر عمل میکنند. عملگرهای = و + اعمال سادهای را انجام میدهند. پس کد String hello = “Hello, World”; در واقع چیزی شبیه String hello = new String(“Hello, World”); است. به عبارت دیگر، یک شئ جدید از نوع String ساخته میشود و مقدار “Hello, World” به سازندهاش منتقل میشود. دراینباره بیشتر در بخش “اشیاء” توضیح خواهیم داد.
قسمت بعدی کد چگونگی اتصال رشتهها را به هم نشان میدهد. در اینجا یک “!” به انتهای رشته اضافه شده است. چون رشته نوعی شئ است، پس میتواند متد داشته باشد. متد String.substring() بخشی از رشته را برمیگرداند، که در این کد ۵ کاراکتر اول است. String.trim() متدی است که فاصلههای ابتدا و انتهای رشته را حذف میکند. بخش آخر برنامه نیز متدهای String.toUpperCase() و String.toLowerCase() را نشان میدهد.
خروجی برنامه به شکل زیر خواهد بود:
Hello, World Hello, World! Hello HELLO, WORLD! hello, world!
حلقهها (Loop)
تکرار یک وظیفه، یکی از کارهایی است که کامپیوتر به خوبی انجام میدهد. برای تکرار یک وطیفه در یک زبان برنامهنویسی از ساختاری به نام حلقه استفاده میکنید.
جاوا سه نوع حلقهی ساده دارد: حلقهی for، While و do while. هر سه حلقه یک ایدهی اصلی را دنبال میکنند: کاری را آنقدر تکرار کن تا به شرط مشخصی برسی.
در کد زیر میبینید که چطور اعداد ۱-۱۰، ۱۰-۲۰ و ۲۰-۳۰ را با استفاده از سه حلقهی مختلف نمایش دهید:
public class Loops { public static void main(String[] args) { // For loop for(int i=1; iفایلی به نامLoops.java حاوی کد بالا ایجاد و سپس آن را کامپایل و اجرا کنید.
حلقهی for سه بخش دارد. بخش مقداردهی اولیه (int i=1) که تنها یک بار اجرا میشود. در کد بالا در این بخش عدد صحیح i با مقدار اولیهی ۱ تعریف میشود. بخش دوم، عبارت تست است (i). این بخش در هر بار اجرای حلقه بررسی میشود. اگر نتیجهی بخش تست True باشد، حلقه مجدداً اجرا میشود. در این مثال کد تست بررسی میکند که آیا متغیر i هنوز کمتر یا مساوی ۱۰ هست یا نه. پس از هربار اجرا، بخش سوم اجرا میشود. در این مثال بخش Iterator، یکی به مقدار i اضافه میکند. دقت کنید که دو عبارت i = i + 1و i++ یکی هستند.
حلقهی while مثل حلقهی for عمل میکند، فقط بخش مقداردهی اولیه و Iterator را ندارد. قسمت مقدار دهی باید به صورت جداگانه صورت گیرد، که در اینجا j = 11; است. بخش Iterator نیز باید به صورت جدا کد شود. در این مثال کد j++ است که میتوانید آن را در داخل حلقه و بعد از println() پیدا کنید.
حلقهی do… whileبسیار شبیه حلقهی while است، اما یک تفاوت بزرگ دارد. بخش تست در انتهای حلقه است نه ابتدای آن. یعنی حلقهی do… while حداقل یک بار اجرا خواهد شد، اما حلقهی while در صورت درست نبود شرط در ابتدای حلقه، ممکن است حتی یکبار هم اجرا نشود.
مانند حلقهی while باید مقدار دهی اولیه در خارج از حلقه صورت گیرد که در اینجا int x = 21; است. و بخش Iterator نیز در داخل حلقه (x++) صورت میگیرد. با بیشتر شدن مقدار x از ۳۰، حلقه متوقف میشود.
پیشنهاد دانشیار آی تی به شما
آموزش صفر تا صد دیزاین پترن (Design Pattern) در جاوا
خواندن مطلباشیاء (Object)
همانطور که قبلاً هم در این آموزش جاوا مطرح کردیم، جاوا یک زبان برنامهنویسی شئگراست ((Object Oriented (OO) و برای یادگیری برنامهنویسی جاوا و اندروید باید مفهوم OO را بفهمیم.
سادهترین شئ، مجموعهای از متدهاست که روی یک مجموعه داده کار میکنند. دادهها و متدها به شئ تعلق دارند و برای آن کار میکنند.
در کد زیر، یک برنامهی ساده را میبینید که یک شئ به نام counterمیسازد:
public class Counter { int count; public Counter() { count = 0; } public void Increment() { count++; } public int GetCount() { return count; } public static void main(String[] args) { Counter myCounter = new Counter(); System.out.println("mycounter is " + myCounter.GetCount()); myCounter.Increment(); System.out.println("mycounter is " + myCounter.GetCount()); } }شئ Counter یک قطعه داده (متغیر صحیح count ) و سه متد دارد (به جز متد main): Counter()، Increment()و GetCount(). میبینید که دو متد آخر بسیار ساده هستند. اولین متد یکی به مقدار متغیر داخلیcount اضافه میکند و دومی مقدارcount را برمیگرداند.
اگر دقت کنید میبینید که تا اینجا تمام متدها با عبارت public voidشروع میشدند، اما متد GetCount()با عبارت public intآغاز میشود. کمی بعد دربارهی عبارت public توضیح خواهیم داد، اما فرق void و int این است: void میگوید که این متد چیزی را برنمیگرداند و خروجی ندارد. اما int میگوید که این متد یک عدد و درواقع یک عدد صحیح را برمیگرداند. میتوانید متدهایی بنویسید که هر نوع دادهای را برگردانند، حتی شئ.
دقت کنید که نام متد اول مثل نام کلاس است (Counter()) و مقدار خروجی ندارد (حتی void). این نوعی متد خاص سازنده (Constructor) نام دارد. سازنده تنها یک بار و در زمان ساخت شئ فراخوانی میشود. از این متد برای ساخت شئ با مقادیر پیشفرض یا هرگونه عمل مقداردهی اولیهی دیگری استفاده میشود. در این کد سازنده تنها مقدار متغیر count را صفر قرار میدهد.
دورههای مرتبط در دانشیار آی تی
ارثبری (Inheritance)
یکی از مزایای کلاسها این است که میتوانید یک کلاس کلی بسازید و سپس کلاسهای خاص دیگری ایجاد کنید که از کلاس اصلی اول بهوجود آمدهاند. مثلاً میتوانید یک کلاس به نام Animal ایجاد کنید و سپس با استفاده از این کلاس یک کلاس دیگر برای یک حیوان خاص مثلاً یک گوزن ایجاد کنید.
در زیر یک مثال میبینید که بعداً آن را توضیح خواهیم داد. باید برای این مثال دو فایلِ Animal.javaو Elk.java را ایجاد کنید. فایل Animal.java را در زیر میبینید:
public class Animal { int NumberOfLegs; public Animal(int n) { NumberOfLegs = n; } public int GetNumLegs() { return NumberOfLegs; } }بهتر است کلاس Animal را در یک فایل Animal.java در بالا و کلاس Elk را در یک فایلِ Elk.java در زیر آن قرار دهید. اگر هم از compilejava.net استفاده میکنید، هر دو کد را در پنجرهی ویرایشگر بنویسید و این فایلها هنگام کامپایل و اجرا به صورت خودکار به صورت مناسب ذخیره میشوند.
public class Elk extends Animal { int lengthOfAntlers; public Elk(int l) { super(4); lengthOfAntlers = l; } public int GetAntlerLength() { return lengthOfAntlers; } public static void main(String[] args) { Elk myElk = new Elk(30); System.out.println("Antler: " + myElk.GetAntlerLength()); System.out.println("Legs: " + myElk.GetNumLegs()); } }کلاس Animal با نام سوپرکلاس (Super Class) و کلاس Elk با نام سابکلاس (Sub Class) شناخته میشوند. دلیل این نامگذاری این است که به صورت سلسلهمراتبی، کلاس Elk زیر کلاس Animal قرار میگیرد. وقتی یک کلاس، کلاس دیگری را Extend میکند (یعنی یک سابکلاس میسازید)، تمام دادهها و متدهای سوپرکلاس را به ارث میبرد. به همین دلیل برنامه میتواند متدmyElk.GetNumLegs() را فراخوانی کند، با اینکه این متد بخشی از کلاس Animal است. کلاس Elk دو متغیر (NumberOfLegs و lengthOfAntlers) و دو متد (GetAntlerLength و GetNumLegs) دارد. اگر کلاس دیگری مثلاً Sheep بسازیم، این کلاس متغیر NumberOfLegs و متد GetNumLegs را به ارث خواهد برد.
هنگام طراحی اشیاء متوجه میشوید که دوست دارید برخی از متدها در دسترس سایر نقاط برنامه قرار گیرند و قابل فراخوانی باشند. اما برخی متدها شخصی باقی بمانند و تنها خود شئ به آنها دسترسی داشته باشد. در این شرایط از public استفاده میکنیم. در تمام کدها از public استفاده کردیم که نشان میدهد میتوانیم از سایر نقاط برنامه به متد دسترسی داشته باشیم. همچنین میتوانیم متدها را private یا protected تعریف کنیم که دسترسی به چنین متدهایی را محدود میکند. چنین قوانین دسترسی را میتوانیم برای متغیرها هم داشته باشیم.
خوب است دربارهی شیوهی عملکرد سازنده هم کمی صحبت کنیم. سازندهی Elk()، به متغیر lengthOfAntlers مقدار اولیهی ۳۰ را میدهد که در زمان ساخته شدن شئ به آن منتقل میشود. اما پیش از آن، سازندهی سوپر کلاس (Animal()) را با استفاده از عبارت super فراخوانی میکند.
آموزش مقدماتی جاوا – جمعبندی
همراهان گرامی دانشیار آی تی در این مقاله اصلاحات جاوا را به تفکیک، همراه با کدهای مرتبط آن برای شما بیان کردیم، شما می توانید با مطالعه این مقاله و مقاله های دیگر مرتبط با برنامه نویسی جاوا در سایت دانشیار آی تی، شانس خود را برای ورود به بازار کار در زمینه جاوا افزایش دهید. هرگونه نظری در این مورد دارید با ما در بخش دیدگاه در میان بگذارید.
از اینکه برای مطالعهی این آموزش وقت گذاشتید، متشکریم.
دورههای مرتبط در دانشیار آی تی