JavaRush /Java Blog /Random-TK /Kofe arakesmesi # 121 Java-da “Classpath” näme we ony näd...

Kofe arakesmesi # 121 Java-da “Classpath” näme we ony nädip gurmaly? Java-da üýtgewsizlik

Toparda çap edildi

Java-da “Classpath” näme we ony nädip gurmaly?

Çeşme: Ortaça programmirlemegiň esaslaryny we programma faýllarynyň ýerine ýetiriş akymyny bilmek, bir dile düşünmäge kömek edýär. “Classpath” parametrini bilmek, her Java döredijiniň bilmeli esasy düşünjelerinden biridir. Bu gün synp ýolunyň ( Classpath ) nämedigini, ony nädip düzmelidigini we JVM-iň synp faýllaryny ýerine ýetirmegine nähili kömek etjekdigini ara alyp maslahatlaşarys .Kofe arakesmesi # 121  Java-da “Classpath” näme we ony nädip gurmaly?  Java-da üýtgewsizlik - 1

Klasspath näme?

“Classpath” “Java” -yň esasy parametrlerinden biridir, ýöne programmirlemek üçin täze gelenler köplenç ýalňyş düşünýärler. Simplönekeýleşdirmek üçin “Classpath” diňe Java düzüjisi we JVM beýleki synplary düzmek ýa-da ýerine ýetirmek üçin zerur sapaklary tapmaly ýollaryň toplumydyr .

“Classpath” JVM-e synp faýllaryny ýerine ýetirmekde nähili kömek edýär

Bir mysal bilen başlalyň. /Users/vikram/Documents/test-java/src/com/programming/v1/Main.java bukjasynda ýerleşýän Main.java faýlymyz bar diýip pikir edeliň .
package com.programming.v1;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello classpath");
    }
}
Geliň / Ulanyjylar / vikram / Resminamalar we bu synpy düzmek isleýäris:
javac test-java/src/com/programming/v1/Main.java
Indi bu synp faýlyny ýerine ýetirmek üçin Java wirtual maşynyna synp ýoluny ýa-da java buýrugynda cp baýdagyny ulanyp .class faýly nireden gözlemelidigini aýtmalydyrys .
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
Birinji parametr, bukjanyň ýazylan kök bukjasydyr. Ikinji parametr, synpyň ady bilen paketiň ady. Java buýrugy ýerine ýetirilende, Java wirtual maşyn test-java / src bukjasyna seredýär we ýerine ýetirmek üçin esasy synpy ýükleýär.

“Classpath” üýtgeýjisini nädip düzmeli

“Classpath” üýtgeýjisini Linux maşynlarynda aşakda görkezilişi ýaly düzüp bolýar:
export CLASSPATH="test-java/src"
Windows enjamyndaky synp ýoly daşky gurşaw üýtgeýjilerini ulanyp goşup / täzeläp bolýar. Daşky gurşaw üýtgeýjisi kesgitlenenden soň, java buýrugy aşakda görkezilişi ýaly ýerine ýetirilip bilner:
vg@lp1 Documents % java com.programming.v1.Main
Hello classpath
“Classpath” hakda bilmeli zatlaryň hemmesi . Okanyňyz üçin sag boluň!

Java-da üýtgewsizlik

Çeşme: Java-da orta üýtgeýjiler iki görnüşlidir: başlangyç we salgylanma. Java-daky hemme zat bahadan geçýär, ýöne salgylanma görnüşleri boýunça çeşme maglumatlary geçen ýat adresi arkaly täzelenip bilner. Iň soňkyKofe arakesmesi # 121  Java-da “Classpath” näme we ony nädip gurmaly?  Java-da üýtgewsizlik - 2 açar söz üýtgeýjini hemişelik hereket etmek üçin, ýagny başga birine bellemezlik üçin ulanylýar. Bu üýşmeleň ýady bolmadyk primitiwler üçin gowy işleýär, salgylanma görnüşleri üçin diňe bellemek çäklidir we içerki ýagdaý üýtgedilip bilner. Bu köp ylalaşyk meselelerine we ýaryş şertlerine sebäp bolup biler. Şeýlelik bilen, Java-da yzygiderli görnüşde üýtgewsiz aýratynlyklary goşmak köp peýdalary üpjün edýär.

Java-da üýtgewsizligiň peýdalary

1. Sapagyň howpsuzlygy

Üýtgemeýän görnüşler köp sapakly gurşawda ýaryş şertlerine garşydyr, sebäbi obýekt döredilenden soň yzygiderli galar. Birnäçe sapak içerki ýagdaýyny üýtgedip bilmez, şonuň üçin sinhronizasiýa hökmany däl.

2. Esasy görnüşi

Java standart kitaphanasynda setir esasy synpyň gowy mysalydyr. Munuň üstünde işewür logika domenlerini gurmak üçin ulanyp boljak gaty ýönekeý we üýtgewsiz synp. Edil şonuň ýaly-da, üýtgewsiz görnüş guruljak ajaýyp esasy görnüş hökmünde çykyş edip biler.

Aýratynlyklary

1. Hususy we jemleýji meýdanlar

Obýektiň ýagdaýyny öz içine alýan meýdanlar şahsy we ahyrky . Şahsy görünmek meýdana gönüden-göni girmegiň öňüni alýar, iň soňky görnüklilik bolsa meýdanyň diňe bir gezek berilmegini üpjün edýär .

2. Üýtgediji usul ýok

Hususy meýdança sapakdan daşary girip bolmaýar. Adatça, meýdanlara okamak we ýazmak üçin giriş usullary (getterler) we üýtgediji usullar (sazlaýjylar) berilýär. Yzygiderliligi üpjün etmek üçin üýtgedijilere rugsat berilmeýär.

3. Jemleýji synp

Synp mirasyna rugsat bermek üýtgewsizligi bozup biler. Üýtgemeýän synpy uzaldýan kiçi klas obýektiň ýagdaýyna täsir edip biler. Şonuň üçin synp gutarnykly .

4. Gorag nusgalary

Obýekt döredilende, konstruktordan argumentleri gönüden-göni hususy meýdanlara bellemegiň ýerine, argumentleriň çuň göçürmesini (ýa-da üýtgewsiz göçürmesini) döretmek daşarky üýtgeşmeleri üpjün eder. Argumentleriň biri salgylanma görnüşi bolsa, jaň edeniň soňunda aňsatlyk bilen dolandyrylyp bilner. Gorag nusgalaryny döretmek bu manipulýasiýanyň öňüni almaga mümkinçilik berýär. Şonuň ýaly-da, girýänler (girýänler) üçin içerki meýdany gönüden-göni görkezmegiň ýerine, onuň bir nusgasy erkin paýlaşylyp bilner.

Durmuşa geçirmek

Işgär

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;
    }
}
  • Fieldshli meýdanlarda konstruktorda gorag nusgalary ýok. Sebäbi id başlangyç we ady we joinDate meýdanlary üýtgewsiz görnüşlerdir. Çagyrýan tarapyndan üýtgedilip bilinmez we üýtgemez, üstünlikler meýdany List.copyOf usuly bilen edilen argumentiň göçürmesini talap edýär . Sebäbi copyOf üýtgewsiz sanawy yzyna berýär .

  • Edil şonuň ýaly-da, aksesuar usullary gorag nusgalaryna däl-de, göni meýdanlara gaýdyp gelýär, sebäbi ähli meýdan görnüşleri üýtgewsiz ( üstünlikleri hem goşmak bilen ) we şonuň üçin synpyň daşynda üýtgedilip bilinmez.

Gowulaşmalar

Java 16-dan öň

Lombok ýaly kitaphanalar bilen işgäriň durmuşa geçirilmegi gowulaşyp biler . Bu koddaky sözliligi peseldýär we has arassa görünmegine kömek edýär. Kitaphana adaty kody gysgaltmak üçin düşündirişler bilen gelýär. @Value (annotasiýa) ähli argumentler üçin girdeji we konstruktor döretmek üçin ulanylyp bilner. Bu, şeýle hem, soňky synpy we hususy we soňky meýdanlary döredýär . Bellik hökmünde, şeýle hem , String , deň we hashCode usullaryny döredýär . Işgäriň ýerine ýetirilişi, aşakda görkezilişi ýaly @Value ulanyp täzeden ýazylyp bilner :
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 we soňraky

Java 16 çykarylyşy täze Recordazgy funksiýasyny hödürledi . Bular (JEP-iň aýdyşy ýaly) üýtgewsiz maglumatlaryň aýdyň göterijisi hökmünde çykyş edýän we nominal toplar diýip pikir edip boljak synplardyr. Işgär synpy, aşakda görkezilişi ýaly, işgäri hökmünde täzeden durmuşa geçirilip bilner .
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);
    }
}

Kemçilikler

Üýtgemezlik bilen ýeke-täk mesele, hatda kiçijik üýtgeşme hem talap edýän goşmaça ýat we gaýtadan işlemekdir. Her gezek gaty gymmat bolup biljek täze bir obýekt döretmeli. Bu kemçiligi çözmek üçin keş keşde saklamak we netijeleri tygşytlamak ýaly mehanizmleri durmuşa geçirip bilersiňiz.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION