برنامه نویسی جاوا | Java
5.7K subscribers
1.11K photos
158 videos
379 files
1.18K links
🎓آکـــــــــادمی جاواپـــــــــــــــرو
آموزش پیش نیازهای برنامه نویسی
آموزش مقدماتی تا پیشرفته جاوا
آموزش Spring Boot
سفارش پروژه ، دوره و تدریس خصوصی: @rzutab
مشاهده دوره ها و ثبت نام👇
wwww.academyjavapro.com
گروه جاوا : @group_javapro
Download Telegram
فرصت شغلی برنامه نویسی جاوا در بانکینو

💻شرایط استخدام و ارسال رزومه در تصویر درج شده است.

➡️اشتراک 👍لایک 💬کامنت


⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
💼آیا حاضرید معادل یک حقوق وزارت کار را در ۴ قسط، صرف یادگیری و شرکت در دوره‌ای جامع و کاربردی برای تبدیل شدن به یک معمار میکروسرویس با Java و Spring Boot کنید؟

اگر پاسخ شما مثبت است، به شما تبریک می‌گوییم؛ چون قدم اول را برای ورود به دنیای حرفه‌ای برنامه‌نویسی جاوا و معماری نرم‌افزار برداشته‌اید.
در این دوره، بدون نیاز به پیش نیاز Spring Boot و تنها با حداقل دانش Java SE، با رویکردی پروژه‌محور و واقعی، مفاهیم معماری میکروسرویس با Java و Spring Boot را به‌صورت عمیق و عملی یاد می‌گیرید و آماده ورود به بازار کار داخلی و حتی
پروژه‌های بین‌المللی خواهید شد.

#️⃣مشاهده جزییات دوره

📱درخواست ثبت نام اقساط 👇

@rzutab
Please open Telegram to view this post
VIEW IN TELEGRAM
👾4💯2🗿2
چگونه Spring Boot را برای یک میلیون درخواست در ثانیه مقیاس‌پذیر کنیم؟ راهنمایی واقعی برای دنیای واقعی 🚀

در این راهنما، تجربه‌ی چند سال کار با سیستم‌های پرترافیک و بهینه‌سازی Spring Boot برای محیط‌های تولیدی را با شما به اشتراک می‌گذارم. هدف، رسیدن به توانایی پردازش ۱ میلیون درخواست در ثانیه در دنیای واقعی‌ست – نه فقط روی کاغذ.


🖥مشاهده


➡️اشتراک 👍لایک 💬کامنت


⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🙏2
🕵‍♂برخی از مطالبی که اینجا مطرح می‌شود، در حد ایده یا سرنخ هستند که باید خودتان آن‌ها را پیگیری و بررسی کنید..... 🔎
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📰از زبان یک توسعه دهنده جاوا

جاوا امسال ۳۰ ساله شد.🎉
اما این فقط یک زبان برنامه‌نویسی معمولی برای من نیست – جاوا دروازه ورود من به دنیای توسعه نرم‌افزار بود. زبانی بود که باعث شد عاشق کدنویسی شوم و اشتیاقم به ساختن نرم‌افزار شعله‌ور شود.

🗺 مسیر یادگیری جاوا – یک نقشه راه :

👉شروع از پایه‌ها:

• سینتکس و متغیرها – جایی که همه‌چیز آغاز می‌شود
• انواع داده و جریان کنترل
• حلقه‌ها – پایه‌ و اساس منطق برنامه‌نویسی

🚀سپس ورود به دنیای شی‌گرایی (OOP):

• کلاس‌ها و اشیاء – قلب تپنده جاوا
• ارث‌بری و چندریختی (Polymorphism)
• انتزاع (Abstraction) – مثل یک توسعه‌دهنده فکر کردن

🥈ساختن با مجموعه‌ها (Collections):

• لیست‌ها، مجموعه‌ها، نقشه‌ها (List, Set, Map) – جعبه‌ابزار داده‌ها
• جنریک‌ها و تکرارشونده‌ها (Generics & Iterators) – کدی تمیز و نوع‌سنجی‌شده

🏅تسلط بر مفاهیم پیشرفته:

• مدیریت استثناها – چون گاهی همه‌چیز طبق برنامه پیش نمی‌رود
• ورودی/خروجی فایل و سریال‌سازی (File I/O & Serialization) – کار با داده‌های واقعی
• چندریسمانی (Multithreading) – قدرت پردازش همزمان
• اتصال به پایگاه‌داده با JDBC

👑و در نهایت، ورود به اکوسیستم مدرن جاوا:

• قابلیت‌های جاوا ۸ به بعد (لامبدا، استریم‌ها، برنامه‌نویسی تابعی)
• فریم‌ورک‌هایی مانند Hibernate و Spring MVC
• توسعه وب با Servlets و JSP

► چیزی که بیشتر از همه در جاوا دوست دارم:

شعار "یک‌بار بنویس، همه‌جا اجرا کن" فقط یک جمله تبلیغاتی نیست – این یک فلسفه است که درهای بی‌نهایتی را به روی ما باز کرده.
جاوا به من یاد داد چگونه شی‌گرایانه فکر کنم، چطور کدم را درست ساختار بدهم، و زیبایی سیستم‌های خوش‌طراحی‌شده را درک کنم.

حتی پس از ۳۰ سال، جاوا همچنان در حال پیشرفت است، بی‌آن‌که اصول اصلی‌اش را فراموش کند.
از اپلیکیشن‌های سازمانی گرفته تا توسعه اندروید، هنوز هم قلب دنیای دیجیتال با جاوا می‌تپد.

🌟به همه علاقه‌مندان جاوا:

اولین لحظه "آهان!" شما با جاوا چه بود؟
این زبان چگونه مسیر توسعه‌دهندگی شما را شکل داد؟


➡️اشتراک 👍لایک 💬کامنت


⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
11🫡1
📌 درک تفاوت بین عملگرهای بیتی و منطقی در شرط‌ها در زبان جاوا

در جاوا، گاهی دو عملگر شبیه به هم دیده می‌شوند اما رفتار متفاوتی دارند. یکی از این موارد، تفاوت بین عملگرهای & و && یا | و || است. دانستن این تفاوت، برای جلوگیری از بروز خطاهای منطقی و افزایش کارایی کد بسیار ضروری است.


🧩 عملگرهای بیتی & و |

عملگرهای & و | در حالت عادی روی بیت‌ها کار می‌کنند. برای مثال:


int a = 5;      // ۰۱۰۱
int b = 3;      // ۰۰۱۱
System.out.println(a & b); // خروجی: ۱ (۰۰۰۱)
System.out.println(a | b); // خروجی: ۷ (۰۱۱۱)


اما وقتی این عملگرها در عبارات شرطی بولی (boolean) استفاده شوند، هر دو طرف شرط را بدون توجه به نتیجه، اجرا می‌کنند.


boolean result = checkA() & checkB(); // هر دو تابع اجرا می‌شوند



⚙️ عملگرهای منطقی شرطی && و || (با ارزیابی کوتاه)

در مقابل، عملگرهای && و || فقط در عبارات شرطی استفاده می‌شوند و از ارزیابی کوتاه پشتیبانی می‌کنند:

* در && اگر بخش اول false باشد، بخش دوم اصلاً اجرا نمی‌شود.
* در || اگر بخش اول true باشد، بخش دوم اجرا نمی‌شود.


boolean result = checkA() && checkB(); // اگر checkA() false بدهد، checkB() اجرا نمی‌شود


🔐 این ویژگی به‌ویژه برای جلوگیری از خطا (مثلاً NullPointerException) مفید است:


if (user != null && user.isActive()) {
    // ایمن و مطمئن
}



🚨 مقایسه عملی:

فرض کنید توابعی دارید که در کنسول پیام چاپ می‌کنند:


public static boolean checkA() {
    System.out.println("A Checked");
    return false;
}

public static boolean checkB() {
    System.out.println("B Checked");
    return true;
}


اگر از checkA() & checkB() استفاده کنید، خروجی خواهد بود:

A Checked
B Checked


اما اگر از checkA() && checkB() استفاده کنید، خروجی فقط:

A Checked


خواهد بود.


🎯 جمع‌بندی:

* از && و || برای شرط‌ها استفاده کنید که به ارزیابی کوتاه نیاز دارند.
* از & و | برای عملیات روی بیت‌ها یا در شرایطی خاص که نیاز دارید هر دو طرف شرط همیشه اجرا شوند.
* دقت در انتخاب نوع عملگر شرطی، نقش مهمی در رفتار صحیح و کارآمد برنامه ایفا می‌کند.

#کاربر_مبتدی


🆔 @javapro_ir
🆔 @group_javapro
👍133💯1
ایران بانوی زیبا قلب ما هر روز و هر ثانیه برای تو می تپد🇮🇷❤️....



⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
28🗿1
موضوع: آرایه‌ها در جاوا

💻تعریف آرایه
آرایه در زبان جاوا یک شیء نگهدارنده (container) است که تعداد ثابتی از مقادیر یک نوع خاص را در خود ذخیره می‌کند. طول آرایه هنگام ایجاد آن تعیین می‌شود و پس از آن قابل تغییر نیست.

دلایل استفاده از آرایه‌ها

امکان ذخیره چند مقدار در یک متغیر

مدیریت مؤثر داده‌های حجیم

دسترسی سریع به عناصر از طریق اندیس (indexing)

جلوگیری از تعریف چند متغیر جداگانه (مثلاً: int a, b, c, d; تبدیل به int[] arr = new int[4];)


نحوه‌ی نوشتار آرایه‌ها (Array Syntax)

// Declaration
int[] arr; // preferred
// OR
int arr[];

// Instantiation
arr = new int[5]; // array of 5 integers

// Initialization
arr[0] = 10;
arr[1] = 20;

// Declaration + Instantiation + Initialization
int[] arr = new int[5]; // default values (0 for int)
int[] arr2 = {10, 20, 30, 40, 50}; // direct initialization

// Accessing Array Elements
System.out.println(arr[0]); // prints first element
arr[2] = 99; // change value at index 2

// Indexing starts at 0
// Last element is at array.length - 1

پیمایش آرایه‌ها

// Using for loop:
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}

// Using for-each loop:
for(int value : arr) {
System.out.println(value);
}



⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53
📢 اطلاعیه برای دانشجویان جاواپرو

با توجه به اختلالات اخیر در اینترنت بین‌الملل، دسترسی به دوره‌های جاواپرو برای بسیاری از دانشجویان به خصوص دانشجویان خارج از کشور با محدودیت یا قطع کامل همراه بود.

🔄 پس از رفع این محدودیت‌ها، همه دانشجویان مجدداً به پنل دوره‌های خود دسترسی خواهند داشت.

از شکیبایی و همراهی شما سپاسگزاریم. ❤️


آکادمی جاواپرو

www.javapro.ir
www.academyjavapro.com
Please open Telegram to view this post
VIEW IN TELEGRAM
🙏1
🔴 موقتا تا رفع محدودیت های کامل اینترنت، اطلاع رسانی ها و راه ارتباطی با جاواپرو در کنار تلگرام در ایتا نیز برقرار است. 👇

https://eitaa.com/javapro_ir
Please open Telegram to view this post
VIEW IN TELEGRAM
🙏2🗿1
🔵به عنوان یک توسعه‌دهنده جاوا، من یادداشت‌های جامع و کاملی درباره زبان Java جمع‌آوری کرده‌ام که همه چیز را از مبانی تا مفاهیم پیشرفته پوشش می‌دهد! چه مبتدی باشید و چه بخواهید مهارت‌های خود را ارتقا دهید، این یادداشت‌ها برای همه مفید هستند:

🔰 مبانی جاوا

اولین برنامه جاوا

مفاهیم داخلی: JDK، JRE، JVM

مدیریت حافظه در JVM

معماری JVM (جزئیات داخلی)

مدیریت حافظه (جمع‌آوری زباله یا Garbage Collection به صورت عمیق)

🏗️ کلاس، شیء و انواع کلاس‌ها

قواعد نام‌گذاری در جاوا

چرخه‌ عمر یک شیء

اشیای بی‌نام در جاوا

سریال‌سازی و دی‌سریال‌سازی

🔢 انواع داده، متغیرها، ثوابت و لیترال‌ها

متغیرها و انواع داده‌های غیر اولیه در جاوا

انواع متغیرها: محلی، نمونه‌ای (Instance)، ایستا (Static)

🛠️ متدها در جاوا

تعریف متد

متدهای استاتیک و نمونه‌ای

متد main

🚧 سازنده‌ها (Constructors) در جاوا

تعریف سازنده

سربارگذاری (Overloading) سازنده

زنجیره‌سازی سازنده (Constructor Chaining)

سازنده کپی (Copy Constructor)


🔒 تعدیل‌کننده‌ها (Modifiers) در جاوا

انواع مشخص‌کننده‌های دسترسی (Access Specifiers)

مشخص‌کننده‌های غیر دسترسی (Non-Access Modifiers)

⚙️ کلیدواژه static

متغیر static

متد static

بلاک static

🔑 کلیدواژه final

متغیر final

متد final

کلاس final

🏛️ کلاس داخلی (Inner Class) در جاوا

تعریف کلاس داخلی

ویژگی‌های کلاس داخلی

نحوه نمونه‌سازی کلاس داخلی

انواع کلاس داخلی

💡 کلیدواژه super

استفاده از کلیدواژه super

دسترسی به متغیر والد

فراخوانی سازنده والد

فراخوانی متد والد

🔍 کلیدواژه this

استفاده از this

تفاوت بین super و this

💥 مفاهیم OOP در جاوا

کپسوله‌سازی (Encapsulation)

وراثت (Inheritance)

چندریختی (Polymorphism)

انتزاع (Abstraction)

📂 چارچوب کالکشن‌ها (Collections Framework)

معرفی مجموعه‌ها

Map، Set، Queue، List

تفاوت Comparator و Comparable

PriorityQueue

⚠️ مدیریت خطا (Exception Handling)

مدیریت خطا در جاوا

تفاوت Error و Exception

انواع Exception

بلوک try-catch

بلوک catch چندگانه

try تو در تو

بلوک finally

تفاوت throw و throws

تفاوت finally و finalize

استثناهای سفارشی در جاوا

کلاس Throwable


🧵 رشته‌ها: String، StringBuffer، StringBuilder

رشته تغییرناپذیر (Immutable)

مقایسه رشته‌ها

کلاس‌های StringBuffer و StringBuilder

تفاوت‌های بین String، StringBuilder و StringBuffer

🛠️ چندریسمانی (Multithreading)

ساخت نخ (Thread)

تفاوت Thread Class و Runnable Interface

متد join

کلمه کلیدی synchronized

چرخه عمر نخ

ارتباط بین نخ‌ها (Inter-Thread Communication)

نخ‌های daemon، اولویت نخ‌ها

رابط Callable

تفاوت Runnable و Callable

قفل‌ها و شرایط (Locks and Condition)

هم‌زمانی بدون قفل (Lock-Free Concurrency)

Thread Pools و ThreadPoolExecutor

کلیدواژه volatile

قطع کردن نخ‌ها (Interrupting Threads)


⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🧰 ابزارهای ضروری برای توسعه مدرن جاوا

توسعه حرفه‌ای با جاوا بدون استفاده از ابزارهای مکمل، تقریباً غیرممکنه! در ادامه، لیستی از ابزارهای مهم و کاربردی در دسته‌های مختلف برای توسعه‌دهندگان جاوا ارائه شده:

⚙️ ابزارهای پایگاه داده و مهاجرت

• مدیریت تغییرات ساختار پایگاه داده با استفاده از changelogها – ⚙️ Liquibase
• ابزار سبک و نسخه‌پایه برای مهاجرت دیتابیس با پشتیبانی از SQL یا جاوا – 🚀 Flyway
• دیتابیس درون‌حافظه‌ای مناسب برای توسعه محلی و تست خودکار – 🧠 H2
• سازنده SQL تایپ‌امن که از ساختار دیتابیس، کد جاوا تولید می‌کنه؛ مناسب پروژه‌های SQL‌محور – 🧱 JOOQ
• ابزارهای گرافیکی برای مشاهده، پرس‌وجو و تحلیل دیتابیس (ذکر افتخاری) – 🖥️ DBVisualizer / DBeaver


🪛 ابزارهای دیباگ و مانیتورینگ

• نمایش اطلاعات سلامت، متریک‌ها و جزئیات اپلیکیشن برای مانیتورینگ – 📡 Spring Boot Actuator
• ابزار گرافیکی برای مشاهده حافظه، نخ‌ها، GC و مصرف CPU در JVM – 🧪 VisualVM
• پروفایلر داخلی JDK با سربار کم برای تحلیل عمیق عملکرد – 🎯 Java Flight Recorder
• ابزار سبک و ساده بر پایه JMX برای مانیتورینگ – 🔍 JConsole
• چارچوب لاگ‌گیری قدرتمند و جایگزین Log4j با پیکربندی منعطف – 📘 Logback
• نسخه پیشرفته Log4j با پشتیبانی از Async و بازدهی بالا – 🧾 Log4j2
• ابزار لاگ‌گیری متمرکز و تحلیل لاگ برای سیستم‌های بزرگ‌مقیاس – 📊 ELK Stack
• ترکیب محبوب جمع‌آوری و نمایش متریک‌ها برای اپلیکیشن‌های JVM – ⏱️ Prometheus + Grafana

🧪 ابزارهای تست و Mock کردن

• فریم‌ورک استاندارد برای تست واحد و تست‌های یکپارچه – JUnit 5
• ابزار قدرتمند برای شبیه‌سازی رفتار وابستگی‌ها – 🎭 Mockito
• کتابخانه مخصوص Kotlin برای Mock، مناسب پروژه‌های Kotlin-Java – 🧬 MockK
• اجرای کانتینرهای واقعی مانند دیتابیس یا Kafka برای تست‌های یکپارچه – 🐳 Testcontainers
• کتابخانه assertions خوانا و روان برای تست‌ها – 📏 AssertJ
• ابزار تست یکپارچه برای برنامه‌های Java EE و Jakarta EE (کمتر رایج‌تر) – 🧪 Arquillian
• DSL برای تست REST APIها در جاوا؛ عالی برای تست‌های بیانی – 🌐 REST Assured
• شبیه‌سازی سرورهای HTTP خارجی برای تست‌های API – 📡 WireMock

📦 ابزارهای مدیریت وابستگی و بیلد

• ابزار اتوماسیون بیلد و مدیریت وابستگی‌ها بر پایه XML – ⚒️ Maven
• ابزار مدرن و سریع بیلد با پشتیبانی از DSL در Groovy یا Kotlin – 🧰 Gradle
• استفاده مستقیم از ریپوی GitHub به عنوان وابستگی؛ مناسب کتابخانه‌های سبک – 🌐 JitPack
• بررسی خودکار به‌روزرسانی‌های وابستگی‌ها و پلاگین‌ها در Maven – 🧭 Versions Maven Plugin
• ابزار GitHub برای بروزرسانی خودکار وابستگی‌ها با ارسال Pull Request – 🤖 Dependabot
• تحلیل عملکرد بیلد و نمایش داشبورد وب از فرآیند اجرا – 📊 Build Scan
• سیستم بیلد مقیاس‌پذیر مناسب پروژه‌های بزرگ (استفاده‌شده در گوگل) – 🧱 Bazel
• مخازن خصوصی برای میزبانی کتابخانه‌ها و آرشیوهای جاوا – 🗂️ Nexus / Artifactory

⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🚀 HashMap در جاوا چطور کار می‌کند؟ (به زبان ساده!) 🔍

اگر تا حالا با جاوا کار کرده باشید، احتمالاً از HashMap استفاده کرده‌اید.
اما آیا واقعاً می‌دانید پشت صحنه چه اتفاقی می‌افتد؟
در ادامه به زبانی ساده و قابل فهم توضیح داده شده که HashMap چطور داخل خودش داده‌ها را مدیریت می‌کند 👇

🔹 ساختار کلی:

در داخل HashMap، یک آرایه از «باکت‌ها» وجود دارد.
هر باکت می‌تواند چند «کلید-مقدار» را به صورت نود (گره) ذخیره کند.
اگر چند کلید مختلف به یک باکت برسند، داده‌ها به صورت لیست پیوندی ذخیره می‌شوند (از نسخه ۸ جاوا به بعد، اگر تعداد زیاد شود، تبدیل به درخت Red-Black می‌شود).

🔹 هش کردن و پیدا کردن موقعیت:

🤔 وقتی یک کلید به HashMap اضافه می‌شود:

جاوا با استفاده از متد hashCode() یک مقدار هش برای آن تولید می‌کند.
بعد با این فرمول محل دقیق قرار گرفتن آن در آرایه مشخص می‌شود:
👨🏻💻 index = (n - 1) & hash

این روش باعث می‌شود کلیدها به‌طور یکنواخت در آرایه پخش شوند و دسترسی سریع‌تر انجام شود.

🔹 برخورد چند کلید در یک جا:

🤔 اگر چند کلید به یک باکت برسند:

اول جاوا بررسی می‌کند آیا کلید جدید با یکی از کلیدهای موجود برابر است (equals()).
اگر برابر نباشد، کلید جدید به لیست یا درخت اضافه می‌شود.

🔹 تبدیل به درخت (در جاوا ۸ به بعد):

اگر تعداد نودها در یک باکت بیشتر از ۸ تا شود و کل اندازه نقشه حداقل ۶۴ باشد، لیست پیوندی به درخت Red-Black تبدیل می‌شود تا جستجوها سریع‌تر انجام شود (O(log n) به‌جای O(n)).

🔹 ظرفیت، ضریب بار و آستانه:

ظرفیت: تعداد باکت‌های فعلی (پیش‌فرض ۱۶ عدد است)
ضریب بار: عددی بین ۰ و ۱ (پیش‌فرض ۰٫۷۵) که مشخص می‌کند چه زمانی باید ظرفیت بیشتر شود
آستانه: ظرفیت × ضریب بار؛ اگر تعداد عناصر از این مقدار بیشتر شود، HashMap بزرگ‌تر می‌شود.

🔁 بزرگ‌تر شدن (Resizing):

🤔 وقتی تعداد عناصر از آستانه عبور کند:

ظرفیت آرایه دو برابر می‌شود
همه کلیدها دوباره هش می‌شوند و در آرایه جدید قرار می‌گیرند
این فرآیند زمان‌بر است، پس اگر از ابتدا ظرفیت مناسب انتخاب شود، کارایی بهتری خواهید داشت.

🔹 مدیریت null:

HashMap فقط یک کلید null را قبول می‌کند
اما می‌تواند چندین مقدار null داشته باشد
کلید null همیشه در باکت شماره صفر ذخیره می‌شود.

💡 نکته مهم:
اگر از کلاس‌های خودتان به‌عنوان کلید استفاده می‌کنید، حتماً متدهای equals() و hashCode() را بازنویسی (override) کنید.
این کار از بروز خطا جلوگیری می‌کند و باعث می‌شود HashMap درست کار کند.

📈 چرا دانستن این نکات مهم است؟

✔️ به شما کمک می‌کند کدی سریع‌تر و بهینه‌تر بنویسید
✔️ برای مصاحبه‌های شغلی و طراحی سیستم آمادگی بیشتری خواهید داشت
✔️ درک عمیق‌تری از مجموعه‌های جاوا به‌دست می‌آورید

اگر به جاوا، Spring Boot یا طراحی بک‌اند علاقه‌مندید، جاواپرو را دنبال نمایید 🙌


➡️اشتراک 👍لایک 💬کامنت


⚡️ @javapro_ir
✈️@group_javapro


#جاواپرو #SpringBoot #جاوا
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍1
This media is not supported in your browser
VIEW IN TELEGRAM
💡درک تفاوت بین ارسال با مقدار (pass by value) و ارسال با ارجاع (pass by reference)

آیا تا به حال به این فکر کرده‌اید که داده‌ها در برنامه‌نویسی چگونه منتقل می‌شوند؟ بیایید با دو روش بنیادی در این زمینه آشنا شویم:

➡️ ارسال با مقدار (pass by value):
در این روش، یک نسخه‌ی کپی (copy) از مقدار متغیر ارسال می‌شود.
یعنی وقتی یک متغیر (variable) را به یک تابع (function) می‌فرستید، در واقع فقط یک نسخه از مقدار آن را منتقل کرده‌اید. بنابراین، هر تغییری که داخل تابع انجام شود، روی متغیر اصلی تأثیری ندارد.
این روش معمولاً در زبان‌هایی مانند C و جاوا (Java) برای نوع‌های داده‌ای اولیه (primitive types) استفاده می‌شود.

➡️ ارسال با ارجاع (pass by reference):
در این روش، به جای ارسال یک نسخه‌ی کپی، آدرس یا مرجعی (reference) به خود متغیر اصلی ارسال می‌شود.
به همین دلیل، تغییراتی که در تابع (function) انجام می‌شوند، مستقیماً روی متغیر اصلی تأثیر می‌گذارند.
این روش بیشتر در کار با اشیاء (objects) در زبان‌هایی مانند جاوا (Java) و پایتون (Python) دیده می‌شود.

چگونه می‌توان مطمئن شد که از روش درست در کد (code) خود استفاده می‌کنید؟

➡️اشتراک 👍لایک 💬کامنت


⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
7
📌 آشنایی با کلمات کلیدی دارای نماد @ در زبان جاوا

در زبان جاوا، برخی از کلمات کلیدی با نماد @ آغاز می‌شوند که به آن‌ها انوتیشن (Annotation) گفته می‌شود. انوتیشن‌ها اطلاعات اضافی را به کامپایلر یا ماشین مجازی منتقل می‌کنند و در بسیاری از فریمورک‌ها و کتابخانه‌ها نقشی حیاتی دارند.

در ادامه، چند انوتیشن پرکاربرد را به همراه مثال بررسی می‌کنیم:


🔸 @Override

این انوتیشن زمانی استفاده می‌شود که می‌خواهیم متدی از کلاس پدر را در کلاس فرزند بازنویسی کنیم. اگر اشتباه تایپی در نام متد یا پارامترها وجود داشته باشد، کامپایلر خطا خواهد داد.


class Animal {
void speak() {
System.out.println("Animal speaks");
}
}

class Dog extends Animal {
@Override
void speak() {
System.out.println("Dog barks");
}
}



🔸 @Deprecated

این انوتیشن برای متدها یا کلاس‌هایی به کار می‌رود که **دیگر نباید استفاده شوند**، زیرا ممکن است در آینده حذف شوند.


@Deprecated
void oldMethod() {
System.out.println("This method is outdated");
}

void newMethod() {
System.out.println("Use this method instead");
}



🔸 @SuppressWarnings

با این انوتیشن می‌توان هشدارهای خاصی را از کامپایلر مخفی کرد. معمولاً در استفاده از مجموعه‌های generics یا تبدیل نوع کاربرد دارد.


@SuppressWarnings("unchecked")
void addRawList() {
List list = new ArrayList();
list.add("test");
}



🔸 @FunctionalInterface

این انوتیشن مشخص می‌کند که اینترفیس مورد نظر تنها باید یک متد انتزاعی داشته باشد. این ویژگی برای پشتیبانی از Lambda Expression مهم است.


@FunctionalInterface
interface Calculator {
int operate(int a, int b);
}



🧠 نکته‌ی پایانی:
انوتیشن‌ها فقط در حد یک ابزار ساده نیستند. در فریمورک‌هایی مانند Spring، Hibernate و Android، نقش اصلی در پیاده‌سازی مفاهیمی مانند تزریق وابستگی (Dependency Injection)، نگاشت اشیاء (ORM) و مدیریت چرخه‌ی حیات کامپوننت‌ها دارند.

#کاربرـپیشرفته


🆔 @javapro_ir
🆔 @group_javapro
5👍4
📌 آشنایی با ساخت انوتیشن سفارشی در زبان جاوا

در زبان جاوا، علاوه بر استفاده از انوتیشن‌های از پیش‌تعریف‌شده مانند @Override و @Deprecated، می‌توان انوتیشن‌های سفارشی ایجاد کرد. این قابلیت امکان افزودن توضیحات معنایی مخصوص پروژه را فراهم می‌سازد و اغلب در چارچوب‌هایی مانند Spring برای پیاده‌سازی ویژگی‌های پیشرفته به کار می‌رود.

برای تعریف یک انوتیشن سفارشی، از کلمه کلیدی @interface استفاده می‌شود.


🔷 مثال عملی: تعریف یک انوتیشن سفارشی برای مستندسازی متدها

می‌خواهیم انوتیشنی بسازیم به نام @Author که مشخص کند کدام برنامه‌نویس مسئول یک متد بوده است و چه زمانی آن را ایجاد کرده است.


import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Author {
String name();
String date();
}


🔍 توضیح بخش‌ها:

* @Retention(RetentionPolicy.RUNTIME)
مشخص می‌کند که این انوتیشن در زمان اجرا نیز در دسترس باشد (برای پردازش با Reflection).

* @Target(ElementType.METHOD)
تعیین می‌کند که این انوتیشن فقط روی متدها قابل استفاده باشد.

* name() و date()
دو ویژگی (member) هستند که در زمان استفاده باید مقداردهی شوند.


🔷 استفاده از انوتیشن سفارشی در کلاس:


public class MyClass {

@Author(name = "Saleh", date = "2025-06-28")
public void myMethod() {
System.out.println("Custom annotation used.");
}
}



🧠 نکات مهم:

* می‌توان برای اعضای انوتیشن مقدار پیش‌فرض تعریف کرد:


String level() default "beginner";


* انوتیشن‌های سفارشی به تنهایی کاربردی نیستند؛ اغلب با استفاده از Reflection یا چارچوب‌هایی مانند Spring پردازش می‌شوند.

#کاربرـحرفهـای


🆔 @javapro_ir
🆔 @group_javapro
👍4