JavaRush /Blog Java /Random-MS /Coffee break #121. Apakah itu Classpath dalam Java dan ca...

Coffee break #121. Apakah itu Classpath dalam Java dan cara memasangnya? Ketidakbolehubahan di Jawa

Diterbitkan dalam kumpulan

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. Coffee break #121.  Apakah itu Classpath dalam Java dan cara memasangnya?  Ketidakbolehubahan di Jawa - 1

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. Coffee break #121.  Apakah itu Classpath dalam Java dan cara memasangnya?  Ketidakbolehubahan di Jawa - 2Kata 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);
    }
}

Kecacatan

Satu-satunya masalah dengan kebolehubahan ialah memori tambahan dan pemprosesan yang walaupun pengubahsuaian kecil memerlukan. Setiap kali anda perlu mencipta objek baru, yang boleh menjadi sangat mahal. Untuk mengatasi kelemahan ini, anda boleh melaksanakan mekanisme seperti caching dan menyimpan hasil.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION