JavaRush /جاوا بلاگ /Random-UR /کافی وقفہ نمبر 121۔ جاوا میں کلاس پاتھ کیا ہے اور اسے کیس...

کافی وقفہ نمبر 121۔ جاوا میں کلاس پاتھ کیا ہے اور اسے کیسے انسٹال کیا جائے؟ جاوا میں عدم تغیر

گروپ میں شائع ہوا۔

جاوا میں کلاس پاتھ کیا ہے اور اسے کیسے انسٹال کیا جائے؟

ماخذ: میڈیم پروگرامنگ کی بنیادی باتوں کو جاننا اور پروگرام فائلوں کے عمل کے بہاؤ سے ہمیں زبان کو سمجھنے میں مدد ملتی ہے۔ کلاس پاتھ پیرامیٹر کو جاننا بنیادی تصورات میں سے ایک ہے جو ہر جاوا ڈویلپر کو جاننا چاہیے۔ آج ہم اس بات پر تبادلہ خیال کریں گے کہ کلاس پاتھ ( Classpath ) کیا ہے، اسے کیسے سیٹ کیا جائے، اور یہ JVM کو کلاس فائلوں کو چلانے میں کس طرح مدد کرتا ہے۔ کافی وقفہ نمبر 121۔  جاوا میں کلاس پاتھ کیا ہے اور اسے کیسے انسٹال کیا جائے؟  جاوا میں تغیر پذیری - 1

کلاس پاتھ کیا ہے؟

کلاس پاتھ جاوا کے اہم پیرامیٹرز میں سے ایک ہے، لیکن پروگرامنگ میں نئے آنے والوں کے ذریعہ اکثر اسے غلط سمجھا جاتا ہے۔ آسان بنانے کے لیے، کلاس پاتھ محض راستوں کا ایک سیٹ ہے جس کے ساتھ جاوا کمپائلر اور JVM کو دیگر کلاسز کو مرتب کرنے یا اس پر عمل درآمد کرنے کے لیے ضروری کلاسز تلاش کرنا ہوں گی۔

کلاس پاتھ کلاس فائلوں کو چلانے میں 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 یا 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
پہلا پیرامیٹر روٹ فولڈر ہے جہاں پیکیج لکھا گیا ہے۔ دوسرا پیرامیٹر کلاس کے نام کے ساتھ پیکیج کا نام ہے۔ جب جاوا کمانڈ پر عمل کیا جاتا ہے، تو جاوا ورچوئل مشین test-java/src فولڈر میں نظر آتی ہے اور پھر اسے چلانے کے لیے مین کلاس کو لوڈ کرتی ہے۔

کلاس پاتھ متغیر کو کیسے سیٹ کریں۔

کلاس پاتھ متغیر کو سیٹ کیا جا سکتا ہے جیسا کہ لینکس مشینوں پر نیچے دکھایا گیا ہے۔
export CLASSPATH="test-java/src"
ونڈوز مشین پر کلاس پاتھ کو ماحولیاتی متغیرات کا استعمال کرتے ہوئے شامل/اپ ڈیٹ کیا جا سکتا ہے۔ ایک بار ماحولیاتی متغیر سیٹ ہونے کے بعد، جاوا کمانڈ کو عمل میں لایا جا سکتا ہے جیسا کہ ذیل میں دکھایا گیا ہے:
vg@lp1 Documents % java com.programming.v1.Main
Hello classpath
Classpath کے بارے میں جاننے کے لیے بس اتنا ہی ہے ۔ پڑھنے کے لیے آپ کا شکریہ!

جاوا میں عدم تغیر

ماخذ: جاوا میں میڈیم ویری ایبلز دو قسم کے ہیں: قدیم اور حوالہ۔ جاوا میں ہر چیز کو قدر کے حساب سے پاس کیا جاتا ہے، لیکن حوالہ کی اقسام کے معاملے میں، پاس شدہ میموری ایڈریس کا استعمال کرتے ہوئے سورس ڈیٹا کو اپ ڈیٹ کیا جا سکتا ہے۔ حتمیکافی وقفہ نمبر 121۔  جاوا میں کلاس پاتھ کیا ہے اور اسے کیسے انسٹال کیا جائے؟  جاوا میں تغیر پذیری - 2 کلیدی لفظ متغیر کو مستقل کے طور پر کام کرنے کے لیے استعمال کیا جاتا ہے، یعنی دوبارہ تفویض سے بچیں۔ یہ پرائمیٹوز کے لیے اچھی طرح کام کرتا ہے جن کے پاس کوئی ہیپ میموری نہیں ہے، جبکہ ریفرنس کی اقسام کے لیے صرف دوبارہ تفویض محدود ہے اور اندرونی حالت کو تبدیل کیا جا سکتا ہے۔ یہ بہت سے ہم آہنگی کے مسائل اور نسل کے حالات کا باعث بن سکتا ہے۔ اس طرح، جاوا میں ایک باقاعدہ قسم میں ناقابل تغیر خصوصیات کو شامل کرنا بہت سے فوائد فراہم کرتا ہے۔

جاوا میں تغیر پذیری کے فوائد

1. دھاگے کی حفاظت

غیر متغیر قسمیں کثیر دھاگے والے ماحول میں نسلی حالات سے محفوظ رہتی ہیں کیونکہ آبجیکٹ اس کے بننے کے بعد مستقل رہے گا۔ ایک سے زیادہ تھریڈز اپنی اندرونی حالت کو تبدیل نہیں کر سکتے، اس لیے ہم آہنگی کی ضرورت نہیں ہے۔

2. بنیادی قسم

جاوا سٹینڈرڈ لائبریری میں سٹرنگ بیس کلاس کی ایک اچھی مثال ہے۔ یہ ایک بہت ہی آسان اور ناقابل تغیر کلاس ہے جسے اس کے اوپر بزنس لاجک ڈومین بنانے کے لیے استعمال کیا جا سکتا ہے۔ اسی طرح، ایک ناقابل تغیر قسم ایک عظیم بیس قسم کے طور پر کام کر سکتی ہے جس پر تعمیر کرنا ہے۔

خصوصیات

1. پرائیویٹ اور فائنل فیلڈز

وہ فیلڈز جن میں کسی چیز کی حالت ہوتی ہے وہ پرائیویٹ اور فائنل ہوتے ہیں ۔ نجی مرئیت فیلڈ تک براہ راست رسائی کو روکتی ہے، جبکہ حتمی مرئیت یقینی بناتی ہے کہ فیلڈ کو صرف ایک بار تفویض کیا گیا ہے۔

2. کوئی ترمیم کرنے والے طریقے نہیں۔

کلاس کے باہر پرائیویٹ فیلڈ تک رسائی حاصل نہیں کی جا سکتی۔ عام طور پر، رسائی کے طریقے (گیٹرز) اور موڈیفائر کے طریقے (سیٹرز) بالترتیب، فیلڈز کو پڑھنے اور لکھنے کے لیے فراہم کیے جاتے ہیں۔ مستقل مزاجی کو یقینی بنانے کے لیے، ترمیم کرنے والوں کی اجازت نہیں ہے۔

3. فائنل کلاس

طبقاتی وراثت کی اجازت دینے سے تغیر پذیری ٹوٹ سکتی ہے۔ ایک ذیلی طبقے جو ایک ناقابل تغیر کلاس کو بڑھاتا ہے کسی چیز کی حالت کو متاثر کرسکتا ہے۔ لہذا، کلاس فائنل ہے .

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 قدیم ہے اور نام اور joinDate فیلڈز ناقابل تغیر قسم ہیں۔ انہیں کال کرنے والے کے ذریعے تبدیل نہیں کیا جا سکتا ہے اور یہ کوئی تبدیلی نہیں رہے گی، جبکہ کامیابیوں کے فیلڈ کو List.copyOf طریقہ استعمال کرتے ہوئے کی گئی دلیل کی ایک کاپی درکار ہے ۔ اس کی وجہ یہ ہے کہ copyOf ایک ناقابل تغیر فہرست واپس کرتا ہے ۔

  • اسی طرح، رسائی کے طریقے دفاعی کاپیوں کے بجائے فیلڈز کو براہ راست واپس کرتے ہیں کیونکہ فیلڈ کی تمام قسمیں ناقابل تغیر ہوتی ہیں (بشمول کامیابیوں ) ​​اور اس لیے کلاس سے باہر ترمیم نہیں کی جا سکتی۔

بہتری

جاوا 16 سے پہلے

لومبوک جیسی لائبریریوں کے ساتھ ملازمین کے نفاذ کو بہتر بنایا جا سکتا ہے ۔ یہ کوڈ میں لفظی پن کو کم کرتا ہے اور اسے صاف نظر آنے میں مدد کرتا ہے۔ لائبریری معیاری کوڈ کو مختصر کرنے کے لیے تشریحات کے ساتھ آتی ہے۔ @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 اور بعد میں

جاوا 16 ریلیز نے ایک نیا ریکارڈ فنکشن متعارف کرایا ۔ یہ (جیسا کہ جے ای پی نے کہا ہے) وہ کلاسز ہیں جو ناقابل تغیر ڈیٹا کے شفاف کیریئر کے طور پر کام کرتی ہیں اور ان کے بارے میں برائے نام ٹیپلس کے طور پر سوچا جا سکتا ہے۔ ملازم طبقے کو ریکارڈ ملازم کے طور پر دوبارہ لاگو کیا جا سکتا ہے جیسا کہ ذیل میں دکھایا گیا ہے۔
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