برای استفاده از یک متغییر که در واقع یک مکان رزرو شده از حافظه  رم شماست , باید قبلا اون رو تعریف کنیم مثل تعاریف زیر :

 

 int a, b, c; // تعریف سه متغییر a,b,c.

int a = 10, b = 10; // مثال مقدار دهی اولیه

byte B = 22; // مقدار دهی اولیه متغییر نوع byte B.

double pi = 3.14159; // تعریف و مقداردهی متغییر pi.

char a = 'a'; // تعریف نوع کاراکتری a و مقداردهی اولیه آن

 

 

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

 

1- متغییر های محلی local

 

 2- متغییر های نمونه instance

 

3- متغییر های ثابت کلاسی class/static

 

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

 

دقت کنید که وقتی یک متغییر رو داخل یک متد یا سازنده یا یک بلاک تعیین شده تعریف میکنیم در واقع اون متغییر حالت محلی داره و فقط توی همون متد یا سازنده یا بلاک اعتبار داره . در این نوع تعریف باید بلا فاصله بعد از تعریق مقدار دهی اولیه رو انجام بدیم چرا که این نوع تعریف هیچ مقدار اولیه ای به متغییر نمیده . در ضمن نمیتونبم از تغییر دهنده های دسترسی جاوا برای این نوع تعریف استفاده کنیم .

 

به مثال زیر توجه کنید :

 

 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

 

 

حالا به این مثال توجه کنید که توش از مقدار دهی اولیه استفاده نشده و نتیجش رو ببینید :

 

 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 :

 

- این نوع متغییر ها د اخل کلاس و خارج از تمام متدها تعریف میشن و تمام متدهای داخل کلاس و سازنده ی کلا س هم به اون دسترسی دارند.

 

- در واقع اختصاص حافظه به این نوع متغییر زمانی انجام میشه که شما با کلمه کلیدی new  یک شی از نوع کلاسی که حاوی این متغییره میسازید .

 

- میتونیم از modifire های برای تغییر نوع دسترسی به این نوع متغییرها استفاده کنیم . بطور مثال میتونیم کاری کنیم که اگه کلاسی از کلاس ما  ارث میبره کدوم متغییر های رو ارث ببره کدومارو نبره .

 

- این نوع متغییرها در زمان تعریف مقدار اولیه میگرن .

 

- اگه دسترسی عمومی بدیم میتونیم مستقیم از شیی که تعریف کردیم به مقادیر این نوع متغییرها دسترسی داشته باشیم .

 

به مثال زیر خوب توجه کنید :

 

 

 import java.io.*;

 

public class Employee{

// این متغییر برای تمام کلاسهای فرزند قابل دسترسی است.

public String name;

 

// این متغییر فقط تو همین کلاس دیده میشه.

private double salary;

 

//  متغییری که داخل سازنده مقدار دهی اولیه شده .

public Employee (String empName){

name = empName;

}

 

// توی این متد متغییر salary مقدار دهی شده.

public void setSalary(double empSal){

salary = empSal;

}

 

// این متد مقادیر متغییر های کلاس مارو چاپ میکنه.

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 :

 

- توی این نوع تعریف درست مثل متغییر های نمونه یا instance  عمل میکنیم  با این تفاوت که قبل از تعریف کلمه کلیدی static رو میاریم .

 

- باید خارج از متد تعریف بشه .

 

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

 

- با ثابت ها یا constants که با کلمه کلیدی final تعریف میشن اشتباه نگیرین .

 

- مقدار متغییر نوع static توی تمام اشیای تعریف شده از یک کلاس یکسان هست .

 

مثال زیر رو ببینید :

 

 

 import java.io.*;

 

public class Employee{

//تعریف یک متغییر استاتیک پرایویت

private static double salary;

 

// تعریف یک ثابت از نوع استاتیک

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