یک متغیر در جاوا چیست؟ یک متغیر، حافظهای نامگذاریشده در اختیار ما قرار میدهد که برنامههای ما میتوانند آن را دستکاری کنند. هر متغیر در جاوا دارای یک نوع مشخص است که اندازه و ساختار حافظه متغیر، دامنه مقادیری که میتوان در آن حافظه ذخیره کرد، و مجموعه عملیاتی که میتوان روی متغیر انجام داد را تعیین میکند.
اعلان و مقداردهی اولیه متغیر
شما باید تمام متغیرها را قبل از استفاده اعلام (Declare) کنید. متغیرهای جاوا با مشخصکردن نوع داده (Data Type) و سپس نام متغیر اعلام میشوند. برای اختصاص مقدار، از عملگر انتساب (=) استفاده میشود که بعد از آن مقدار قرار میگیرد. هر عبارت اعلان یا مقداردهی اولیه باید با یک نقطهویرگول (;) به پایان برسد.
نحو (Syntax)
در ادامه، شکل پایهی یک اعلان متغیر آورده شده است:
data type variable [ = value][, variable [ = value] ...] ;
در اینجا، نوع داده یکی از نوعهای دادهای جاوا است و variable نام متغیر میباشد. برای اعلام بیش از یک متغیر از نوع مشخصشده، میتوانید از لیستی با جداکننده کاما (,) استفاده کنید.
نمونههایی از اعلان و مقداردهی اولیه معتبر متغیرها
در ادامه، نمونههایی معتبر از اعلان و مقداردهی اولیه متغیرها در جاوا آورده شدهاند:
int a, b, c; // Declares three ints, a, b, and c. int a = 10, b = 10; // Example of initialization byte B = 22; // initializes a byte type variable B. double pi = 3.14159; // declares and assigns a value of PI. char a = 'a'; // the char variable a iis initialized with value 'a'
انواع متغیرها در جاوا
سه نوع متغیر در جاوا وجود دارد:
- متغیرهای محلی (Local variables)
- متغیرهای نمونه (Instance variables)
- متغیرهای کلاس/ایستا (Class/Static variables)
1. متغیرهای محلی در جاوا
- متغیرهای محلی در درون متدها، سازندهها (Constructors) یا بلوکها (Blocks) اعلام میشوند.
- متغیرهای محلی زمانی ایجاد میشوند که متد، سازنده یا بلوک وارد شود و پس از خروج از آنها، متغیر از بین میرود.
- نمیتوان از تعدیلکنندههای دسترسی (Access Modifiers) برای متغیرهای محلی استفاده کرد.
- متغیرهای محلی فقط درون متد، سازنده یا بلوکی که در آن اعلام شدهاند قابل مشاهده هستند.
- متغیرهای محلی در سطح پشته (Stack) پیادهسازی میشوند.
- برای متغیرهای محلی، مقدار پیشفرض وجود ندارد، بنابراین این متغیرها باید قبل از اولین استفاده، اعلام و مقداردهی اولیه شوند.
مثال 1: حوزهی محلی متغیر با مقداردهی اولیه
در اینجا، age
یک متغیر محلی است. این متغیر در داخل متد pupAge()
تعریف شده و حوزه (Scope) آن فقط به همین متد محدود است.
public class Test { public void pupAge() { int age = 0; age = age + 7; System.out.println("Puppy age is : " + age); } public static void main(String args[]) { Test test = new Test(); test.pupAge(); } }
خروجی
سن توله سگ: ۷
مثال ۲: حوزهی محلی متغیر بدون مقداردهی اولیه
در مثال زیر، از متغیر age
بدون مقداردهی اولیه استفاده شده است، بنابراین در زمان کامپایل با خطا مواجه خواهد شد.
public class Test { public void pupAge() { int age; age = age + 7; System.out.println("Puppy age is : " + age); } public static void main(String args[]) { Test test = new Test(); test.pupAge(); } }
خروجی
Test.java:4:variable number might not have been initialized
age = age + 7;
^
1 error
۲. متغیرهای نمونه (Instance Variables) در جاوا
متغیرهای نمونه درون یک کلاس اعلام میشوند، اما خارج از هر متد، سازنده یا بلوک هستند.
زمانی که فضایی برای یک شی (Object) در حافظه هیپ (Heap) تخصیص داده میشود، یک جایگاه برای مقدار هر متغیر نمونه ایجاد میگردد.
متغیرهای نمونه زمانی ایجاد میشوند که یک شی با استفاده از کلیدواژه new
ساخته شود و زمانی که آن شی از بین برود، این متغیرها نیز از بین میروند.
متغیرهای نمونه مقادیری را نگه میدارند که باید توسط بیش از یک متد، سازنده یا بلوک مورد ارجاع قرار گیرند، یا بخشهای ضروری از وضعیت (State) یک شی هستند که باید در سراسر کلاس وجود داشته باشند.
متغیرهای نمونه را میتوان در سطح کلاس، قبل یا بعد از استفاده، اعلام کرد.
میتوان از تعدیلکنندههای دسترسی (Access Modifiers) برای متغیرهای نمونه استفاده کرد.
متغیرهای نمونه برای همه متدها، سازندهها و بلوکهای کلاس قابل مشاهده هستند. بهطور معمول، توصیه میشود این متغیرها را خصوصی (private) تعریف کنیم. با این حال، میتوان با استفاده از تعدیلکنندههای دسترسی، آنها را برای زیرکلاسها نیز قابل مشاهده کرد.
متغیرهای نمونه دارای مقدار پیشفرض هستند. برای اعداد، مقدار پیشفرض 0 است، برای نوع Boolean مقدار پیشفرض false، و برای ارجاعات شی (Object references) مقدار پیشفرض null است. مقادیر میتوانند در زمان اعلام یا درون سازنده مقداردهی شوند.
متغیرهای نمونه را میتوان بهصورت مستقیم با فراخوانی نام متغیر در درون کلاس استفاده کرد. با این حال، درون متدهای ایستا (static) (در صورتی که متغیرهای نمونه در دسترس باشند)، باید از نام کاملشده استفاده شود. یعنی به صورت: ObjectReference.VariableName
مثال از متغیرهای نمونه در جاوا باز کردن کامپایلر
import java.io.*; public class Employee { // this instance variable is visible for any child class. public String name; // salary variable is visible in Employee class only. private double salary; // The name variable is assigned in the constructor. public Employee (String empName) { name = empName; } // The salary variable is assigned a value. public void setSalary(double empSal) { salary = empSal; } // This method prints the employee details. public void printEmp() { System.out.println("name : " + name ); System.out.println("salary :" + salary); } public static void main(String args[]) { Employee empOne = new Employee("Ransika"); empOne.setSalary(1000); empOne.printEmp(); } }
خروجی
name : Ransika
salary :1000.0
۳. متغیرهای کلاس/ایستا (Class/Static Variables) در جاوا
متغیرهای کلاس که بهعنوان متغیرهای ایستا (Static) نیز شناخته میشوند، با استفاده از کلیدواژه static
در یک کلاس اعلام میشوند، اما خارج از هر متد، سازنده یا بلوک قرار دارند.
از هر متغیر کلاس تنها یک نسخه در هر کلاس وجود دارد، صرفنظر از اینکه چند شی از آن کلاس ساخته شود.
متغیرهای ایستا بهندرت استفاده میشوند، مگر اینکه بهعنوان ثابت (Constant) اعلام شوند. ثابتها، متغیرهایی هستند که بهصورت public/private
، final
و static
تعریف میشوند. متغیرهای ثابت هرگز مقدار اولیه خود را تغییر نمیدهند.
متغیرهای ایستا در حافظهی ایستا (Static Memory) ذخیره میشوند. استفاده از متغیرهای ایستا بهجز زمانی که بهصورت ثابت (final
) تعریف شوند و بهصورت عمومی (public
) یا خصوصی (private
) مورد استفاده قرار گیرند، نادر است.
متغیرهای ایستا هنگام شروع برنامه ایجاد میشوند و هنگام توقف برنامه از بین میروند.
محدودهی دید (Visibility) آنها مشابه متغیرهای نمونه است. با این حال، بیشتر متغیرهای ایستا بهصورت public
اعلام میشوند، چون باید برای کاربران کلاس در دسترس باشند.
مقادیر پیشفرض متغیرهای ایستا همانند متغیرهای نمونه است: برای اعداد مقدار پیشفرض 0 است، برای Boolean مقدار پیشفرض false
و برای ارجاعات شی مقدار پیشفرض null
میباشد. مقادیر میتوانند در زمان اعلام یا درون سازنده مقداردهی شوند. همچنین میتوان مقادیر را در بلوکهای ویژهی مقداردهی ایستای static initializer blocks
نیز تعیین کرد.
برای دسترسی به متغیرهای ایستا، میتوان با استفاده از نام کلاس و نام متغیر آنها را فراخوانی کرد: ClassName.VariableName
زمانی که متغیرهای کلاس بهصورت public static final
اعلام میشوند، نام متغیرها (ثابتها) باید تماماً با حروف بزرگ (uppercase) نوشته شود. اگر متغیرهای ایستا public
و final
نباشند، الگوی نامگذاری آنها مشابه متغیرهای نمونه و محلی خواهد بود.
مثال از متغیرهای کلاس/ایستا در جاوا
import java.io.*; public class Employee { // salary variable is a private static variable private static double salary; // DEPARTMENT is a constant public static final String DEPARTMENT = "Development "; public static void main(String args[]) { salary = 1000; System.out.println(DEPARTMENT + "average salary:" + salary); } }
خروجی
حقوق متوسط بخش توسعه: 1000
نکته − اگر متغیرها از یک کلاس خارجی فراخوانی شوند، ثابت (Constant) باید بهصورت Employee.DEPARTMENT
فراخوانی شود.
مرحله بعد چیست؟
شما در این فصل از تعدیلکنندههای دسترسی (مانند public
و private
) استفاده کردهاید. فصل بعد، تعدیلکنندههای دسترسی و غیر دسترسی (Access Modifiers و Non-Access Modifiers) را بهصورت دقیق توضیح خواهد داد.