Jumat, 21 September 2012

Variabel lokal, Ruang Lingkup, dan Lifetime


Dalam definisi kelas, ada tiga macam variabel.
Misalnya variabel setiap metode dalam definisi kelas dapat mengakses variabel
variabel parameter Hanya metode mana parameter muncul dapat mengakses variabel. Ini adalah bagaimana informasi akan diteruskan ke objek.
variabel lokal Hanya metode mana parameter muncul dapat mengakses variabel. Variabel ini digunakan untuk menyimpan hasil antara.
Mari kita lihat contoh:
public class TwoSides
{
   int side1, side2;
   public boolean testRightTriangle (int hypoteneuse)
   {
      int side1Squared = side1 * side1;
      int side2Squared = side2 * side2;
      int hypSquared = hypoteneuse * hypoteneuse;

      kembali side1Squared + side2Squared == hypSquared;
   }
}

Dalam contoh ini, yang memeriksa apakah kita memiliki segitiga siku-siku (kelas berisi dua sisi pendek segitiga, dan kami melewati sisi panjang, yaitu, hypoteneuse tersebut). Kami menerapkan teorema Pythagoras untuk memeriksa apakah itu adalah segitiga siku-siku.
Dalam contoh ini:

side1, side2 adalah variabel instan. Setiap metode dalam TwoSides dapat mengakses variabel tersebut secara langsung.
Kita mengatakan ruang lingkup variabel contoh adalah definisi seluruh kelas. Ruang lingkup mengacu pada bagian kode mana variabel dapat diakses.

hypoteneuse adalah variabel parameter untuk testRightTriangle dan hanya dapat diakses dalam testRightTriangle metode tubuh,.
Ruang lingkup untuk parameter hanya tubuh metode di mana parameter berada.

Nama parameter hanya harus unik dalam daftar parameter. Sebagai contoh, kita dapat memiliki dua testRightTriangle metode dan testScaleneTriangle, yang keduanya memiliki hypoteneuse parameter int. Karena ruang lingkup hanya tubuh metode, kita tahu mana hypoteneuse sedang disebut.

Sebagai contoh:

public class TwoSides
{
   int side1, side2;
   public boolean testRightTriangle (int hypoteneuse)
   {
      / / Hypoteneuse mengacu pada parameter di atas
      / / Hypoteneuse TIDAK sama dengan testScaleneTriangle
   }
   public boolean testScaleneTriangle (int hypoteneuse)
   {
      / / Hypoteneuse mengacu pada parameter di atas
      / / Hypoteneuse TIDAK sama dengan testRightTriangle
   }
}
Setiap metode memiliki hypoteneuse sendiri dan mereka tidak saling mempengaruhi.
side1Squared, side2Squared, dan hypSquared adalah variabel lokal dalam testRightTriangle. Mereka hanya berlaku di testRightTriangle.
Ruang lingkup dimulai pada titik deklarasi, dan berlangsung sampai akhir tubuh metode (hal ini tidak sepenuhnya benar, tapi itu benar dalam contoh di atas). Anda harus mendeklarasikan variabel sebelum digunakan.

Sekali lagi, lebih dari satu metode dapat menentukan nama yang sama untuk variabel lokal. Sebagai contoh, kita bisa memiliki keduanya testRightTriangle () dan testScaleneTriangle dapat keduanya memiliki suhu variabel lokal. Ini bukan variabel terkait. Masing-masing memiliki kotak sendiri, dan Anda harus menganggap mereka sebagai yang sama sekali berbeda, meskipun mereka berbagi nama yang sama.


  • Variabel lokal Memiliki Memori ada


Ketika Anda keluar dari sebuah metode, baik variabel lokal dan variabel parameter hilang (meskipun, jika Anda melewati sebuah objek sebagai parameter, Anda biasanya memiliki akses ke objek ketika Anda keluar dari metode).
Itu berarti jika Anda membuat panggilan untuk testRightTriangle () dan menjalankan deklarasi, itu menciptakan kotak baru dan menginisialisasi mereka. Ketika Anda keluar, variabel lokal menghilang.

Ketika Anda menyebutnya kedua kalinya, itu recreates variabel lokal, dan diatur ulang mereka.

Parameter berperilaku agak seperti ini. Variabel-variabel akan initalized dengan argumen.

Variabel misalnya hanya mempertahankan nilai mereka atas pemanggilan metode. Artinya, jika beberapa variabel misalnya memiliki nilai 4 untuk tinggi, dan Anda mengubahnya ke 10, maka waktu berikutnya Anda membuat panggilan metode, itu masih 10. Ini tetap 10 sampai beberapa pemanggilan metode perubahan nilai.


  • Lifetime


Berbagai jenis variabel memiliki daya tahan yang berbeda. Parameter variabel ada ketika suatu method call terjadi, dan berlangsung sampai pemanggilan metode selesai. Variabel-variabel parameter memegang kotak untuk nilai-nilai atau pegangan. Jika kotak memegang pegangan (yaitu, variabel parameter adalah variabel object), maka ketika kotak menghilang, pegangan mungkin masih tinggal di sekitar. Itu biasanya karena Anda memiliki beberapa variabel sekitar yang memegang pegangan, dan disahkan dengan metode sebagai argumen.
Variabel lokal juga memiliki masa pakai yang sama. Kotak-kotak yang dibuat ketika deklarasi muncul, dan berlangsung sampai Anda keluar dari metode.

Variabel Instance memiliki seumur hidup jauh lebih lama. Mereka diciptakan ketika objek dibangun, dan hilang ketika objek menghilang. Benda tersebut menghilang ketika tidak lagi digunakan, yang pada dasarnya berarti bahwa variabel tidak memiliki pegangan untuk objek. Ketika itu terjadi, pengumpul sampah menghilangkan objek.

Pengumpul sampah adalah program yang berjalan ketika program Anda berjalan, dan mencari benda-benda (balon) dengan tidak ada variabel yang memiliki pegangan untuk itu.


  • Lingkup vs Lifetime


Lingkup mengacu pada berbagai kode di mana Anda dapat mengakses variabel. Anda benar-benar dapat mencetak program Anda, dan menggambar kotak untuk menunjukkan di mana variabel adalah valid. Ini tekstual di alam. Kita dapat membagi ruang lingkup dalam
metode tubuh Variabel lingkup dapat diakses dalam tubuh satunya metode (variabel lokal, parameter)
definisi kelas Variabel lingkup dapat diakses i definisi kelas (variabel misalnya)
Lifetime mengacu pada jumlah waktu sebuah variabel (atau objek) ada. Karena variabel objek keduanya kotak (memegang pegangan) dan obyek, daya tahan mungkin berbeda. Sebuah variabel objek bisa menghilang (misalnya, variabel lokal menghilang setelah Anda keluar dari metode di mana variabel lokal dideklarasikan), namun masih ada objek.

Kita dapat membagi seumur hidup ke dalam kategori juga:

Metode seumur hidup tubuh Exists pada entri metode tubuh, menghilang pada keluar metode tubuh. (Variabel lokal, parameter)
Definisi kelas seumur hidup Exists asalkan obyek sekitar (variabel misalnya)