CodeGym /وبلاگ جاوا /Random-FA /متغیرهای جاوا
John Squirrels
مرحله
San Francisco

متغیرهای جاوا

در گروه منتشر شد
در این مقاله قصد داریم به تمامی زبان آموزان جاوا توضیح دهیم که متغیرهای جاوا چیست و چگونه باید با آنها کار کرد.

متغیر جاوا چیست؟

یک متغیر در جاوا را می توان به عنوان یک جعبه در نظر گرفت. این "جعبه" اندازه خاصی دارد: حافظه ای که برای آن اختصاص داده شده است. اینکه چقدر حافظه تخصیص داده خواهد شد بستگی به نوع متغیر دارد، اما در این مورد کمی بعد صحبت خواهیم کرد. در عین حال، اندازه خود جعبه پس از ایجاد آن قابل تغییر نیست، اما محتویات آن قابل تغییر است. ممکن است جعبه خالی باشد. می توانید مقداری را در آن "درج" کنید و سپس مقداری دیگر را استخراج کرده و قرار دهید. بنابراین، یک متغیر فیلدی است که مقادیر داده ها را در حین اجرای یک برنامه جاوا ذخیره می کند. این جعبه ویژگی های مهمی دارد:
  • همیشه می تواند فقط یک مقدار داشته باشد (یا می تواند خالی باشد، در این صورت حاوی مقدار پیش فرض خواهد بود)
  • یک نوع داده دارد. اندازه آن به نوع داده و همچنین به ناحیه خاصی از حافظه که مکان برای آن اختصاص داده شده است (محل قرارگیری آن) بستگی دارد.
متغیرها در جاوا - 1

نحوه اعلان متغیرها

برای تعریف متغیرها در جاوا، باید نوع و نام آن را مشخص کنید. در اینجا مثالی از اعلان سه متغیر آورده شده است:
int myInt;
String s;
Object variableName;
در اینجا int , String , و Object نوع داده و myInt , s , variableName نام متغیرها هستند. نوع داده باید بر اساس نیاز برنامه انتخاب شود و بهتر است نامی را انتخاب کنید تا مشخص شود موضوع چیست. البته، برای مبتدیان آنقدر سخت نیست، اما در پروژه های بزرگ، نام متغیرهایی مانند 's' می تواند خوانایی کد را مختل کند. پس بهتر است عادت کنیم که متغیرها را به گونه ای نامگذاری کنیم که از همان ابتدا مشخص شود که برای چه کاری هستند. البته در حد منطق.

نحوه مقداردهی اولیه متغیرها

وقتی متغیری را تعریف می کنید، حافظه را برای آن اختصاص می دهید. مقداردهی اولیه به این معنی است که مقدار مشخصی را در جعبه قرار می دهید. این را می توان بلافاصله در هنگام اعلام متغیر یا بعد از آن انجام داد. همچنین مقدار یک متغیر می تواند در طول اجرای برنامه تغییر کند. مثال:
public class VariableTest {
    public static void main(String[] args) {
        int myInt = 5;
        String s;
        s = "init";
        System.out.println(s);
        s = s+5;
        System.out.println(s);
    }
}
در اینجا متغیر myInt را در یک خط اعلام و مقداردهی اولیه کردیم ، بلافاصله برای آن حافظه اختصاص دادیم (32 بیت برای هر عدد int)، نامی به آن دادیم و سپس مقدار 5 را در حافظه اختصاص داده شده قرار دادیم. سپس اعلام کردیم که فضای حافظه را برای رشته s اختصاص می دهیم و قبلاً یک دستور جداگانه مقدار "init" را در آن قرار داده است. پس از آن، رشته را چاپ کرده و مقدار متغیر s را تغییر دادیم . در این برنامه خطوط را پرینت کردیم و اگر آن را اجرا کنید نتیجه زیر را خواهید دید:
init init5

انواع داده متغیرها در جاوا: ابتدایی و غیر ابتدایی

انواع داده های متغیرها در جاوا به دو گروه تقسیم می شوند:
  • انواع داده های اولیه عبارتند از : بایت ، کوتاه ، میانی ، طولانی ، شناور ، دوبل ، بولی و char .
  • انواع داده های غیر ابتدایی مانند رشته ، آرایه و کلاس ها
در اینجا یک مثال از کار با متغیرها آورده شده است:
public class VariableTest {
   public static void main(String[] args) {

       int myInt = - 5;               // integer (whole number)
       float myFloat = 2.718281828459045f;    // Floating point number
       char myLetter = 'a';         // character
       boolean myBool = true;       // boolean
       String myText = "Hero";     // String
       System.out.println(myInt + " " +
               myFloat +" " + myLetter + " " +  myBool + " " + myText);
       Student myStudent = new Student("Walker","Johnny", "Kyle", null);

   }
}
int ، char ، boolean و float اولیه هستند. رشته غیر ابتدایی است. در مورد متغیر myStudent چطور ؟ این یک شی از کلاس Student ایجاد شده توسط کاربر است . این به سادگی برای نشان دادن کار با متغیرهای غیر ابتدایی ایجاد شد. آنها در جاوا اکثریت هستند، زیرا تقریباً همه چیز در این زبان برنامه نویسی یک شی است. برای درک، کد کلاس دانشجو در اینجا آمده است :
import java.util.Date;

public class Student {
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       //return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}

انواع متغیرها در جاوا: محلی، نمونه و استاتیک

در جاوا سه نوع متغیر مختلف وجود دارد که ما آنها را به شرح زیر فهرست کرده ایم:
  1. متغیرهای محلی
  2. متغیرهای نمونه
  3. متغیرهای استاتیک

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

متغیری که در بدنه متد اعلام شده است، متغیر محلی نامیده می شود. همچنین متغیرهای محلی در داخل سازنده ها و بلوک ها اعلام می شوند. شما می‌توانید از متغیرهای محلی فقط در آن متد، سازنده یا بلوک که در آن ایجاد شده‌اند استفاده کنید و سایر متدهای کلاس حتی از وجود متغیر مطلع نیستند. بنابراین متغیرهای محلی زمانی ایجاد می شوند که متد، سازنده یا بلوک وارد می شود و زمانی که متد، سازنده یا بلوک کار نمی کند، متغیر از بین می رود. یک متغیر محلی را نمی توان با کلمه کلیدی ثابت تعریف کرد . حتی بیشتر: شما نمی توانید از اصلاح کننده های دسترسی برای متغیرهای محلی استفاده کنید. به عنوان مثال:
public class VariableTest {
   public static void main(String[] args) {
       System.out.println(myMethod("C plus "));
   }
           private static String myMethod(String myString) {
       String myOtherString = "plus";
       return myString + myOtherString;
   }
}
در اینجا myOtherString یک متغیر محلی است. شما نمی توانید از روش دیگر استفاده کنید، اما myMethod . متغیرهای محلی نمی توانند مقادیر پیش فرض داشته باشند. اگر حداقل یک متغیر محلی در برنامه مقداردهی اولیه نشده باشد، برنامه به درستی کار نخواهد کرد. بیایید یک تغییر کوچک در یکی از مثال‌های قبلی ایجاد کنیم و مقداردهی اولیه متغیر myBool را فراموش کنیم :
public class VariableTest {
   public static void main(String[] args) {

       int myInt = - 5;               // integer (whole number)
       float myFloat = 2.718281828459045f;    // Floating point
       char myLetter = 'a';         // character
       boolean myBool;       // boolean
       String myText = "Hero";     // String
       System.out.println(myInt + " " +
               myFloat +" " + myLetter + " " +  myBool + " " + myText);
       Student myStudent = new Student("Walker","Johnny", "Kyle", null);

   }
}
اگر بخواهیم برنامه را اجرا کنیم، خطا می دهد:
خطا: (10، 50) java: متغیر myBool ممکن است مقداردهی اولیه نشده باشد

متغیرهای نمونه

متغیری که در داخل کلاس اما خارج از بدنه هر متد، سازنده یا بلوکی اعلام شده است، متغیر نمونه نامیده می شود. متغیرهای نمونه زمانی ایجاد می شوند که یک شی با استفاده از کلمه کلیدی جدید ایجاد می شود . زمانی که جسم از بین می رود از بین می رود. نمی توان آن را به عنوان ثابت اعلام کرد، اما می توانید از اصلاح کننده های دسترسی برای متغیرهای مثال استفاده کنید. متغیرهای نمونه برای همه متدها، سازنده ها و بلوک های کلاس قابل مشاهده هستند. معمولاً متغیرهای نمونه خصوصی هستند، اما می‌توانید قابلیت مشاهده برای زیر کلاس‌ها را تغییر دهید. متغیرهای نمونه بر خلاف متغیرهای محلی دارای مقادیر پیش فرض هستند. برای همه انواع اعداد ابتدایی مقدار پیش‌فرض 0، برای بولی‌ها نادرست و برای ارجاعات شیء صفر است. مقادیر را می توان در طول اعلان یا در سازنده تخصیص داد. به عنوان مثال:
//instance variable example
public class Employee {

   // here we have a public instance variable. It is visible for this class and child classes
   public String name;

   //this instance variable is private so it’s visible for the Employee class only. You can use setters and getters to get it
   private double salary;

   public Employee (String empName) {
       name = empName;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public double getSalary() {
       return salary;
   }

   public void setSalary(double employeeSalary) {
       salary = employeeSalary;
   }

   public static void main(String args[]) {
       Employee employee = new Employee("Johnny");
       employee.setSalary(1500);
       System.out.println("name = " + employee.getName());
       System.out.println("salary = " + employee.getSalary());
   }
}

متغیرهای استاتیک

متغیری که به عنوان ثابت اعلام می شود، متغیر استاتیک نامیده می شود. جاوا به شما پیشنهاد می کند که چنین متغیرهایی را خارج از یک متد، سازنده یا بلوک اعلام کنید. نمی تواند محلی باشد، آنها متعلق به کلاس هستند، نه به نمونه ها. این بدان معناست که یک کپی از یک متغیر استاتیک زمانی ایجاد شده و در بین تمام نمونه های کلاس به اشتراک گذاشته می شود. تخصیص حافظه برای متغیرهای استاتیک تنها یک بار زمانی که کلاس در حافظه بارگذاری می شود، اتفاق می افتد. آنها می توانند هر گونه دیدی داشته باشند، اما معمولاً به عنوان عمومی اعلام می شوند. آنها همچنین دارای مقادیر پیش فرض مانند متغیرهای نمونه هستند.
public class Box
{
   public void add(int data)
   {
       Storage.sum = Storage.sum + data;
       Storage.count++;
   }

   public void remove(int data)
   {
       Storage.sum = Storage.sum - data;
       Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}
در مثال بالا، یک کلاس Storage جداگانه ایجاد کردیم ، متغیرهای count و sum را به آن منتقل کردیم و آنها را ثابت اعلام کردیم. متغیرهای استاتیک عمومی را می توان از هر روش برنامه (و نه تنها از یک متد) در دسترس قرار داد. برای تقویت آموخته هایتان، پیشنهاد می کنیم یک درس ویدیویی از دوره جاوا ما تماشا کنید
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION