JavaRush /Блоги Java /Random-TG /Кофе-брейк №121. Classpath дар Java чист ва чӣ гуна онро ...

Кофе-брейк №121. Classpath дар Java чист ва чӣ гуна онро насб кардан мумкин аст? Тағирнопазирӣ дар Java

Дар гурӯҳ нашр шудааст

Classpath дар Java чист ва чӣ гуна онро насб кардан мумкин аст?

Сарчашма: Миёна Донистани асосҳои барномасозӣ ва ҷараёни иҷрои файлҳои барнома ба мо кӯмак мекунад, ки забонро фаҳмем. Донистани параметри Classpath яке аз мафҳумҳои асосиест, ки ҳар як таҳиягари Java бояд донад. Имрӯз мо муҳокима хоҳем кард, ки роҳи синф ( Classpath ) чист, он чӣ гуна гузошта мешавад ва чӣ тавр он ба JVM дар иҷрои файлҳои синф кӯмак мекунад. Кофе-брейк №121.  Classpath дар Java чист ва чӣ гуна онро насб кардан мумкин аст?  Тағирнопазирӣ дар Java - 1

Classpath чист?

Classpath яке аз параметрҳои асосӣ дар Java аст, аммо аксар вақт аз ҷониби навгониҳо ба барномасозӣ нодуруст фаҳмида мешавад. Барои содда кардан, Classpath танҳо маҷмӯи роҳҳост , ки дар онҳо компилятори Java ва JVM бояд синфҳои заруриро барои тартиб додан ё иҷро кардани синфҳои дигар пайдо кунанд.

Чӣ гуна Classpath ба JVM дар иҷрои файлҳои синф кӯмак мекунад

Биёед бо як мисол оғоз кунем. Фарз мекунем, ки мо файли Main.java дорем, ки дар папкаи /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");
    }
}
Фарз мекунем, ки мо дар /Users/vikram/Documents ҳастем ва мехоҳем ин синфро тартиб диҳем:
javac test-java/src/com/programming/v1/Main.java
Ҳоло, барои иҷрои ин файли синфӣ, мо бояд ба мошини виртуалии Java бигӯем, ки файли .class -ро бо истифода аз classpath ё парчами cp дар фармони 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
Параметри аввал папкаи реша аст, ки дар он баста навишта шудааст. Параметри дуюм номи баста бо номи синф мебошад. Вақте ки фармони Java иҷро мешавад, Мошини виртуалии Java ба папкаи test-java/src назар мекунад ва сипас барои иҷрои он синфи асосиро бор мекунад.

Чӣ тавр танзим кардани тағирёбандаи Classpath

Тағйирёбандаи Classpath- ро метавон тавре танзим кард, ки дар зер дар мошинаҳои Linux нишон дода шудааст:
export CLASSPATH="test-java/src"
Classpath дар мошини Windows метавонад бо истифода аз тағирёбандаҳои муҳити зист илова/навсозӣ карда шавад. Вақте ки тағирёбандаи муҳити зист муқаррар карда мешавад, фармони java метавонад тавре иҷро карда шавад, ки дар зер нишон дода шудааст:
vg@lp1 Documents % java com.programming.v1.Main
Hello classpath
Ин ҳама чизест, ки дар бораи Classpath донист . Ташаккур барои хондан!

Тағирнопазирӣ дар Java

Сарчашма: Тағирёбандаҳои миёна дар Java ду намуд доранд: ибтидоӣ ва истинод. Ҳама чиз дар Java аз рӯи арзиш интиқол дода мешавад, аммо дар сурати навъҳои истинод, маълумоти манбаъро бо истифода аз суроғаи хотираи додашуда навсозӣ кардан мумкин аст. Кофе-брейк №121.  Classpath дар Java чист ва чӣ гуна онро насб кардан мумкин аст?  Тағирнопазирӣ дар Java - 2Калимаи калидӣ барои он истифода мешавад, ки тағирёбанда ҳамчун доимӣ амал кунад, яъне аз дигар таъинот пешгирӣ карда шавад. Ин барои ибтидоӣ, ки хотираи тӯб надоранд, хуб кор мекунад, дар ҳоле ки барои намудҳои истинод танҳо таъини дубора маҳдуд аст ва ҳолати дохorро метавон тағир дод. Ин метавонад ба бисёр мушкилоти ҳамзамон ва шароити мусобиқа оварда расонад. Ҳамин тариқ, аз ҷумла хусусиятҳои тағирнашаванда дар намуди муқаррарӣ дар Java манфиатҳои зиёд фароҳам меорад.

Манфиатҳои тағирнопазирӣ дар Java

1. Бехатарии ришта

Навъҳои тағирнашаванда аз шароити нажод дар муҳити чанд ришта эмин ҳастанд, зеро an object пас аз эҷоди он пайваста боқӣ мемонад. Риштаҳои сершумор ҳолати дохorи худро тағир дода наметавонанд, аз ин рӯ ҳамоҳангсозӣ талаб карда намешавад.

2. Навъи асосӣ

Сатр дар китобхонаи стандартии Java намунаи хуби синфи асосӣ мебошад. Ин як синфи хеле содда ва тағирнопазир аст, ки метавонад барои сохтани доменҳои мантиқии тиҷорӣ дар болои он истифода шавад. Ба ҳамин монанд, як навъи тағирнашаванда метавонад ҳамчун як намуди асосии асосӣ, ки дар он сохта мешавад, амал кунад.

Хусусиятҳо

1. Майдонҳои хусусӣ ва ниҳоӣ

Майдонҳое, ки ҳолати an objectро дар бар мегиранд, хусусӣ ва ниҳоӣ мебошанд . Намоиши хусусӣ дастрасии мустақим ба майдонро пешгирӣ мекунад, дар ҳоле ки намоёнии ниҳоӣ кафолат медиҳад , ки майдон танҳо як маротиба таъин карда мешавад.

2. Усулҳои тағирдиҳанда вуҷуд надоранд

Майдони хусусиро берун аз синф дастрас кардан мумкин нест. Одатан, барои хондан ва навиштан ба майдонҳо усулҳои дастрасӣ (гирандагон) ва усулҳои тағирдиҳанда (танзимкунанда) таъмин карда мешаванд. Барои таъмини мувофиқат, тағирдиҳандаҳо иҷозат дода намешаванд.

3. Дарси чамъбастй

Иҷозат додан ба мероси синф метавонад тағирнопазириро вайрон кунад. Зерсинф, ки синфи тағирнопазирро васеъ мекунад, метавонад ба ҳолати an object таъсир расонад. Аз ин рӯ, синф ниҳоӣ аст .

4. Нусхаҳои муҳофизатӣ

Ҳангоми эҷоди an object, ба ҷои таъин кардани аргументҳо аз созанда ба майдонҳои хусусӣ, эҷоди нусхаи амиқ (ё нусхаи тағирнопазири) аргументҳо тағироти берунаро таъмин мекунад. Агар яке аз аргументҳо як навъи истинод бошад, онро дар охири зангзананда ба осонӣ идора кардан мумкин аст. Эҷоди нусхаҳои муҳофизатӣ ба шумо имкон медиҳад, ки аз ин таҳаввулот канорагирӣ кунед. Ба ҳамин монанд, барои дастраскунандагон (гирандагон) ба ҷои истинод ба майдони дохилӣ, нусхаи онро метавон озодона мубодила кард.

Амалй

Корманд

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;
    }
}
  • На ҳама майдонҳо дар конструктор нусхаҳои муҳофизатӣ доранд. Сабаб дар он аст, ки id ибтидоӣ аст ва майдонҳои ном ва joinDate намудҳои тағирнашаванда мебошанд. Онҳоро зангзан иваз карда наметавонад ва бетағйир мемонанд, дар ҳоле ки майдони дастовардҳо нусхаи далели бо истифода аз усули List.copyOf сохташударо талаб мекунад . Сабаб дар он аст, ки copyOf Рӯйхати тағирнашавандаро бармегардонад .

  • Ба ҳамин монанд, усулҳои дастрасӣ ба ҷои нусхаҳои муҳофизатӣ майдонҳоро мустақиман бармегардонанд, зеро ҳамаи намудҳои майдонҳо тағирнопазиранд (аз ҷумла дастовардҳо ) ва аз ин рӯ берун аз синф тағир додан мумкин нест.

Такмилҳо

Пеш аз Java 16

Татбиқи кормандонро бо китобхонаҳо ба монанди Ломбок беҳтар кардан мумкин аст . Ин тафсилотро дар code коҳиш медиҳад ва ба тозатар нигоҳ доштани он кӯмак мекунад. Китобхона бо эзоҳҳо барои кӯтоҳ кардани рамзи стандартӣ меояд. @Value (эзоҳ) метавонад барои эҷоди гирандагон ва созанда барои ҳама аргументҳо истифода шавад. Ин инчунин як синфи ниҳоӣ ва майдонҳои хусусӣ ва ниҳоӣ эҷод мекунад . Ҳамчун ёддошт, он инчунин усулҳои toString , equals ва hashCode -ро тавлид мекунад . Татбиқи корманд метавонад бо истифода аз @Value, тавре ки дар зер нишон дода шудааст, дубора навишта шавад:
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 ва баъдтар

Нашри Java 16 хусусияти нави Record -ро муаррифӣ кард . Инҳо (чунон ки JEP изҳор кардааст) синфҳое мебошанд, ки ҳамчун интиқолдиҳандагони шаффофи додаҳои тағирнашаванда амал мекунанд ва онҳоро метавон ҳамчун наворҳои номиналӣ ҳисоб кард. Синфи Корманд метавонад ҳамчун Корманди сабтшуда, тавре ки дар зер нишон дода шудааст , дубора амалӣ карда шавад .
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);
    }
}

Камбудихо

Ягона мушкилот бо тағирнопазирӣ хотираи иловагӣ ва коркард аст, ки ҳатто тағироти хурдро талаб мекунад. Ҳар дафъа ба шумо лозим аст, ки an objectи наверо созед, ки метавонад хеле гарон бошад. Барои бартараф кардани ин нуқсон, шумо метавонед механизмҳоеро ба монанди кэш ва захира кардани натиҷаҳоро татбиқ кунед.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION