Ketika merujuk ke variabel pribadi internal POJO Java yang memiliki getter / setter, saya telah menggunakan istilah berikut:
- bidang
- variabel
- atribut
- Properti
Apakah ada perbedaan di atas? Jika demikian, apa istilah yang tepat untuk digunakan? Apakah ada istilah yang berbeda untuk digunakan ketika entitas ini bertahan?
Ya ada.
Variabel bisa lokal, bidang, atau konstan (walaupun ini secara teknis salah). Itu atribut seperti samar. Anda juga harus tahu bahwa beberapa orang suka memanggil variabel final non-statis (lokal atau instance)
" Nilai ". Ini mungkin berasal dari bahasa JVM FP yang baru muncul seperti Scala.
Field pada umumnya adalah variabel pribadi pada kelas instan. Bukan berarti ada pengambil dan penyetel.
Atribut adalah istilah yang tidak jelas. Dapat dengan mudah dikacaukan dengan XML atau Java Naming API. Cobalah untuk menghindari penggunaan istilah itu.
Properti adalah kombinasi pengambil dan penyetel.
Beberapa contoh di bawah ini
Ada banyak kombinasi lagi, tetapi jari-jari saya mulai lelah :)
sumber
Jika pertanyaan Anda diminta dengan menggunakan JAXB dan ingin memilih yang benar
XMLAccessType
, saya memiliki pertanyaan yang sama. JAXB Javadoc mengatakan bahwa "field" adalah variabel instance non-statis, non-transient. "Properti" memiliki pasangan pengambil / penyetel (jadi itu harus variabel pribadi). "Anggota publik" adalah publik, dan karena itu mungkin konstan. Juga di JAXB, "atribut" merujuk ke bagian dari elemen XML, seperti pada<myElement myAttribute="first">hello world</myElement>
.Tampaknya "properti" Java, secara umum, dapat didefinisikan sebagai bidang dengan setidaknya pengambil atau metode publik lainnya yang memungkinkan Anda untuk mendapatkan nilainya. Beberapa orang juga mengatakan bahwa properti perlu memiliki setter. Untuk definisi seperti ini, konteks adalah segalanya.
sumber
Dietel dan Dietel memiliki cara yang bagus untuk menjelaskan bidang vs variabel.
“Bersama-sama variabel statis kelas dan variabel instan dikenal sebagai bidangnya.” (Bagian 6.3)
"Variabel harus dinyatakan sebagai bidang hanya jika mereka diperlukan untuk digunakan di lebih dari satu metode kelas atau jika program harus menyimpan nilai-nilai mereka antara panggilan ke metode kelas." (Bagian 6.4)
Jadi bidang kelas adalah variabel statis atau instance - yaitu dideklarasikan dengan ruang lingkup kelas.
Referensi - Dietel P., Dietel, H. - Java ™ Cara Memprogram (Objek Awal), Edisi Kesepuluh (2014)
sumber
Jika Anda mengambil petunjuk dari Hibernate:
Hibernate membaca / menulis status Object dengan bidangnya. Hibernate juga memetakan properti gaya Java Bean ke DB Schema. Hibernasi, Akses bidang untuk memuat / menyimpan objek. Jika pemetaan dilakukan oleh properti, hibernate menggunakan pengambil dan penyetel.
Itu adalah Enkapsulasi yang membedakan cara di mana Anda memiliki pengambil / setter untuk bidang dan itu disebut properti, dengan itu dan kami menyembunyikan struktur data yang mendasari properti itu dalam setMethod, kami dapat mencegah perubahan yang tidak diinginkan di dalam setter. Semua enkapsulasi adalah singkatan dari ...
Bidang harus dideklarasikan dan diinisialisasi sebelum digunakan. Sebagian besar untuk penggunaan internal kelas.
Properti dapat diubah oleh setter dan mereka diekspos oleh getter. Di sini harga lapangan memiliki pengambil / penentu sehingga merupakan properti.
Demikian pula dengan menggunakan bidang , [Dalam hibernasi itu adalah cara yang disarankan untuk PETA menggunakan bidang, di mana private int id; dianotasi @Id, tetapi dengan Properti Anda memiliki kendali lebih besar]
Java doc mengatakan: Field adalah data anggota suatu kelas. Bidang adalah variabel contoh tidak statis dan tidak transien. Field pada umumnya adalah variabel pribadi pada kelas instan.
sumber
Variabel terdiri dari bidang dan non-bidang.
Bidang dapat berupa:
Non-bidang dapat berupa:
Sebagai kesimpulan, perbedaan utama antara variabel adalah apakah mereka adalah bidang atau non-bidang, yang berarti apakah mereka berada di dalam suatu metode atau di luar semua metode.
Contoh Dasar (permisi untuk sintaks saya, saya hanya pemula)
sumber
Sebenarnya kedua istilah ini sering digunakan untuk mewakili hal yang sama, tetapi ada beberapa situasi luar biasa. Bidang dapat menyimpan keadaan suatu objek. Juga semua bidang adalah variabel. Jadi jelas bahwa bisa ada variabel yang bukan bidang. Jadi melihat ke dalam 4 jenis variabel (variabel kelas, variabel instan, variabel lokal dan variabel parameter) kita dapat melihat bahwa variabel kelas dan variabel instan dapat mempengaruhi keadaan suatu objek. Dengan kata lain jika variabel kelas atau instance berubah, keadaan objek berubah. Jadi kita dapat mengatakan bahwa variabel kelas dan variabel instan adalah bidang sedangkan variabel lokal dan variabel parameter tidak.
Jika Anda ingin memahami lebih dalam, Anda dapat mengunjungi sumber di bawah ini: -
http://sajupauledayan.com/java/fields-vs-variables-in-java
sumber
Pertanyaannya sudah lama tetapi perbedaan penting lainnya antara variabel dan bidang adalah bahwa bidang mendapatkan nilai default ketika dideklarasikan. Variabel, di sisi lain, harus diinisialisasi.
sumber
Pemahaman saya seperti di bawah ini, dan saya tidak mengatakan bahwa ini 100% benar, saya mungkin juga salah ..
Sebuah variabel adalah sesuatu yang Anda menyatakan, yang dapat dengan perubahan default dan memiliki nilai yang berbeda, tapi itu juga bisa secara eksplisit dikatakan final. Di Jawa itu adalah:
Jadi pada dasarnya, variabel adalah segala sesuatu yang dideklarasikan dan dapat menyimpan nilai. Metode foo di atas mengembalikan variabel misalnya .. Ia mengembalikan variabel tipe Integer yang menyimpan alamat memori Integer baru (); Segala sesuatu yang Anda lihat di atas juga variabel, listVariable, aFinalVariableExample dan dijelaskan di sini:
Bidang adalah variabel yang cakupannya lebih jelas (atau konkret). Variabel yang kembali dari ruang lingkup metode foo tidak jelas dalam contoh di atas, jadi saya tidak akan menyebutnya bidang. Di sisi lain, iAmAlsoVariable adalah bidang "lokal", dibatasi oleh ruang lingkup metode foo, dan listVariable adalah bidang "instance" di mana ruang lingkup bidang (variabel) dibatasi oleh lingkup objek.
Properti adalah bidang yang dapat diakses / dimutasi. Setiap bidang yang memperlihatkan pengambil / penyetel adalah properti.
Saya tidak tahu tentang atribut dan saya juga ingin mengulangi bahwa ini adalah pemahaman saya tentang variabel, bidang, dan properti apa.
sumber
variable
- Alamat penyimpanan bernama. Setiap variabel memiliki tipe yang mendefinisikan ukuran memori, atribut, dan perilaku. Ada untuk jenis variabel Java:class variable
,instance variable
,local variable
,method parameter
field
- variabel anggota atau anggota data. Itu adalahvariable
di dalamclass
(class variable
atauinstance variable
)attribute
- dalam beberapa artikel Anda dapat menemukan bahwaattribute
itu adalahobject
representasi dariclass variable
.Object
beroperasi denganattributes
yang mendefinisikan seperangkat karakteristik.property
-field
+ dibatasigetter/setter
. Ini memiliki sintaks lapangan tetapi menggunakan metode di bawah tenda.Java
tidak mendukungnya dalam bentuk murni. LihatlahObjective-C
,Swift
,Kotlin
Contohnya
Kotlin
contoh:[Variabel cepat, properti]
sumber