JavaRush /Java Blog /Random-ID /Rehat kopi #121. Apa itu Classpath di Java dan bagaimana ...

Rehat kopi #121. Apa itu Classpath di Java dan bagaimana cara menginstalnya? Kekekalan di Jawa

Dipublikasikan di grup Random-ID

Apa itu Classpath di Java dan bagaimana cara menginstalnya?

Sumber: Medium Mengetahui dasar-dasar pemrograman dan alur eksekusi file program membantu kita memahami suatu bahasa. Mengetahui parameter Classpath adalah salah satu konsep dasar yang harus diketahui oleh setiap pengembang Java. Hari ini kita akan membahas apa itu jalur kelas ( Classpath ), cara mengaturnya, dan cara membantu JVM mengeksekusi file kelas. Rehat kopi #121.  Apa itu Classpath di Java dan bagaimana cara menginstalnya?  Kekekalan di Java - 1

Apa itu Jalur Kelas?

Classpath adalah salah satu parameter dasar di Java, namun sering disalahpahami oleh pendatang baru dalam pemrograman. Untuk menyederhanakan, Classpath hanyalah sekumpulan jalur di mana compiler Java dan JVM harus menemukan kelas yang diperlukan untuk mengkompilasi atau mengeksekusi kelas lain.

Bagaimana Classpath membantu JVM dalam mengeksekusi file kelas

Mari kita mulai dengan sebuah contoh. Anggaplah kita memiliki file Main.java yang terletak di 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");
    }
}
Katakanlah kita berada di /Users/vikram/Documents dan ingin mengkompilasi kelas ini:
javac test-java/src/com/programming/v1/Main.java
Sekarang, untuk mengeksekusi file kelas ini, kita perlu memberi tahu Java Virtual Machine di mana mencari file .class menggunakan classpath atau flag cp pada perintah 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 adalah folder root tempat paket ditulis. Parameter kedua adalah nama paket dengan nama kelasnya. Ketika perintah Java dijalankan, Mesin Virtual Java mencari di folder test-java/src dan kemudian memuat kelas utama untuk menjalankannya.

Cara mengatur variabel Classpath

Variabel Classpath dapat diatur seperti yang ditunjukkan di bawah ini pada mesin Linux:
export CLASSPATH="test-java/src"
Classpath pada mesin Windows dapat ditambahkan/diperbarui menggunakan variabel lingkungan. Setelah variabel lingkungan disetel, perintah java dapat dijalankan seperti yang ditunjukkan di bawah ini:
vg@lp1 Documents % java com.programming.v1.Main
Hello classpath
Hanya itu yang perlu diketahui tentang Classpath . Terima kasih telah membaca!

Kekekalan di Jawa

Sumber: Variabel Medium di Java ada dua jenis: primitif dan referensi. Segala sesuatu di Java diteruskan berdasarkan nilai, tetapi dalam kasus tipe referensi, data sumber dapat diperbarui menggunakan alamat memori yang diteruskan. Rehat kopi #121.  Apa itu Classpath di Java dan bagaimana cara menginstalnya?  Kekekalan di Java - 2Kata kunci terakhir digunakan untuk membuat variabel bertindak sebagai konstanta, yaitu menghindari penugasan ulang. Ini bekerja dengan baik untuk primitif yang tidak memiliki memori heap, sedangkan untuk tipe referensi hanya penugasan ulang yang dibatasi dan keadaan internal dapat diubah. Hal ini dapat menyebabkan banyak masalah konkurensi dan kondisi balapan. Oleh karena itu, memasukkan karakteristik yang tidak dapat diubah ke dalam tipe reguler di Java memberikan banyak manfaat.

Manfaat Kekekalan di Java

1. Keamanan benang

Tipe yang tidak dapat diubah kebal terhadap kondisi balapan di lingkungan multi-utas karena objek akan tetap konsisten setelah dibuat. Beberapa thread tidak dapat mengubah status internalnya, sehingga sinkronisasi tidak diperlukan.

2. Tipe dasar

String di Perpustakaan Standar Java adalah contoh kelas dasar yang bagus. Ini adalah kelas yang sangat sederhana dan tidak dapat diubah yang dapat digunakan untuk membangun domain logika bisnis di atasnya. Demikian pula, tipe yang tidak dapat diubah dapat bertindak sebagai tipe dasar yang bagus untuk dibangun.

Karakteristik

1. Bidang Privat dan Final

Bidang yang berisi status suatu objek adalah private dan final . Visibilitas pribadi mencegah akses langsung ke lapangan, sedangkan visibilitas akhir memastikan bahwa lapangan ditugaskan hanya sekali.

2. Tidak ada metode pengubah

Bidang privat tidak dapat diakses di luar kelas. Biasanya, metode akses (pengambil) dan metode pengubah (penyetel), masing-masing, disediakan untuk membaca dan menulis ke bidang. Untuk memastikan konsistensi, pengubah tidak diperbolehkan.

3. Kelas terakhir

Mengizinkan pewarisan kelas dapat merusak kekekalan. Subkelas yang memperluas kelas yang tidak dapat diubah dapat memengaruhi keadaan suatu objek. Oleh karena itu, kelas ini bersifat final .

4. Salinan Defensif

Selama pembuatan objek, alih-alih menugaskan argumen dari konstruktor langsung ke bidang privat, membuat salinan dalam (atau salinan yang tidak dapat diubah) dari argumen tersebut akan memberikan modifikasi eksternal. Jika salah satu argumen adalah tipe referensi, argumen tersebut dapat dengan mudah dimanipulasi oleh pihak pemanggil. Membuat salinan pelindung memungkinkan Anda menghindari manipulasi ini. Demikian pula, bagi pengakses (pengambil), alih-alih mereferensikan bidang internal secara langsung, salinannya dapat dibagikan secara bebas.

Penerapan

Karyawan

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 bidang memiliki salinan pelindung di konstruktornya. Ini karena id bersifat primitif dan bidang name serta joinDate adalah tipe yang tidak dapat diubah. Mereka tidak dapat diubah oleh pemanggil dan tidak akan berubah, sedangkan bidang pencapaian memerlukan salinan argumen yang dibuat menggunakan metode List.copyOf . Ini karena copyOf mengembalikan List yang tidak dapat diubah .

  • Demikian pula, metode pengakses mengembalikan bidang secara langsung daripada salinan defensif karena semua jenis bidang tidak dapat diubah (termasuk prestasi ) dan oleh karena itu tidak dapat diubah di luar kelas.

Perbaikan

Sebelum Jawa 16

Implementasi Karyawan dapat ditingkatkan dengan perpustakaan seperti Lombok . Hal ini mengurangi verbositas dalam kode dan membuatnya terlihat lebih rapi. Perpustakaan dilengkapi dengan anotasi untuk mempersingkat kode standar. @Value (anotasi) dapat digunakan untuk membuat getter dan konstruktor untuk semua argumen. Hal ini juga menciptakan kelas final dan bidang privat dan final . Sebagai catatan, ini juga menghasilkan metode toString , equal dan hashCode . Implementasi Karyawan dapat ditulis ulang menggunakan @Value seperti yang ditunjukkan di bawah ini:
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 yang lebih baru

Rilis Java 16 memperkenalkan fitur Rekam baru . Ini (seperti yang dinyatakan oleh JEP) adalah kelas yang bertindak sebagai pembawa data abadi yang transparan dan dapat dianggap sebagai tupel nominal. Kelas Employee dapat diimplementasikan kembali sebagai record Employee seperti yang ditunjukkan di bawah ini.
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);
    }
}

Kekurangan

Satu-satunya masalah dengan kekekalan adalah memori tambahan dan pemrosesan yang memerlukan modifikasi kecil sekalipun. Setiap kali Anda perlu membuat objek baru, yang bisa sangat mahal. Untuk mengatasi kelemahan ini, Anda dapat menerapkan mekanisme seperti caching dan menyimpan hasil.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION