JavaRush /Java Blog /Random-TL /Coffee break #121. Ano ang Classpath sa Java at paano ito...

Coffee break #121. Ano ang Classpath sa Java at paano ito i-install? Kawalang pagbabago sa Java

Nai-publish sa grupo

Ano ang Classpath sa Java at paano ito i-install?

Pinagmulan: Medium Ang pag-alam sa mga pangunahing kaalaman sa programming at ang daloy ng pagpapatupad ng mga file ng programa ay nakakatulong sa amin na maunawaan ang isang wika. Ang pag-alam sa parameter ng Classpath ay isa sa mga pangunahing konsepto na dapat malaman ng bawat developer ng Java. Ngayon ay tatalakayin natin kung ano ang path ng klase ( Classpath ), kung paano ito itakda, at kung paano ito nakakatulong sa JVM na magsagawa ng mga file ng klase. Кофе-брейк #121. What такое Classpath в Java и How его установить? Неизменяемость в Java - 1

Ano ang Classpath?

Ang Classpath ay isa sa mga pangunahing parameter sa Java, ngunit madalas itong hindi maunawaan ng mga bagong dating sa programming. Upang pasimplehin, ang isang Classpath ay isang hanay lamang ng mga landas kung saan dapat mahanap ng Java compiler at JVM ang mga kinakailangang klase upang mag-compile o magsagawa ng iba pang mga klase.

Paano tinutulungan ng Classpath ang JVM sa pagpapatupad ng mga file ng klase

Magsimula tayo sa isang halimbawa. Ipagpalagay natin na mayroon tayong Main.java file na matatagpuan sa /Users/vikram/Documents/test-java/src/com/programming/v1/Main.java folder .
package com.programming.v1;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello classpath");
    }
}
Sabihin nating nasa /Users/vikram/Documents tayo at gustong i-compile ang klase na ito:
javac test-java/src/com/programming/v1/Main.java
Ngayon, para maisagawa ang class file na ito, kailangan nating sabihin sa Java Virtual Machine kung saan hahanapin ang .class file gamit ang classpath o ang cp flag sa java command .
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
Ang unang parameter ay ang root folder kung saan nakasulat ang package. Ang pangalawang parameter ay ang pangalan ng package na may pangalan ng klase. Kapag ang isang Java command ay naisakatuparan, ang Java Virtual Machine ay tumitingin sa test-java/src na folder at pagkatapos ay nilo-load ang pangunahing klase upang maisagawa ito.

Paano magtakda ng variable ng Classpath

Maaaring itakda ang variable ng Classpath tulad ng ipinapakita sa ibaba sa mga makina ng Linux:
export CLASSPATH="test-java/src"
Ang Classpath sa isang Windows machine ay maaaring idagdag/i-update gamit ang mga variable ng kapaligiran. Kapag naitakda na ang environment variable, ang java command ay maaaring isagawa tulad ng ipinapakita sa ibaba:
vg@lp1 Documents % java com.programming.v1.Main
Hello classpath
Iyon lang ang dapat malaman tungkol sa Classpath . Salamat sa pagbabasa!

Kawalang pagbabago sa Java

Источник: Medium Переменные в Java бывают двух типов: примитивные и ссылочные. Все в Java передается по значению, но в случае ссылочных типов исходные данные могут обновляться с использованием переданного address памяти. Кофе-брейк #121. What такое Classpath в Java и How его установить? Неизменяемость в Java - 2Ключевое слово final используется для того, чтобы переменная действовала How константа, то есть избегала переназначения. Это хорошо работает для примитивов, у которых нет памяти в куче, тогда How для ссылочных типов ограничено только перенаmeaning, а внутреннее состояние может быть изменено. Это может привести к множеству проблем с параллелизмом и условиям гонки (race conditions). Таким образом включение неизменяемых характеристик в обычный тип в Java дает много преимуществ.

Преимущества неизменяемости в Java

1. Безопасность потоков

Неизменяемые типы невосприимчивы к условиям гонки в многопоточной среде, поскольку an object останется согласованным после его создания. Несколько потоков не могут изменить свое внутреннее состояние, поэтому синхронизация не требуется.

2. Основополагающий тип

String в стандартной библиотеке Java — хороший пример базового класса. Это очень простой и неизменяемый класс, который можно использовать для создания доменов бизнес-логики поверх него. Точно так же неизменяемый тип может выступать в качестве отличного базового типа, на основе которого можно строить.

Характеристики

1. Поля Private и Final

Поля, содержащие состояние an object, — это private и final. Частная (private) видимость запрещает прямой доступ к полю, а окончательная (final) гарантирует, что поле назначается только один раз.

2. НиHowих методов-модификаторов

К полю private нельзя получить доступ за пределами класса. Обычно для чтения и записи в поля предусмотрены методы доступа (геттеры) и методы-модификаторы (сеттеры) соответственно. Для обеспечения неизменности модификаторы не допускаются.

3. Класс Final

Предоставление возможности наследования класса может нарушить неизменяемость. Подкласс, расширяющий неизменяемый класс, может повлиять на состояние an object. Следовательно, класс является окончательным (final).

4. Защитные копии (Defensive Copies)

Во время создания an object instead of того, чтобы назначать аргументы из конструктора непосредственно закрытым полям, создание глубокой копии (or неизменяемой копии) аргументов обеспечит внешнее изменение. Если один из аргументов является ссылочным типом, им можно легко манипулировать на вызывающей стороне. Creation защитных копий позволяет избежать этой манипуляции. Точно так же для средств доступа (геттеров) instead of прямой ссылки на внутреннее поле можно свободно делиться его копией.

Реализация

Employee

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 является примитивным, а поля name и joinDate являются неизменяемыми типами. Они не могут быть изменены вызывающей стороной и останутся неизменными, в то время How поле achievements требует копии аргумента, сделанного с помощью метода List.copyOf. Это объясняется тем, что copyOf возвращает неизменяемый List.

  • Точно так же методы доступа возвращают поля напрямую, а не защитные копии, потому что все типы полей являются неизменяемыми (включая achievements) и, следовательно, не могут быть изменены вне класса.

Улучшения

До Java 16

Реализация Employee может быть улучшена с помощью таких библиотек, How Lombok. Это уменьшает многословие в codeе и помогает ему выглядеть более чистым. Библиотека поставляется с annotationми для сокращения стандартного codeа. @Value (annotation) может использоваться для создания геттеров и конструктора всех аргументов. Это также создает класс final и поля private и final. В качестве примечания, он также генерирует методы toString, equals и hashCode. Реализация Employee может быть переписана с помощью @Value, How показано ниже:
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. Она (How утверждает JEP) является классами, которые действуют How прозрачные носители неизменяемых данных и могут рассматриваться How номинальные кортежи (tuples). Класс Employee можно повторно реализовать How record Employee, что показано ниже.
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, что может быть весьма накладно. Whatбы обойти этот недостаток, можно реализовать такие механизмы, How кэширование и сохранение результатов.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION