Classpath
Metode jalur dan penulisan kompiler java saat menyusun file .java dan mesin virtual java mengeksekusi file .class berbeda.
Tanpa mengatur variabel lingkungan ClassPath, Javac dapat mengkompilasi file .java jalur penuh. Misalnya:
Javac D: /Myjava/Helloworld.java
Setelah kompilasi, buat file kelas di direktori jalur yang sama.
Mesin virtual Java default perlu mencari file kelas dari jalur variabel lingkungan ClassPath untuk dieksekusi. Untuk mesin virtual Java, ini bukan file kelas, tetapi kelas. Ini hanya memiliki classpaths, tetapi tidak ada jalur sistem file. Variabel lingkungan ClassPath adalah lingkungan yang menyediakan Classpath pencarian untuk mesin virtual Java. Perhatikan bahwa mesin virtual tidak secara rekursif mencari jalur yang ditentukan oleh ClassPath.
Dengan kata lain, file Java di atas dapat dikompilasi dengan benar, tetapi tidak dapat dieksekusi. Tetapi jika ClassPath diatur ke ".; D:/Myjava/", mesin virtual Java pertama -tama akan mencari dari jalur saat ini, dan kemudian mencari file kelas dari D:/Myjava.
Jadi setelah HelloWorld.java di atas dikompilasi, itu dapat dieksekusi secara langsung:
Java Helloworld
Atau beralih ke direktori D:/Myjava dan menjalankan Java HelloWorld.
Tetapi berikut ini adalah cara yang salah. Pada akhirnya, meskipun newdir.java dapat dikompilasi dengan benar, selama eksekusi, ia akan mencari apakah newdir.class tersedia di direktori saat ini (D:/myjava), dan kemudian mencari apakah newdir.class tersedia di class d:/myjava, tetapi tidak akan membalas ke subdirektori Newdir untuk pencarian kelas.
D:/CD MYJAVAJAVAC NEWDIR/NEWDIR.JAVAJAVA NEWDIR
Misalnya, di bawah D:/myjava/halo, ada dua file sumber java, dan isinya adalah sebagai berikut:
D:/myjava/hello cat.java Dog.javacat.java ====================================================================================================================================== Public Class Dog {public static void main (string [] args) {cat c = new Cat (); }}Kelas anjing langsung objek baru dari kelas kucing di file lain. Apakah itu dikompilasi atau dijalankan, ini bisa berhasil, karena kompiler Javac akan secara otomatis mencari cat.class dari jalur yang ditentukan oleh ClassPath saat mengkompilasi dog.java. Ini hanya cara untuk mencari, dan kelas ini adalah kelas publik, sehingga kompilasi berhasil.
Singkatnya, harus jelas bahwa kompiler Javac mencari jalur file, yang tidak ada hubungannya dengan classpath variabel lingkungan. Mesin virtual Java mencari file kelas, secara ketat, kelas, dan jalur pencarian ditentukan oleh classpath variabel lingkungan dan memiliki urutan.
Untuk lebih banyak deskripsi ClassPath, lihat "Paket" di bawah ini.
Kemasan
Paket adalah koleksi kelas. Tulis kata kunci paket pada baris pertama file sumber java (tidak termasuk baris komentar atau baris kosong) dan berikan nama paket, Anda dapat memasukkan file kelas ke dalam paket.
Misalnya, file d: /myjava/cat.java:
Paket com.longshuai.home; kelas publik kucing {public static void main (string [] args) {System.out.println ("com.longshuai.home.cat"); }}Ini berarti menempatkan kelas kucing di paket com.longshuai.home. Paket harus dinamai nama domain terbalik untuk mencegah nama duplikat paket dari yang bertentangan, tentu saja, ini tidak perlu.
Untuk file sumber yang tidak menggunakan arahan paket, kelas di dalamnya akan dianggap sebagai "kelas telanjang" secara default selama kompilasi.
Metode Paket Manajemen Java dikelola di tingkat direktori yang sesuai dengan nama paket. Misalnya, paket com.longshuai.home di atas harus ditempatkan di bawah com/longshuai/home (jika itu windows, backslash), yaitu, com/longshuai/home/cat.class.
Javac mencari file dari jalur pada waktu kompilasi. Misalnya, letakkan cat.java ini di bawah com/longshuai/rumah. Saat mengeksekusi, mesin virtual Java mencari file kelas yang akan dimuat dari Classpath, dan cara memuat kelas adalah menggunakan "." Untuk menghubungkan berbagai jenis nama. Oleh karena itu, metode untuk menyusun file ini dan menjalankan file ini oleh Java Virtual Machine adalah:
Javac com/longshuai/home/cat.javajava com.longshuai.home.cat
Perhatikan bahwa tidak ada hubungan antara paket bersarang, seperti paket java.util dan paket java.util.jar tidak memiliki dependensi.
Gunakan kelas dalam paket paket dan impor (impor)
Dalam file sumber Java, kelas dalam file lain tidak dapat digunakan secara langsung, kecuali kelas yang ingin Anda gunakan dapat dicari oleh jalur ClassPath. Untuk merujuk kelas lain yang bukan Classpath, Anda hanya dapat menambahkannya ke Classpath atau memuatnya ke dalam paket dan kemudian merujuk ke kelas dalam paket.
Referensi ke kelas dalam paket dapat dirujuk dengan menentukan nama paket. Misalnya:
com.longshuai.home.cat c = com.longshuai.home.cat () baru;
Tapi jelas ini tidak nyaman. Anda dapat menggunakan Petunjuk Impor untuk mengimpor kelas dalam paket yang perlu Anda gunakan di beberapa baris pertama file sumber Java (tetapi setelah perintah paket). Misalnya, impor kelas kucing, sehingga Anda dapat menggunakan kelas secara langsung:
impor com.longshuai.home.cat; kucing c = kucing baru ();
Saat mengimpor paket, Anda dapat menggunakan tanda bintang "*" di akhir untuk mencocokkan semua kelas yang diimpor, dan hanya menggunakan "*" di akhir, karena "*" cocok dengan nama kelas, bukan nama paket. Oleh karena itu, simbol "*" tidak dapat digunakan di non-end untuk menunjukkan kelas dalam paket lain, seperti:
impor com.longshuai.home.*; // Impor semua kelas di paket com.longshuai.home impor com.longshuai.*; // Impor semua kelas dalam paket com.longshuai, tetapi kelas -kelas di com.longshuai.home tidak akan diimpor, // karena meskipun ada sarang di antara level, paket -paket ini tidak memiliki hubungan impor com.*.*; // Ini adalah cara yang salah untuk menulisnya
Jika ada kelas dengan nama yang sama dalam paket yang diimpor, kesalahan yang bertentangan akan terjadi ketika mengacu pada kelas dengan nama yang sama. Misalnya, ada kelas tanggal dalam paket java.util dan java.sql.
impor java.util.*; impor java.sql.*; tes kelas publik {public static void main (string [] args) {date hari ini = tanggal baru (); }}Kompilasi:
Javac test.javatest.java:11: Kesalahan: Referensi ke tanggal tidak jelas hari ini = Tanggal baru (); ^ Kelas java.sql.date di java.sql dan kelas java.util.date di java.util keduanya pertandingan tes.java:11: kesalahan: referensi hingga tanggal tidak jelas tanggal hari ini = tanggal baru (); ^ Kelas java.sql.date di java.util dan kelas java.util keduanya cocok 2 kesalahan
Pada saat ini, Anda dapat secara eksplisit mengimpor kelas tanggal, atau menentukan nama paket saat menggunakan kelas tanggal. Artinya, dua metode berikut ini benar:
// Metode 1: Impor java.util.*; Impor java.sql.*; Impor java.util.date; // metode 2: impor java.util.*; Impor java.sql.*; Tes kelas publik {public static void main (string [] args) {java.util.date hari ini = hari ini = hari ini = java.date.date hari ini = java.date. }}Selain mengimpor kelas dalam paket, Anda juga dapat metode statis dan variabel statis di kelas dalam paket. Cukup tambahkan kata kunci statis dan tentukan apa yang harus diimpor. Misalnya:
impor statis java.lang.system.*; impor statis java.lang.system.out;
Setelah metode impor statis, awalan dapat dihilangkan, misalnya:
Impor statis java.lang.system.out; kelas publik className {public static void main () {out.println ("helloWorld"); // setara dengan system.out.println ("helloWorld"); }}Paket Arsip ke dalam Paket JAR
Mesin virtual Java dapat secara langsung mengenali paket JAR. Anda dapat mengarsipkan jalur yang sesuai dengan nama paket ke dalam paket JAR menggunakan perintah JAR. Instruksi untuk menggunakan perintah JAR adalah sebagai berikut:
Penggunaan JAR: JAR {CTXUI} [VFMN0PME] [JAR -FILE] [manifest -file] [entri -point] [-c dir] File ... opsi: -c membuat file -t Daftar arsip -t yang disusun -s. File manifes yang ditentukan -n Setelah membuat file baru, lakukan pack200 normalisasi -e Tentukan titik masuk aplikasi untuk aplikasi mandiri yang dibundel ke file jar saja yang dapat dieksekusi -0 hanya; Jangan gunakan kompresi zip -p apa pun -P mempertahankan komponen '/' (jalur absolut) dan ".." (direktori induk) -M tidak membuat file manifes untuk entri -i adalah informasi indeks pembuatan file JAR yang ditentukan -C perubahan ke direktori yang ditentukan dan berisi file -file berikut jika ada file yang merupakan direktori, diproses secara berulang. Urutan nama file manifes yang ditentukan, nama file arsip, dan nama titik masuk sama dengan tag 'm', 'f' dan 'e'.Misalnya, paket A.Class dan B.Class di direktori saat ini ke dalam test.jar:
Jar CVF Test.Jar A.Class B.Class
Periksa daftar file dalam paket JAR dan akan ditampilkan secara rekursif:
jar -tf test.jarmeta-inf/meta-inf/manifest.mfjiecheng.class
Misalnya, arsipkan direktori com ke dalam d: /dp.jar.
jar cvf d:/dp.jar com/Added manifest is being added: com/(input=0) (output=0) (storage 0%)Added: com/longshuai/(input=0) (output=0) (storage 0%)Added: com/longshuai/home/(input=0) (output=0) (storage 0%)Added: com/longshuai/home/Bird.class (input=420) (output = 291) (dikompresi 30%) ditambahkan: com/longshuai/home/bird.java (input = 136) (output = 100) (dikompresi 26%) ditambahkan: com/longshuai/home/cat.class (input = 417) (output = 289) (dikompresi oleh 30%) adding: com/com/homeAd. 99) (dikompres 26%)
Dengan file JAR, Anda dapat langsung mengatur jalur ClassPath ke nama file JAR, sehingga saat mencari file kelas, Anda akan langsung mencari dari file JAR. Misalnya, ClassPath diatur ke:
.; D:/myjava; d: /dp.jar
Mekanisme pencarian kelas
Saat mencari file kelas di mesin virtual Java, selain jalur yang ditentukan oleh variabel lingkungan ClassPath, dua jalur default akan dicari terlebih dahulu: JRE/LIB dan JRE/LIB/EXT, kelas yang tampaknya dicari dalam file JAR di bawah JRE/Lib/ext.
Misalnya, ketika ClassPath diatur ke ".; D:/myjava; d: /myjar.jar", Anda ingin mencari file kelas com.longshuai.com.cat:
(A). Pencarian pertama file JAR di bawah JRE/LIB dan JRE/LIB/EXT;
(B) .Sarch apakah ada com/longshuai/com/cat.class di direktori saat ini;
(c) .Search D: /Myjava/cat.class lagi;
(D) .Sarch apakah ada kelas com.longshuai.com di dalam file d: /myjar.jar.
Jika suatu kelas dirujuk dalam file sumber Java, pada waktu kompilasi, metode berikut akan digunakan untuk menentukan apakah kelasnya masuk akal dan valid:
(1). Cari apakah kelas paket yang diimpor berisi kelas.
(2). Cari paket Java.lang yang diimpor secara implisit, yang diimpor secara default.
(3). Apakah kelas ini didefinisikan dalam file saat ini.
(4). Cari apakah kelas ada di dalamnya sesuai dengan aturan pencarian classpath ((a)-(d)).
mewarisi
Logika semantik "apa yang" dapat tercermin antar kelas, sehingga warisan kelas dapat direalisasikan. Misalnya, kucing adalah hewan, maka kucing dapat mewarisi kelas hewan, sedangkan kelas kucing disebut subclass dan kelas hewan disebut kelas induk.
Setelah subclass mewarisi kelas induk, subclass memiliki semua anggota kelas induk, termasuk variabel dan metode anggota. Bahkan, dalam memori, ketika objek subclass baru digunakan, bagian dari area dibagi menjadi tumpukan untuk menyimpan atribut yang diwarisi dari kelas induk. Misalnya, area A yang diperoleh oleh orang tua baru, area B yang diperoleh oleh anak baru, dan area A berada di area B.
Alasan mengapa objek anak berisi objek induk adalah bahwa ketika anak baru objek, objek anak pertama kali dipanggil untuk membangun objek anak, dan ketika mulai membangun objek anak, konstruktor kelas induk pertama kali dipanggil untuk membangun objek induk. Dengan kata lain, sebelum membentuk objek anak, objek induk selalu terbentuk terlebih dahulu, dan kemudian perlahan -lahan melengkapi atribut dalam objek anak. Untuk konten tertentu, lihat "Tulis ulang super () dari metode konstruksi selama warisan".
Subkelas tidak hanya memiliki anggota kelas induk, tetapi juga memiliki anggota uniknya sendiri, seperti metode sendiri dan variabel anggotanya sendiri. Sangat mudah untuk dipahami bahwa nama anggota di subkelas dan kelas orang tua berbeda, tetapi mereka juga mungkin memiliki nama yang sama. Jika ada metode dengan nama yang sama yang diwarisi dari kelas induk dalam subkelas , seperti kelas induk memiliki metode EAT () dan kelas anak juga memiliki metode EAT (), maka ini mungkin merupakan penulisan ulang metode (lihat di bawah). Jika variabel anggota dalam subkelas dan variabel anggota kelas induk memiliki nama yang sama, mereka tidak tergantung satu sama lain . Misalnya, kelas induk memiliki atribut nama, dan subkelas juga mendefinisikan atribut nama itu sendiri, yang diizinkan karena mereka dapat dipanggil menggunakan ini dan super masing -masing.
Gunakan kata kunci Extends saat mewarisi kelas. Saat mewarisi, Java hanya memungkinkan warisan dari satu kelas induk.
class person {string name; usia int; void eat () {System.out.println ("Eating ...");} void sleep () {System.out.println ("Sleep ...");}} kelas siswa memperluas orang {int studentId; Siswa (int id, nama string, int usia) {this.name = name; this.age = usia; this.studentId = id; } void study () {System.out.println ("Studing ...");}} Public Class warisan {public static void main (string [] args) {student S1 = siswa baru (1, "Malongshuai", 23); System.out.println (S1.StudentID+","+S1.Name+","+S1.age); s1.eat (); s1.sleep (); s1.study (); }}Contoh penjelasan di atas berdasarkan Java ClassPath ClassPath dan paket adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.