Apakah itu Classpath dalam Java dan cara memasangnya?
Sumber: Sederhana Mengetahui asas pengaturcaraan dan aliran pelaksanaan fail program membantu kita memahami sesuatu bahasa. Mengetahui parameter Classpath ialah salah satu konsep asas yang perlu diketahui oleh setiap pembangun Java. Hari ini kita akan membincangkan apa itu classpath ( Classpath ), cara menetapkannya dan cara ia membantu JVM melaksanakan fail kelas.Apakah itu Classpath?
Classpath ialah salah satu parameter asas dalam Java, tetapi ia sering disalahertikan oleh pendatang baru dalam pengaturcaraan. Untuk memudahkan, Classpath hanyalah satu set laluan di mana pengkompil Java dan JVM mesti mencari kelas yang diperlukan untuk menyusun atau melaksanakan kelas lain.Bagaimana Classpath membantu JVM dalam melaksanakan fail kelas
Mari kita mulakan dengan contoh. Katakan kita mempunyai fail Main.java yang terletak dalam folder /Users/vikram/Documents/test-java/src/com/programming/v1/Main.java .package com.programming.v1;
public class Main {
public static void main(String[] args) {
System.out.println("Hello classpath");
}
}
Katakan kita berada dalam /Users/vikram/Documents dan ingin menyusun kelas ini:
javac test-java/src/com/programming/v1/Main.java
Sekarang, untuk melaksanakan fail kelas ini, kita perlu memberitahu Mesin Maya Java tempat untuk mencari fail .class menggunakan classpath atau bendera cp dalam arahan java .
vg@lp1 Documents % java -cp "test-java/src" com.programming.v1.Main
Hello classpath
vg@lp1 Documents % java -classpath "test-java/src" com.programming.v1.Main
Hello classpath
Parameter pertama ialah folder akar tempat pakej ditulis. Parameter kedua ialah nama pakej dengan nama kelas. Apabila arahan Java dilaksanakan, Mesin Maya Java melihat dalam folder test-java/src dan kemudian memuatkan kelas utama untuk melaksanakannya.
Bagaimana untuk menetapkan pembolehubah Classpath
Pembolehubah Classpath boleh ditetapkan seperti yang ditunjukkan di bawah pada mesin Linux:export CLASSPATH="test-java/src"
Classpath pada mesin Windows boleh ditambah/kemas kini menggunakan pembolehubah persekitaran. Setelah pembolehubah persekitaran ditetapkan, arahan java boleh dilaksanakan seperti yang ditunjukkan di bawah:
vg@lp1 Documents % java com.programming.v1.Main
Hello classpath
Itu sahaja yang perlu diketahui tentang Classpath . Terima kasih kerana membaca!
Ketidakbolehubahan di Jawa
Sumber: Pembolehubah Sederhana di Jawa terdiri daripada dua jenis: primitif dan rujukan. Segala-galanya dalam Java diluluskan mengikut nilai, tetapi dalam kes jenis rujukan, data sumber boleh dikemas kini menggunakan alamat memori yang diluluskan. Kata kunci terakhir digunakan untuk menjadikan pembolehubah bertindak sebagai pemalar, iaitu, mengelakkan penugasan semula. Ini berfungsi dengan baik untuk primitif yang tidak mempunyai memori timbunan, manakala untuk jenis rujukan hanya penugasan semula terhad dan keadaan dalaman boleh diubah. Ini boleh membawa kepada banyak masalah konkurensi dan keadaan perlumbaan. Oleh itu, termasuk ciri tidak berubah dalam jenis biasa di Jawa memberikan banyak faedah.Faedah Keabadian di Jawa
1. Keselamatan benang
Jenis tidak berubah adalah kebal kepada keadaan perlumbaan dalam persekitaran berbilang benang kerana objek akan kekal konsisten selepas ia dicipta. Berbilang benang tidak boleh menukar keadaan dalaman mereka, jadi penyegerakan tidak diperlukan.2. Jenis asas
String dalam Pustaka Standard Java ialah contoh kelas asas yang baik. Ini adalah kelas yang sangat mudah dan tidak berubah yang boleh digunakan untuk membina domain logik perniagaan di atasnya. Begitu juga, jenis tidak berubah boleh bertindak sebagai jenis asas yang hebat untuk dibina.Ciri-ciri
1. Medan Persendirian dan Akhir
Medan yang mengandungi keadaan objek adalah peribadi dan muktamad . Keterlihatan peribadi menghalang akses terus ke medan, manakala keterlihatan akhir memastikan bahawa medan diberikan sekali sahaja.2. Tiada kaedah pengubahsuaian
Medan persendirian tidak boleh diakses di luar kelas. Lazimnya, kaedah capaian (getters) dan kaedah pengubah suai (setters), masing-masing disediakan untuk membaca dan menulis ke medan. Untuk memastikan konsistensi, pengubahsuai tidak dibenarkan.3. Kelas akhir
Membenarkan warisan kelas boleh memecahkan kebolehubah. Subkelas yang memanjangkan kelas tidak berubah boleh menjejaskan keadaan objek. Oleh itu, kelas adalah muktamad .4. Salinan Defensif
Semasa penciptaan objek, bukannya memberikan hujah daripada pembina terus ke medan persendirian, mencipta salinan mendalam (atau salinan tidak boleh ubah) argumen akan menyediakan pengubahsuaian luaran. Jika salah satu hujah ialah jenis rujukan, ia boleh dimanipulasi dengan mudah di hujung pemanggil. Mencipta salinan perlindungan membolehkan anda mengelakkan manipulasi ini. Begitu juga, untuk pengakses (getters), bukannya merujuk terus medan dalaman, salinannya boleh dikongsi secara bebas.Perlaksanaan
Pekerja
import java.time.LocalDate;
import java.util.List;
import static java.util.List.copyOf;
public final class Employee {
private final long id;
private final String name;
private final LocalDate joinDate;
private final List<String> achievements;
public Employee(long id,
String name,
LocalDate joinDate,
List<String> achievements) {
this.id = id;
this.name = name;
this.joinDate = joinDate;
this.achievements = copyOf(achievements);
}
public long getId() {
return id;
}
public String getName() {
return name;
}
public LocalDate getJoinDate() {
return joinDate;
}
public List<String> getAchievements() {
return achievements;
}
}
-
Tidak semua medan mempunyai salinan perlindungan dalam pembina. Ini kerana id adalah primitif dan nama dan medan joinDate adalah jenis yang tidak boleh diubah. Ia tidak boleh ditukar oleh pemanggil dan akan kekal tidak berubah, manakala medan pencapaian memerlukan salinan hujah yang dibuat menggunakan kaedah List.copyOf . Ini kerana copyOf mengembalikan Senarai yang tidak boleh diubah .
-
Begitu juga, kaedah pengakses mengembalikan medan secara langsung dan bukannya salinan defensif kerana semua jenis medan tidak boleh diubah (termasuk pencapaian ) dan oleh itu tidak boleh diubah suai di luar kelas.
Penambahbaikan
Sebelum Java 16
Pelaksanaan Pekerja boleh ditambah baik dengan perpustakaan seperti Lombok . Ini mengurangkan verbositi dalam kod dan membantu ia kelihatan lebih bersih. Perpustakaan dilengkapi dengan anotasi untuk memendekkan kod standard. @Value (anotasi) boleh digunakan untuk mencipta getter dan pembina untuk semua hujah. Ini juga mewujudkan kelas akhir dan medan peribadi dan akhir . Sebagai nota, ia juga menjana kaedah toString , equals dan hashCode . Pelaksanaan Pekerja boleh ditulis semula menggunakan @Value seperti yang ditunjukkan di bawah:import lombok.Value;
import java.time.LocalDate;
import java.util.List;
import static java.util.List.copyOf;
@Value
public class Employee {
long id;
String name;
LocalDate joinDate;
List<String> achievements;
public Employee(long id,
String name,
LocalDate joinDate,
List<String> achievements) {
this.id = id;
this.name = name;
this.joinDate = joinDate;
this.achievements = copyOf(achievements);
}
}
Java 16 dan kemudian
Keluaran Java 16 memperkenalkan fungsi Rekod baharu . Ini (seperti yang dinyatakan oleh JEP) adalah kelas yang bertindak sebagai pembawa telus data tidak berubah dan boleh dianggap sebagai tupel nominal. Kelas Pekerja boleh dilaksanakan semula sebagai Pekerja rekod seperti yang ditunjukkan di bawah.import java.time.LocalDate;
import java.util.List;
import static java.util.List.copyOf;
public record Employee(long id,
String name,
LocalDate joinDate,
List<String> achievements) {
public Employee(long id,
String name,
LocalDate joinDate,
List<String> achievements) {
this.id = id;
this.name = name;
this.joinDate = joinDate;
this.achievements = copyOf(achievements);
}
}
GO TO FULL VERSION