JavaRush /Java блогы /Random-KK /Кофе-брейк №121. Java тіліндегі Classpath дегеніміз не жә...

Кофе-брейк №121. Java тіліндегі Classpath дегеніміз не және оны қалай орнатуға болады? Java тіліндегі өзгермелілік

Топта жарияланған

Java тіліндегі Classpath дегеніміз не және оны қалай орнатуға болады?

Дереккөз: Орта Бағдарламалау негіздерін және бағдарлама файлдарының орындалу ағынын білу бізге тілді түсінуге көмектеседі. Classpath параметрін білу әрбір Java әзірлеушісі білуі керек негізгі ұғымдардың бірі болып табылады. Бүгін біз сынып жолы ( Classpath ) деген не екенін, оны қалай орнату керектігін және JVM-ге сынып файлдарын орындауға қалай көмектесетінін талқылаймыз .Кофе-брейк №121.  Java тіліндегі Classpath дегеніміз не және оны қалай орнатуға болады?  Java тіліндегі өзгермейтіндік – 1

Classpath дегеніміз не?

Classpath Java тіліндегі негізгі параметрлердің бірі болып табылады, бірақ оны бағдарламалауға жаңадан келгендер жиі түсінбейді. Жеңілдету үшін Classpath - бұл Java компиляторы мен JVM басқа сыныптарды құрастыру немесе орындау үшін қажетті сыныптарды табуы керек жолдар жиынтығы .

Classpath сынып файлдарын орындауда JVM-ге қалай көмектеседі

Мысалдан бастайық. Бізде /Users/vikram/Documents/test-java/src/com/programming/v1/Main.java қалтасында орналасқан 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 виртуалды машинасына java пәрменіндегі classpath немесе cp жалаушасы арқылы .class файлын қай жерден іздеу керектігін айтуымыз керек .
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"
Windows құрылғысындағы сынып жолын орта айнымалы мәндері арқылы қосуға/жаңартуға болады. Айнымалы орта орнатылғаннан кейін, java пәрменін төменде көрсетілгендей орындауға болады:
vg@lp1 Documents % java com.programming.v1.Main
Hello classpath
Classpath туралы білу керек нәрсенің бәрі осы . Оқығаныңызға рахмет!

Java тіліндегі өзгермелілік

Дереккөз: Java тіліндегі орташа айнымалылар екі түрлі: қарабайыр және анықтамалық. Java тіліндегі барлығы мән бойынша беріледі, бірақ анықтамалық типтер жағдайында бастапқы деректерді берілген жад мекенжайы арқылы жаңартуға болады. СоңғыКофе-брейк №121.  Java тіліндегі Classpath дегеніміз не және оны қалай орнатуға болады?  Java тіліндегі өзгермейтіндік – 2 түйінді сөз айнымалының тұрақты ретінде әрекет етуі үшін пайдаланылады, яғни қайта тағайындауды болдырмайды. Бұл үйме жады жоқ примитивтер үшін жақсы жұмыс істейді, ал сілтеме түрлері үшін тек қайта тағайындау шектелген және ішкі күйін өзгертуге болады. Бұл көптеген параллельдік мәселелер мен жарыс жағдайларына әкелуі мүмкін. Осылайша, Java тіліндегі тұрақты түрдегі өзгермейтін сипаттарды қосу көптеген артықшылықтар береді.

Java тіліндегі өзгермейтіндіктің артықшылықтары

1. Жіп қауіпсіздігі

Өзгермейтін түрлер көп ағынды ортадағы жарыс шарттарына иммунитетке ие, себебі нысан жасалғаннан кейін тұрақты болып қалады. Бірнеше ағындар өздерінің ішкі күйін өзгерте алмайды, сондықтан синхрондау қажет емес.

2. Негізгі түрі

Java стандартты кітапханасындағы жол базалық класстың жақсы мысалы болып табылады. Бұл өте қарапайым және өзгермейтін сынып, оның үстіне бизнес-логикалық домендерді құру үшін пайдалануға болады. Сол сияқты, өзгермейтін тип құрастырылатын тамаша базалық тип ретінде әрекет ете алады.

Сипаттамалары

1. Жеке және Қорытынды өрістер

Нысанның күйін қамтитын өрістер жеке және соңғы болып табылады . Жеке көріну өріске тікелей қол жеткізуді болдырмайды, ал соңғы көріну өрістің тек бір рет тағайындалуын қамтамасыз етеді .

2. Модификатор әдістері жоқ

Жеке өріске сыныптан тыс кіру мүмкін емес. Әдетте, өрістерді оқу және жазу үшін сәйкесінше қатынас әдістері (қабылдағыштар) және модификатор әдістері (баптауыштары) беріледі. Сәйкестікті қамтамасыз ету үшін модификаторларға рұқсат етілмейді.

3. Қорытынды сынып

Сынып мұрагерлігіне рұқсат беру өзгермейтіндікті бұзуы мүмкін. Өзгермейтін сыныпты кеңейтетін ішкі сынып an objectінің күйіне әсер етуі мүмкін. Сондықтан сынып қорытынды болып табылады .

4. Қорғаныс көшірмелері

Объектіні жасау кезінде конструктордан тікелей жеке өрістерге аргументтерді тағайындаудың орнына, аргументтердің терең көшірмесін (немесе өзгермейтін көшірмесін) жасау сыртқы түрлендіруді қамтамасыз етеді. Егер аргументтердің бірі сілтеме түрі болса, оны қоңырау шалушының соңында оңай басқаруға болады. Қорғаныс көшірмелерін жасау бұл манипуляцияны болдырмауға мүмкіндік береді. Сол сияқты, қосқыштар (алушылар) үшін ішкі өріске тікелей сілтеме жасаудың орнына оның көшірмесін еркін бөлісуге болады.

Іске асыру

Қызметкер

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;
    }
}
  • Барлық өрістердің конструктордағы қорғаныш көшірмелері жоқ. Себебі идентификатор қарабайыр және атау мен біріктіру күні өрістері өзгермейтін түрлер болып табылады. Оларды қоңырау шалушы өзгерте алмайды және өзгеріссіз қалады, ал жетістіктер өрісі List.copyOf әдісі арқылы жасалған аргументтің көшірмесін талап етеді . Себебі copyOf өзгермейтін тізімді қайтарады .

  • Сол сияқты, қосқыш әдістері қорғаныс көшірмелерінен гөрі өрістерді тікелей қайтарады, себебі барлық өріс түрлері өзгермейді ( жетістіктерді қоса алғанда ) және сондықтан сыныптан тыс өзгерту мүмкін емес.

Жақсартулар

Java 16 алдында

Қызметкерді енгізуді Lombok сияқты кітапханалармен жақсартуға болады . Бұл codeтағы нақтылықты азайтады және оның таза көрінуіне көмектеседі. Кітапхана стандартты codeты қысқарту үшін annotationлармен бірге келеді. @Value (annotation) барлық аргументтер үшін алушыларды және конструкторды жасау үшін пайдаланылуы мүмкін. Бұл сонымен қатар соңғы сыныпты және жеке және соңғы өрістерді жасайды . Ескертпе ретінде ол 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);
    }
}

Кемшіліктер

Өзгермейтін жалғыз мәселе қосымша жад пен өңдеу болып табылады, ол тіпті шағын модификацияны қажет етеді. Әр жолы сізге жаңа нысан жасау керек, ол өте қымбат болуы мүмкін. Бұл кемшілікті айналып өту үшін нәтижелерді кэштеу және сақтау сияқты механизмдерді енгізуге болады.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION