stifler's Blog


Mendeklarasikan Variabel untuk Lihat Obyek

Sebelumnya, Kamu belajar bahwa untuk mendeklarasikan variabel, Kamu menulis:

ketik nama;

Ini memberitahu compiler bahwa Kamu akan menggunakan nama untuk merujuk ke data yang tipe tipe. Dengan variabel primitif, deklarasi ini juga memiliki jumlah yang tepat memori untuk variabel.

Kamu juga dapat mendeklarasikan variabel referensi pada baris sendiri. Sebagai contoh:

Point originOne;

Jika Kamu menyatakan originOne seperti ini, nilainya akan dipastikan sampai obyek sebenarnya diciptakan dan ditugaskan untuk itu. Cukup mendeklarasikan sebuah variabel referensi tidak menciptakan objek. Untuk itu, Anda perlu menggunakan operator baru, seperti dijelaskan di bagian selanjutnya. Kamu harus menetapkan objek untuk originOne sebelum Kamu menggunakannya dalam kode Kamu. Jika tidak, Kamu akan mendapatkan kesalahan kompilator.
Sebuah variabel dalam negara, yang saat ini tidak ada referensi objek, dapat digambarkan sebagai berikut (nama variabel, originOne, ditambah referensi menunjuk ke nothing):

originOne adalah null.


Mengontrol Akses ke Anggota Kelas

Pengubah tingkat Akses menentukan apakah kelas-kelas lain dapat menggunakan bidang tertentu atau memanggil metode tertentu. Ada dua tingkat kontrol akses:

* Pada tingkat atas-publik, atau paket-swasta (tidak ada modifier eksplisit).
* Pada tingkat-anggota publik, swasta, dilindungi, atau paket-swasta (tidak ada modifier eksplisit).

Kelas A dapat dinyatakan dengan publik pengubah, dalam hal ini kelas yang terlihat untuk semua kelas di mana-mana. Jika kelas tidak memiliki pengubah (default, juga dikenal sebagai paket-swasta), itu hanya dapat dilihat dalam paket sendiri (paket diberi nama kelompok kelas)

Pada tingkat anggota, Kamu juga dapat menggunakan pengubah umum atau tidak ada modifier (paket-swasta) sama dengan kelas tingkat atas, dan dengan arti yang sama. Untuk anggota, ada dua pengubah akses tambahan: private dan protected. Pengubah pribadi menetapkan bahwa anggota hanya dapat diakses di kelasnya sendiri. Pengubah dilindungi menetapkan bahwa anggota hanya dapat diakses dalam paket sendiri (seperti paket-swasta) dan, di samping itu, oleh subclass kelas dalam paket yang lain
Tips Memilih Level Akses: Jika pemrogram lain menggunakan kelas Kamu, ingin memastikan bahwa kesalahan dari penyalahgunaan tidak bisa terjadi. Tingkat Akses dapat membantu Kamu melakukan hal ini.

* Gunakan tingkat akses yang paling ketat yang masuk akal bagi seorang anggota tertentu. Penggunaan pribadi kecuali Kamu memiliki alasan untuk tidak.
* Hindari publik bidang kecuali untuk konstanta. (Banyak contoh di bidang menggunakan tutorial publik ini mungkin. membantu untuk menggambarkan beberapa poin ringkas, tetapi tidak dianjurkan untuk kode produksi.) Masyarakat bidang cenderung link Kamu ke implementasi tertentu dan membatasi fleksibilitas Kamu dalam mengubah kode Anda

Memahami Anggota Instance dan Kelas
Pada bagian ini, kita membahas penggunaan kata kunci statis untuk membuat ladang dan metode yang dimiliki kelas, daripada sebuah instance dari kelas.


KELAS INNER

Untuk melihat kelas dalam digunakan, mari kita pertama mempertimbangkan array. Pada contoh berikut, kita akan menciptakan array, mengisinya dengan nilai-nilai integer dan kemudian output bahkan hanya nilai indeks array dalam urutan menaik.

Kelas DataStructure di bawah ini terdiri dari:

* Kelas DataStructure luar, yang meliputi metode untuk menambahkan sebuah integer ke array dan mencetak nilai-nilai bahkan indeks array.
* Kelas InnerEvenIterator batin, yang mirip dengan iterator Java standar. Iterators digunakan untuk langkah melalui struktur data dan biasanya memiliki metode untuk menguji elemen terakhir, mengambil elemen saat ini, dan pindah ke elemen berikutnya.
* Metode utama yang instantiates objek DataStructure (ds) dan menggunakannya untuk mengisi array arrayOfInts dengan nilai integer (0, 1, 2, 3, dll), kemudian memanggil metode printEven untuk mencetak nilai-nilai indeks bahkan arrayOfInts .

public class DataStructure {
/ / Buat array
private final static int SIZE 15 =;
int pribadi [] arrayOfInts = new int [UKURAN];

publik DataStructure () {
/ / Mengisi array dengan nilai integer ascending
for (int i = 0; i <SIZE; i + +) {
arrayOfInts [i] = i;
}
}

public void printEven () {
/ / Mencetak nilai-nilai bahkan indeks dari array
InnerEvenIterator iterator = this.new InnerEvenIterator ();
sedangkan (iterator.hasNext ()) {
System.out.println (iterator.getNext () + "");
}
}

/ / Kelas dalam menerapkan pola Iterator
swasta kelas InnerEvenIterator {
/ / Mulai melangkah melalui array dari awal
int swasta berikutnya = 0;

public boolean hasNext () {
/ / Memeriksa apakah elemen saat ini adalah yang terakhir dalam array
return (<next = SIZE – 1);
}

public int getNext () {
/ / Merekam nilai indeks bahkan dari array
retValue int = arrayOfInts [berikutnya];
/ / Mendapatkan elemen bahkan berikutnya
berikutnya + = 2;
kembali retValue;
}
}

public static void main (String s []) {
/ / Mengisi array dengan nilai integer dan mencetak nilai-nilai hanya dari indeks bahkan
ds DataStructure DataStructure = new ();
ds.printEven ();
}
}

Outputnya adalah:

0 2 4 6 8 10 12 14

Perhatikan bahwa kelas InnerEvenIterator merujuk langsung ke variabel instan arrayOfInts dari objek DataStructure.

kelas Inner dapat digunakan untuk menerapkan kelas pekerja seperti yang ditunjukkan dalam contoh di atas. Jika anda berencana untuk menangani peristiwa user-interface, Anda akan perlu mengetahui bagaimana menggunakan inner class karena mekanisme penanganan acara ekstensif menggunakan mereka.

Lokal dan Anonymous Inner Kelas
Ada dua jenis tambahan inner class. Kamu dapat mendeklarasikan sebuah kelas batin dalam tubuh metode. Kelas seperti ini dikenal sebagai kelas dalam lokal. Kamu juga dapat mendeklarasikan kelas batin dalam tubuh metode tanpa penamaan itu. Kelas-kelas ini dikenal sebagai anonymous inner class. Kamu akan menemukan kelas-kelas tersebut dalam pemrograman Java maju.

Pengubah
Kamu dapat menggunakan pengubah yang sama untuk kelas batin yang gunakan untuk anggota lain dari luar kelas. Sebagai contoh, Kamu dapat menggunakan specifiers mengakses – swasta, publik, dan dilindungi – untuk membatasi akses ke kelas batin, sama seperti yang lakukan kepada anggota kelas yang lain

Enam Jenis
Tipe enam adalah jenis bidang yang terdiri dari satu set tetap konstanta. Contoh umum termasuk kompas arah (nilai UTARA, SELATAN, TIMUR, dan BARAT) dan hari-hari dalam seminggu.

Karena mereka adalah konstanta, nama-nama field tipe enam adalah dalam huruf besar.

Dalam bahasa pemrograman Java, Kamu menentukan tipe enam dengan menggunakan kata kunci enam. Misalnya, Kamu akan menentukan hari-of-the-minggu tipe enam sebagai:

public enam {Hari
Minggu, Senin, Selasa, Rabu,
Kamis, Jumat, Sabtu
}

Kamu harus menggunakan jenis enam setiap saat Kamu perlu untuk mewakili seperangkat tetap konstanta. Itu termasuk jenis enum alam seperti planet-planet di tata surya kita dan data set mana kamu tahu semua nilai yang mungkin pada waktu kompilasi-misalnya, pilihan pada menu, flag perintah baris, dan sebagainya.

Berikut adalah beberapa kode yang menunjukkan kepada Anda bagaimana menggunakan enam Hari didefinisikan di atas:

public class EnamTest {
Hari hari;

publik EnamTest (Hari hari) {
this.day = hari;
}

public void tellItLikeItIs () {
switch (hari) {
Senin kasus: System.out.println ("Senin buruk.");
break;

Jumat kasus: System.out.println ("Jumat lebih baik.");
break;

kasus Sabtu:
Kasus Minggu: System.out.println ("Akhir pekan adalah yang terbaik.");
break;

default: System.out.println ("pertengahan minggu hari begitu-begitu.");
break;
}
}

public static void main (String [] args) {
EnumTest firstDay = baru EnumTest (Day.MONDAY);
firstDay.tellItLikeItIs ();
EnumTest thirdDay = baru EnumTest (Day.WEDNESDAY);
thirdDay.tellItLikeItIs ();
EnumTest fifthDay = baru EnumTest (Day.FRIDAY);
fifthDay.tellItLikeItIs ();
EnumTest sixthDay = baru EnumTest (Day.SATURDAY);
sixthDay.tellItLikeItIs ();
EnumTest seventhDay = baru EnumTest (Day.SUNDAY);
seventhDay.tellItLikeItIs ();

}
}

Outputnya adalah:

Senin buruk.
hari pertengahan minggu begitu-begitu.
Jumat lebih baik.
Akhir pekan adalah yang terbaik.
Akhir pekan adalah yang terbaik.

jenis bahasa pemrograman Java enum jauh lebih kuat daripada rekan-rekan mereka dalam bahasa lain. Deklarasi enam mendefinisikan kelas (disebut tipe enum). Tubuh kelas enam dapat mencakup metode dan bidang lainnya. compiler akan secara otomatis menambahkan beberapa metode khusus ketika menciptakan sebuah enam. Misalnya, mereka memiliki metode statis yang mengembalikan nilai array yang berisi semua nilai dari enam dalam urutan mereka dinyatakan. Metode ini umumnya digunakan dalam kombinasi dengan masing-masing untuk membangun untuk beralih di atas nilai dari sebuah tipe enam. Sebagai contoh, kode dari contoh kelas Planet bawah iterates atas semua planet di tata surya.

untuk (Planet p: Planet.values ()) {
System.out.printf ("Berat badan Anda pada% s adalah% f% n",
p, p.surfaceWeight (massa));
}

Catatan: Semua enums implisit memperpanjang java.lang.Enum. Karena Java tidak mendukung multiple inheritance, enum tidak dapat memperpanjang hal lain.
Pada contoh berikut, Planet merupakan tipe enum yang mewakili planet-planet di tata surya. Mereka didefinisikan dengan massa konstan dan properti radius.

Setiap enam konstan dinyatakan dengan nilai untuk parameter massa dan jari-jari. Nilai-nilai yang dilewatkan ke konstruktor ketika konstan diciptakan. Java mensyaratkan bahwa konstanta didefinisikan pertama, sebelum segala bidang atau metode. Juga, ketika ada ladang dan metode, daftar konstanta enam harus diakhiri dengan titik koma.
Catatan: konstruktor untuk tipe enam harus akses paket-swasta atau swasta. Secara otomatis menciptakan konstanta yang didefinisikan pada awal tubuh enam. Kamu tidak dapat memanggil sebuah konstruktor enum sendiri.
Selain sifat dan konstruktor, Planet memiliki metode yang memungkinkan Kamu untuk mengambil gravitasi permukaan dan berat suatu benda di planet masing-masing. Berikut adalah contoh program yang mengambil berat badan di bumi (dalam unit ada) dan menghitung dan mencetak berat badan Kamu pada semua planet (dalam satuan yang sama):

public enum {Planet
MERCURY (3.303e 23, 2.4397e6),
VENUS (4.869e +24, 6.0518e6),
BUMI (5.976e +24, 6.37814e6),
MARS (6.421e 23, 3.3972e6),
JUPITER (1.9e +27, 7.1492e7),
SATURN (5.688e +26, 6.0268e7),
Uranus (8.686e +25, 2.5559e7),
Neptune (1.024e +26, 2.4746e7);

swasta massa ganda akhir; / / dalam kilogram
pribadi ganda radius akhir; / / dalam meter
Planet (massa ganda, double radius) {
this.mass = massa;
this.radius = radius;
}
pribadi ganda massa () {massa return;}
private double radius () {return radius;}

/ / Universal gravitasi konstan (m3 kg-1 s-2)
public static double G akhir = 6.67300E-11;

ganda surfaceGravity () {
kembali massa * G / (radius * radius);
}
surfaceWeight ganda (double otherMass) {
kembali otherMass * surfaceGravity ();
}
public static void main (String [] args) {
if (args.length! = 1) {
System.err.println ("Penggunaan: java Planet “);
System.out.println (-1);
}
earthWeight ganda = Double.parseDouble (args [0]);
massa earthWeight = ganda / EARTH.surfaceGravity ();
untuk (Planet p: Planet.values ())
System.out.printf (“Berat badan Anda pada% s adalah% f% n”,
p, p.surfaceWeight (massa));
}
}

Jika Kamu menjalankan Planet.class dari baris perintah dengan argumen dari 175, Kamu mendapatkan output ini:

$ Java Planet 175
Berat badan Anda pada MERCURY adalah 66.107583
Berat badan Anda pada VENUS adalah 158.374842
Berat badan Anda di BUMI adalah 175.000000
Berat badan Anda di MARS adalah 66.279007
Berat badan Anda pada JUPITER adalah 442.847567
Berat badan Anda pada SATURN adalah 186.552719
Berat badan Anda di Uranus 158.397260
Berat badan Anda di Neptunus adalah 199.207413


KELAS BERSARANG

Bahasa pemrograman Java memungkinkan Anda untuk mendefinisikan kelas dalam kelas lain. Seperti kelas disebut kelas nested
kelas OuterClass {

kelas NestedClass {

}
}

Terminologi: Digabung kelas dibagi menjadi dua kategori: statis dan non-statis. Nested kelas yang dideklarasikan statis hanya disebut kelas bersarang statis. kelas bersarang Non-statis disebut inner class.

kelas OuterClass {

statis kelas StaticNestedClass {

}
kelas InnerClass {

}
}

Sebuah kelas bersarang adalah anggota kelas yang melampirkan. kelas bersarang Non-statis (kelas dalam) memiliki akses kepada anggota lain dari kelas melampirkan, bahkan jika mereka dinyatakan pribadi. statis kelas bersarang tidak memiliki akses kepada anggota lain dari kelas melampirkan. Sebagai anggota OuterClass, sebuah kelas bersarang dapat dideklarasikan swasta, publik, dilindungi, atau paket swasta. (Ingat bahwa hanya luar kelas dapat dideklarasikan publik atau paket swasta).
Mengapa Menggunakan Kelas Bersarang?
Ada beberapa alasan kuat untuk menggunakan kelas bersarang, di antaranya:

* Ini adalah cara logis pengelompokan kelas yang hanya digunakan di satu tempat.
* Meningkatkan enkapsulasi.
kelas Nested * dapat menyebabkan kode lebih mudah dibaca dan dipelihara.

pengelompokan logis dari kelas-Jika kelas berguna hanya satu kelas lain, maka adalah logis untuk menanamkan dalam kelas itu dan menjaga dua bersama-sama. Bersarang “kelas pembantu” seperti membuat paket mereka lebih efisien.

Peningkatan enkapsulasi-Pertimbangkan dua kelas tingkat atas, A dan B, dimana B membutuhkan akses kepada anggota A yang lain akan dinyatakan pribadi. Dengan bersembunyi di dalam kelas B kelas A, anggota A dapat dideklarasikan swasta dan B dapat mengaksesnya. Selain itu, B sendiri dapat disembunyikan dari dunia luar.

Lebih mudah dibaca, kode dipelihara-Nesting kelas kecil di dalam kelas tingkat atas tempat kode lebih dekat ke mana ia digunakan.
Kelas Bersarang Statis
Seperti dengan metode kelas dan variabel, kelas bersarang statis dikaitkan dengan kelas luarnya. Dan seperti metode kelas statis, kelas bersarang statis tidak dapat merujuk langsung ke variabel instan atau metode yang didefinisikan di kelasnya melampirkan – dapat menggunakannya hanya melalui referensi obyek.

Catatan: Sebuah kelas nested statis berinteraksi dengan anggota instance dari kelas luar (dan kelas-kelas lain) sama seperti kelas top-level lainnya. Akibatnya, sebuah kelas bersarang statis perilaku kelas tingkat atas yang telah bersarang di kelas lain top-level untuk kenyamanan kemasan.

Statis kelas bersarang diakses menggunakan nama kelas melampirkan:

OuterClass.StaticNestedClass

Misalnya, untuk membuat objek untuk kelas bersarang statis, gunakan sintaks ini:

OuterClass.StaticNestedClass nestedObject baru = OuterClass.StaticNestedClass ();


Menciptakan dan Menggunakan Kelas dan Objek

Sebuah nama deklarasi class kelas dan membungkus tubuh kelas antara kurung. Nama kelas bisa didahului oleh pengubah. Tubuh kelas berisi bidang, metode, dan konstruktor untuk kelas. kelas A menggunakan medan berisi informasi negara dan menggunakan metode untuk menerapkan perilaku. Konstruktor yang menginisialisasi contoh baru dari kelas menggunakan nama kelas dan terlihat seperti metode tanpa tipe kembali, Kamu mengontrol akses ke kelas dan anggota dengan cara yang sama: dengan menggunakan modifier akses seperti publik dalam deklarasi mereka. Kamu, menentukan variabel kelas atau metode kelas dengan menggunakan kata kunci static dalam deklarasi member. Seorang anggota yang tidak dideklarasikan sebagai statis secara implisit anggota contoh. Kelas variabel dibagi oleh semua instance dari kelas dan dapat diakses melalui nama kelas serta referensi contoh. Instance dari kelas mereka sendiri mendapatkan salinan dari setiap variabel misalnya, yang harus diakses melalui referensi contoh. Kamu membuat objek dari kelas dengan menggunakan operator baru dan konstruktor.
Operator baru mengembalikan referensi ke obyek yang telah dibuat, dapat menetapkan referensi ke variabel atau menggunakannya secara langsung. Instance variabel dan metode yang dapat diakses dengan kode luar kelas yang mereka dinyatakan dalam bisa disebut dengan menggunakan nama yang memenuhi syarat. Nama berkualitas dari sebuah variabel instan terlihat seperti ini:

objectReference.variableName

Nama berkualitas metode terlihat seperti ini:

objectReference.methodName (argumentList)

atau

objectReference.methodName ()

Pengumpul sampah otomatis membersihkan objek yang tidak terpakai. Sebuah objek yang tidak terpakai jika program tidak memiliki referensi lebih dari itu. Kamu secara eksplisit bisa drop referensi dengan variabel memegang referensi