آموزش جاوا - انواع متغیرها
هر متغیر در جاوا نوع خاص خود را دارد که اندازه و چیدمان حافظهی متغیر را تعیین میکند؛ محدودهی مقادیری که در آن حافظه ذخیره میشود؛ و مجموعهی عملیاتی که میتوان به متغیر اعمال کرد.
شما باید همهی متغیرها را قبل از استفاده از آنها اعلام کنید. در ادامه، شکل پایهی اعلام یک متغیر را میبینید:
data type variable [ = value][, variable [ = value] ...] ;
در اینجا نوع داده یکی از انواع دادههای جاوا (Java's datatypes) است و متغیر نام متغیر است. برای اعلام بیش از یک متغیر از نوع مشخص شده، میتوانید از لیستی که با کاما جدا شده استفاده کنید.
در ادامه، مثالهای معتبری از اعلام و مقداردهی متغیر در جاوا (Java) آمده است:
مثال
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'
در این فصل، انواع متغیرهای مختلف موجود در زبان جاوا (Java) توضیح داده میشود. در جاوا سه نوع متغیر وجود دارد:
- متغیرهای محلی (Local variables)
- متغیرهای نمونه (Instance variables)
- متغیرهای کلاس/استاتیک (Class/Static variables)
متغیرهای محلی (Local Variables)
-
متغیرهای محلی درون متدها (methods)، سازندهها (constructors) یا بلوکها (blocks) اعلام میشوند.
-
متغیرهای محلی هنگام ورود به متد، سازنده یا بلوک ایجاد میشوند و پس از خروج از متد، سازنده یا بلوک، متغیر مورد نظر از بین میرود.
-
محدودیتهای دسترسی نمیتوانند برای متغیرهای محلی استفاده شوند.
-
متغیرهای محلی فقط در محدودهی متد، سازنده یا بلوک اعلام شده قابل مشاهده هستند.
-
متغیرهای محلی در سطح استک پیادهسازی میشوند.
-
برای متغیرهای محلی مقدار پیشفرضی تعیین نشده است، بنابراین باید قبل از استفاده اولیه، متغیرهای محلی اعلام و مقدار اولیهای به آنها اختصاص داده شود.
مثال
در اینجا، سن (age) یک متغیر محلی است. این درون متد pupAge() تعریف شده است و دامنهی این متغیر محدود به این متد است.
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();
}
}
این دستور نتیجه زیر را تولید خواهد کرد:
خروجی
Puppy age is: 7
مثال
در مثال زیر از سن (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)
-
متغیرهای نمونه درون یک کلاس اعلام میشوند، اما خارج از متدها (methods)، سازندهها (constructors) و بلوکها (blocks) قرار دارند.
-
زمانی که یک فضا برای یک شیء در حافظه (heap) اختصاص داده میشود، برای هر مقدار متغیر نمونه یک اسلات ایجاد میشود.
-
متغیرهای نمونه هنگام ایجاد یک شیء با استفاده از کلمه کلیدی 'new' ایجاد میشوند و هنگامی که شیء منتقل میشود، نیز از بین میروند.
-
متغیرهای نمونه مقادیری را نگه میدارند که باید توسط بیش از یک متد، سازنده یا بلوک مورد ارجاع قرار گیرند، یا بخشهای اساسی از وضعیت یک شیء که باید در طول کلاس حضور داشته باشند.
-
متغیرهای نمونه میتوانند در سطح کلاس قبل یا بعد از استفاده اعلام شوند.
-
محدودکنندههای دسترسی میتوانند برای متغیرهای نمونه تعیین شوند.
-
متغیرهای نمونه برای همه متدها، سازندهها و بلوکها درون کلاس قابل مشاهده هستند. به طور معمول، توصیه میشود این متغیرها را خصوصی (access level) کنید. با این حال، با استفاده از محدودکنندههای دسترسی میتوان به این متغیرها دید پایینتر برای زیرکلاسها داد.
-
متغیرهای نمونه مقدارهای پیشفرضی دارند. برای اعداد، مقدار پیشفرض 0 است، برای بولینها، مقدار پیشفرض false است و برای ارجاعهای شیء، مقدار پیشفرض null است. مقادیر میتوانند در حین اعلام یا درون سازنده اختصاص داده شوند.
-
متغیرهای نمونه میتوانند به صورت مستقیم با فراخوانی نام متغیر درون کلاس دسترسی داشته باشند. با این حال، درون متدهای استاتیک (هنگامی که به متغیرهای نمونه دسترسی داده شود)، باید از نام کامل متغیر استفاده کنید. نامشیء.ناممتغیر.
مثال
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
متغیرهای کلاس/استاتیک
-
متغیرهای کلاس که به عنوان متغیرهای استاتیک نیز شناخته میشوند، با استفاده از کلیدواژه static درون یک کلاس اعلام میشوند، اما درون یک متد، سازنده یا بلوک قرار نمیگیرند.
-
تنها یک نسخه از هر متغیر کلاس در هر کلاس وجود خواهد داشت، بدون توجه به تعداد شیءهایی که از آن ایجاد میشوند.
-
متغیرهای استاتیک به ندرت به جز اعلام به عنوان ثابت استفاده میشوند. ثابتها متغیرهایی هستند که به صورت public/private، final و static اعلام میشوند. متغیرهای ثابت هرگز از مقدار اولیهشان تغییر نمیکنند.
-
متغیرهای استاتیک در حافظه استاتیک ذخیره میشوند. استفاده از متغیرهای استاتیک به جز اعلام final و استفاده به عنوان ثابتهای عمومی یا خصوصی، کمی رایج است.
-
متغیرهای استاتیک هنگامی که برنامه راهاندازی میشود ایجاد میشوند و هنگامی که برنامه متوقف میشود از بین میروند.
-
دیدپذیری شبیه به متغیرهای نمونه است. با این حال، بیشتر متغیرهای استاتیک به عنوان public اعلام میشوند زیرا باید برای کاربران کلاس در دسترس باشند.
-
مقادیر پیشفرض مشابه متغیرهای نمونه هستند. برای اعداد، مقدار پیشفرض 0 است؛ برای بولینها، مقدار پیشفرض false است و برای ارجاعهای شیء، مقدار پیشفرض null است. مقادیر میتوانند در هنگام اعلام یا درون سازنده اختصاص داده شوند. علاوه بر این، مقادیر میتوانند در بلوکهای مقدماتی استاتیک اختصاص داده شوند.
-
متغیرهای استاتیک میتوانند با صدا زدن نام کلاس (نام_کلاس.نام_متغیر) دسترسی داشته باشند.
-
هنگامی که متغیرهای کلاس را به عنوان public static 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);
}
}
خروجی
Development average salary:1000
توجه − اگر متغیرها از یک کلاس بیرونی صدا زده شوند، ثابت باید به عنوان Employee.DEPARTMENT صدا زده شود