یک متغیر، به ما این امکان را می دهد تا با استفاده از ذخیره توسط نام ها، برنامه های ما بتوانند آنها (داده های ذخیره شده در متغیرها) را دستکاری کنند. 

قبل از اینکه شما بتوانید از متغیرها استفاده کنید، باید آنها را تعریف کنید. ابتدایی ترین روش برای تعریف متغیر ها، در زیر نشان داده شده است:

کد

data type variable [= value][, variable [= value]...];

 همان طور که در بالا مشاهده می کنید، باید به جای عبارت data type یک نوع داده را مشخص کنید و به جای variable یک نام برای متغیر قرار دهید. برای تعریف کردن بیش از یک متغیر از یک نوع خاص، می توانید با استفاده از کاما، آنها را از یکدیگر جدا کنید. 

در زیر، چند مثال معتبر از تعریف متغیرها در جاوا و نحوه ی مقدار دهی به آنها، آورده شده است:

کد

int a, b, c; 
int a = 10, b = 10;
byte B = 22;
double pi = 3.14159;
char a = 'a';

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

  • متغیرهای محلی
  • متغیرهای نمونه
  • متغیرهای استاتیک(کلاس)

متغیرهای محلی

  • متغیرهای محلی، در داخل متدها و سازنده ها(constructor) و یا بلوک ها تعریف می شوند. 
  • هنگامی که به متد یا سازنده یا بلوک مورد نظر می رسیم، متغیر مورد نظر ایجاد شده و هنگامی که متد یا سازنده یا بلوک پایان یابد، از بین می رود. 
  • اصلاحگرهای دسترسی(access modifier) نمی توانند بعنوان متغیرهای محلی استفاده شوند. 
  • متغیرهای محلی، تنها در داخل متد یا سازنده یا بلوکی که تعریف شده اند می توانند مورد دسترس قرار بگیرند. 
  • متغیرهای محلی می توانند به طور داخلی مورد دسترسی قرار گرفته و استفاده شوند( منظور، در درون متد مورد نظر و به طور داخلی است). 
  • مقدار پیش فرضی برای متغیرهای محلی وجود ندارد، بنابراین متغیرهای محلی باید قبل از اینکه برای اولین بار مورد استفاده قرار بگیرند، تعریف شده و مقداری به آنها انتساب داده شود. 

مثال 1: 

همان طور که در زیر مشاهده می کنید، 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

مثال 2:

مثال زیر، از متغیر 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)

  • متغیرهای نمونه در درون یک کلاس تعریف می شوند اما بیرون از متدها و سازنده ها و بلوک ها قرار می گیرند. 
  • هنگامی که یک شیء، به وسیله ی کلمه ی کلیدی new ایجاد شود، متغیرهای نمونه نیز ایجاد می شوند و هنگامی که شیء مورد نظر از بین می رود، آن متغیرهای نمونه نیز از بین می روند. 
  • متغیرهای نمونه، دربردارنده ی مقادیری هستند که باید در بیش از یک متد یا سازنده یا بلوک مورد ارجاع قرار بگیرند.
  •  از اصلاحگرهای دسترسی(access modifiers) می توان بعنوان متغیرهای نمونه استفاده کرد. 
  • متغیرهای نمونه برای تمام متدها و سازنده ها و بلوک ها ی درون کلاس مورد نظر، قابل دید هستند. به طور معمول توصیه می شود تا این متغیرها به صورت private تعریف شوند. اما با استفاده از اصلاحگرهای دسترسی، می توان برای این متغیرها، قابلیت دید(visibility) در زیرکلاس ها را تعریف نمود. 
  • متغیرهای نمونه دارای مقدار پیش فرض هستند. در اعداد، مقدار پیش فرض 0 است، در مقادیر بولی مقدار پیش فرض false است و در اشیاء مقدار پیش فرض null است. در هنگام تعریف این متغیرها، می توان به آنها مقدار داد، و یا اینکه می توان در داخل سازنده(constructor) به آنها مقدار دهی نمود. 
  • با فراخوانی نام متغیر نمونه در کلاس مورد نظر، می توان به متغیرهای نمونه دسترسی پیدا کرد. اما برای دسترسی به آنها در متدها و کلاس های مختلف( هنگامی که به متغیرهای نمونه دسترسی داده شود) باید از نام کامل آن استفاده نمود. مانند 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

متغیرهای استاتیک(static variables)

  • متغیرهای کلاس، که معمولا بعنوان متغیرهای استاتیک شناخته می شوند، در داخل یک کلاس و با استفاده از کلمه ی کلیدی static تعریف می شوند اما در خارج از متدها یا سازنده ها یا بلوک ها قرار می گیرند. 
  • تنها یک کپی از هر متغیر استاتیک برای هر کلاس باید وجود داشته باشد، بدون در نظر گرفتن اینکه چه تعداد شیء از آن ایجاد می شوند. 
  • از متغیرهای استاتیک بندرت بعنوان ثابت ها استفاده می شود. ثابت ها، متغیرهایی هستند که به صورت public یا private یا final یا static تعریف می شوند. همچنین متغیرهای ثابت، مقدار اولیه ی آنها هیچوقت تغییر نمی کند. 
  • متغیرهای استاتیک، در حافظه ی static ذخیره می شوند. و به ندرت به صورت final تعریف شده و به یکی از صورت های public یا private استفاده می شوند. 
  • متغیرهای استاتیک، زمانی ایجاد می شوند که برنامه اجرا شود. و هنگامی که برنامه متوقف شود، این متغیرها نیز نابود می شوند. 
  • میدان دید متغیرهای استاتیک مشابه متغیرهای نمونه است. اما اکثر متغیرهای استاتیک به دلیل اینکه باید در کلاس مورد نظر مورد دسترسی قرار بگیرند، به صورت public تعریف می شوند. 
  • مقادیر پیش فرض در متغیرهای استاتیک مشابه متغیرهای نمونه است. در اعداد مقدار پیش فرض آنان 0 است. در مقادیر بولی، مقدار پیش فرض آنها false است و در اشیاء مقدار پیش فرض آنها null است. در هنگام تعریف این متغیرها، می توان آنها را مقدار دهی نمود. و یا اینکه در داخل سازنده ها می توان چنین کاری را انجام داد. بعلاوه ی آن، این مقادیر می توانند در بلوک های ویژه ی استاتیک initializer انتساب داده شوند. 
  • متغیرهای استاتیک را می توان با استفاده از نام کلاس به صورت nameClassName.VariableName تعریف نمود
  • هنگامی که می خواهیم متغیرهای استاتیک را به صورت public static final تعریف می کنیم، آنگاه نام های متغیرها(ثابت ها) باید با حروف بزرگ باشند. اگر که متغیرهای استاتیک به صورت 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);
}
}

نتیجه به صورت زیر خواهد بود:

Development average salary:1000

 نکته: در صورتی که  بخواهیم متغیر مورد نظر از یک کلاس بیرونی قابل قابل دسترسی باشد، ثابت مورد نظر باید به صورت Employee.DEPARTMENT باشد. 

در ادامه خواهید آموخت...

 در این مقاله از قبل با اصلاحگرهای دسترسی(access modifiers ) از قبیل public و private آشنا شده اید. در مقاله ی بعدی به توضیح و تشریح اصلاحگرهای دسترسی و اصلاجگرهای غیر دسترسی به صورت جزء به جزء خواهیم پرداخت.