JavaRush /Java блогу /Random-KY /Кофе-брейк №121. Javaдагы Classpath деген эмне жана аны к...

Кофе-брейк №121. Javaдагы Classpath деген эмне жана аны кантип орнотуу керек? Javaдагы өзгөрбөстүк

Группада жарыяланган

Javaдагы Classpath деген эмне жана аны кантип орнотуу керек?

Булак: орто Программалоонун негиздерин жана программа файлдарынын аткарылышын билүү бизге тилди түшүнүүгө жардам берет. Classpath параметрин билүү ар бир Java иштеп чыгуучусу бorши керек болгон негизги түшүнүктөрдүн бири. Бүгүн биз класстын жолу ( Classpath ) деген эмне экенин, аны кантип орнотууну жана JVMге класс файлдарын аткарууга кандайча жардам берерин талкуулайбыз .Кофе-брейк №121.  Javaдагы Classpath деген эмне жана аны кантип орнотуу керек?  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 Виртуалдык Машинасына classpath же java буйругундагы 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 Virtual Machine test-java/src папкасын карап , аны аткаруу үчүн негизги классты жүктөйт.

Classpath өзгөрмөсүн кантип коюу керек

Classpath өзгөрмөсүн Linux машиналарында төмөндө көрсөтүлгөндөй коюуга болот:
export CLASSPATH="test-java/src"
Windows машинасындагы Classpath чөйрө өзгөрмөлөрүнүн жардамы менен кошулушу/жаңыртылышы мүмкүн. Айлана-чөйрө өзгөрмөсү коюлгандан кийин, java буйругу төмөндө көрсөтүлгөндөй аткарылышы мүмкүн:
vg@lp1 Documents % java com.programming.v1.Main
Hello classpath
Бул Classpath жөнүндө билүүгө болот . окуганыңыз үчүн рахмат!

Javaдагы өзгөрбөстүк

Булак: Javaдагы орто өзгөрмөлөр эки түргө бөлүнөт: примитивдүү жана маалымдама. Java'дагы бардык нерсе баалуулуктар боюнча өткөрүлөт, бирок маалымдама түрлөрү болгон учурда, булак маалыматтары өткөн эстутум дареги аркылуу жаңыртылышы мүмкүн. АкыркыКофе-брейк №121.  Javaдагы Classpath деген эмне жана аны кантип орнотуу керек?  Javaдагы өзгөрбөстүк - 2 ачкыч сөз өзгөрмөнүн туруктуу ролун аткаруу үчүн колдонулат, башкача айтканда, кайра дайындоодон качуу. Бул үймөк эси жок примитивдер үчүн жакшы иштейт, ал эми маалымдама түрлөрү үчүн кайра дайындоо гана чектелген жана ички абалын өзгөртүүгө болот. Бул көптөгөн параллелдүү маселелерге жана жарыш шарттарына алып келиши мүмкүн. Ошентип, Javaдагы өзгөрүлгүс мүнөздөмөлөрдү кадимки типке кошуу көптөгөн артыкчылыктарды берет.

Javaдагы өзгөрбөстүктүн артыкчылыктары

1. Жиптин коопсуздугу

Өзгөрбөс типтер көп жиптүү чөйрөдө жарыш шарттарына каршы иммунитетке ээ, анткени an object түзүлгөндөн кийин ырааттуу бойдон кала берет. Бир нече жиптер ички абалын өзгөртө алbyte, андыктан синхрондоштуруу талап кылынbyte.

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;
    }
}
  • Бардык талаалардын конструктордо коргоочу көчүрмөлөрү жок. Себеби, id примитивдик жана аталыш жана кошулуу күнү талаалары өзгөрүлгүс типтер. Аларды чалуучу өзгөртө алbyte жана өзгөрүүсүз калат, ал эми жетишкендиктер талаасы 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);
    }
}

Кемчorктер

Өзгөрбөстүктүн бирден-бир көйгөйү - бул кошумча эс тутум жана иштетүү, ал тургай кичинекей өзгөртүү талап кылат. Ар бир жолу сиз жаңы an objectти түзүү керек, бул абдан кымбат болушу мүмкүн. Бул кемчorкти айланып өтүү үчүн, натыйжаларды кэштөө жана сактоо сыяктуу механизмдерди ишке ашыра аласыз.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION