JavaRush /Blog Jawa /Random-JV /Ngopi #121. Apa Classpath ing Jawa lan carane nginstal? I...

Ngopi #121. Apa Classpath ing Jawa lan carane nginstal? Imut ing Jawa

Diterbitake ing grup

Apa Classpath ing Jawa lan carane nginstal?

Sumber: Sedheng Ngerti dhasar pemrograman lan aliran eksekusi file program mbantu kita ngerti basa. Ngerti parameter Classpath minangka salah sawijining konsep dhasar sing kudu dingerteni saben pangembang Java. Dina iki kita bakal ngrembug apa classpath ( Classpath ) iku, carane nyetel, lan carane mbantu JVM nglakokaké file kelas. Ngopi #121.  Apa Classpath ing Jawa lan carane nginstal?  Imut ing Jawa - 1

Apa iku Classpath?

Classpath minangka salah sawijining parameter dhasar ing Jawa, nanging asring disalahake dening wong anyar babagan program. Kanggo nyederhanakake, Classpath mung minangka kumpulan path sing compiler Java lan JVM kudu nemokake kelas sing perlu kanggo ngumpulake utawa nglakokake kelas liyane.

Carane Classpath mbantu JVM ing eksekusi file kelas

Ayo dadi miwiti karo conto. Ayo nganggep kita duwe file Main.java sing dumunung ing 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");
    }
}
Contone, kita ana ing /Users/vikram/Documents lan pengin ngumpulake kelas iki:
javac test-java/src/com/programming/v1/Main.java
Saiki, kanggo nglakokaké file kelas iki, kita kudu ngandhani Java Virtual Machine ngendi kanggo nggoleki file .class nggunakake classpath utawa flag cp ing printah 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 pisanan yaiku folder root ing ngendi paket kasebut ditulis. Parameter kapindho yaiku jeneng paket kanthi jeneng kelas. Nalika printah Jawa dieksekusi, Java Virtual Machine katon ing folder test-java / src banjur mbukak kelas utama kanggo nglakokaké.

Cara nyetel variabel Classpath

Variabel Classpath bisa disetel kaya ing ngisor iki ing mesin Linux:
export CLASSPATH="test-java/src"
Classpath ing mesin Windows bisa ditambahake / dianyari nggunakake variabel lingkungan. Sawise variabel lingkungan disetel, printah java bisa dieksekusi kaya ing ngisor iki:
vg@lp1 Documents % java com.programming.v1.Main
Hello classpath
Iku kabeh sing kudu dingerteni babagan Classpath . Matur nuwun kanggo maca!

Imut ing Jawa

Sumber: Variabel Sedheng ing basa Jawa ana rong jinis yaiku primitif lan referensi. Kabeh ing Jawa liwati dening Nilai, nanging ing cilik saka jinis referensi, data sumber bisa dianyari nggunakake alamat memori liwati. Ngopi #121.  Apa Classpath ing Jawa lan carane nginstal?  Imut ing Jawa - 2Tembung kunci pungkasan digunakake kanggo nggawe variabel tumindak minangka konstanta, yaiku, supaya ora diganti. Iki bisa digunakake kanthi apik kanggo primitif sing ora duwe memori tumpukan, dene kanggo jinis referensi mung reassignment diwatesi lan negara internal bisa diganti. Iki bisa nyebabake akeh masalah konkurensi lan kahanan balapan. Dadi, kalebu ciri sing ora owah ing jinis biasa ing Jawa menehi akeh keuntungan.

Paedah Imbuhan ing Jawa

1. Utas safety

Jinis sing ora bisa diowahi kekebalan kanggo kahanan balapan ing lingkungan multi-thread amarga obyek bakal tetep konsisten sawise digawe. Akeh utas ora bisa ngganti kahanan internal, mula sinkronisasi ora dibutuhake.

2. Jinis dhasar

String ing Pustaka Standar Jawa minangka conto sing apik kanggo kelas dhasar. Iki minangka kelas sing gampang banget lan ora bisa diganti sing bisa digunakake kanggo mbangun domain logika bisnis ing ndhuwur. Kajaba iku, jinis sing ora bisa diganti bisa tumindak minangka jinis dhasar sing apik kanggo dibangun.

Karakteristik

1. Lapangan pribadi lan Final

Kolom sing ngemot status obyek iku pribadi lan final . Visibilitas pribadi ngalangi akses langsung menyang lapangan, dene visibilitas pungkasan njamin yen lapangan ditugasake mung sapisan.

2. Ora ana cara modifier

Lapangan pribadi ora bisa diakses ing njaba kelas. Biasane, metode akses (getters) lan metode modifier (setter), diwenehake kanggo maca lan nulis menyang lapangan. Kanggo mesthekake konsistensi, modifiers ora diijini.

3. Kelas pungkasan

Ngidini warisan kelas bisa ngilangi immutability. A subclass ngluwihi kelas immutable bisa mengaruhi negara obyek. Mulane, kelas pungkasan .

4. Salinan pertahanan

Sajrone nggawe obyek, tinimbang menehi argumen saka konstruktor langsung menyang lapangan pribadi, nggawe salinan jero (utawa salinan sing ora bisa diganti) saka argumen kasebut bakal nyedhiyakake modifikasi eksternal. Yen salah siji argumen minangka jinis referensi, bisa gampang dimanipulasi ing mburi panelpon. Nggawe salinan protèktif ngidini sampeyan ngindhari manipulasi iki. Kajaba iku, kanggo aksesoris (getters), tinimbang langsung ngrujuk lapangan internal, salinan kasebut bisa dituduhake kanthi bebas.

Implementasine

pegawe

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;
    }
}
  • Ora kabeh lapangan duwe salinan protèktif ing konstruktor. Iki amarga id primitif lan jeneng lan kolom joinDate minangka jinis sing ora bisa diganti. Padha ora bisa diganti dening panelpon lan bakal tetep ora diganti, nalika lapangan prestasi mbutuhake salinan argumen digawe nggunakake List.copyOf cara . Iki amarga copyOf ngasilake Daftar sing ora bisa diganti .

  • Kajaba iku, metode accessor ngasilake lapangan kanthi langsung tinimbang salinan defensif amarga kabeh jinis lapangan ora bisa diganti (kalebu prestasi ) lan mulane ora bisa diowahi ing njaba kelas.

dandan

Sadurunge Jawa 16

Implementasi Karyawan bisa ditambah karo perpustakaan kayata Lombok . Iki nyuda verbosity ing kode lan mbantu katon luwih resik. Pustaka dilengkapi karo anotasi kanggo nyepetake kode standar. @Value (anotasi) bisa digunakake kanggo nggawe getter lan konstruktor kanggo kabeh argumen. Iki uga nggawe kelas final lan lapangan pribadi lan final . Minangka cathetan, uga ngasilake toString , equals lan metode hashCode . Implementasi Karyawan bisa ditulis maneh nggunakake @Value kaya ing ngisor iki:
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);
    }
}

Jawa 16 lan mengko

Rilis Java 16 ngenalake fitur Rekam anyar . Iki (kaya sing kasebut JEP) minangka kelas sing tumindak minangka operator transparan data sing ora bisa diganti lan bisa dianggep minangka tuple nominal. Kelas Karyawan bisa dileksanakake maneh minangka karyawan rekaman kaya ing ngisor iki.
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);
    }
}

Cacat

Masalah mung karo immutability yaiku memori lan pangolahan tambahan sing mbutuhake modifikasi cilik. Saben-saben sampeyan kudu nggawe obyek anyar, sing bisa larang banget. Kanggo ngatasi kekurangan iki, sampeyan bisa ngetrapake mekanisme kayata caching lan nyimpen asil.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION