جاواپرو | برنامه نویسی جاوا | Java
5.89K subscribers
1.15K photos
158 videos
383 files
1.3K links
🎓آکـــــــــادمی جاواپـــــــــــــــرو
آموزش پیش نیازهای برنامه نویسی
آموزش مقدماتی تا پیشرفته جاوا
آموزش Spring Boot
سفارش پروژه ، دوره و تدریس خصوصی: @rzutab
مشاهده دوره ها و ثبت نام👇
wwww.academyjavapro.com
گروه جاوا : @group_javapro
Download Telegram
📘نوشتن Unit Test در Java با استفاده از JUnit

نوشتن آزمون‌های واحد (Unit Test) یکی از مهم‌ترین مراحل در توسعهٔ نرم‌افزار است که به برنامه‌نویسان امکان می‌دهد صحت عملکرد بخش‌های مختلف کد را به‌صورت مستقل ارزیابی کنند. فریم‌ورک JUnit یکی از پرکاربردترین ابزارهای آزمون‌نویسی در زبان Java است و با فراهم‌کردن ساختار استاندارد، اجرای تست‌ها را بسیار ساده می‌کند.

۱. ساختار کلی یک Unit Test در JUnit

هر تست معمولاً شامل سه مرحلهٔ اصلی است:

1. آماده‌سازی (Arrange): ایجاد ورودی‌ها و اشیای مورد نیاز.
2. اقدام (Act): فراخوانی تابع یا کلاس مورد نظر.
3. ارزیابی (Assert): بررسی خروجی و اطمینان از صحت عملکرد.

JUnit از annotation‌ها برای مشخص‌کردن نقش هر متد استفاده می‌کند. متداول‌ترین آن‌ها عبارتند از:

@Test برای علامت‌گذاری یک متد تست
@BeforeEach برای عملیات قبل از هر تست
@AfterEach برای عملیات پاک‌سازی پس از هر تست

۲. مثال ساده از یک کلاس و تست‌های آن

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

مثال: کلاس اصلی

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}


مثال: نوشتن تست با JUnit

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class CalculatorTest {

    @Test
    public void testAddition() {
        Calculator calculator = new Calculator();
        int result = calculator.add(5, 7);
        assertEquals(12, result);
    }
}


در این مثال، ابتدا شیء کلاس Calculator ساخته می‌شود. سپس متد add با ورودی‌های مشخص فراخوانی می‌گردد و نتیجهٔ حاصل با مقدار مورد انتظار مقایسه می‌شود. در صورتی‌که خروجی برابر با مقدار مورد انتظار نباشد، تست شکست خواهد خورد.

۳. استفاده از Annotationهای تکمیلی

گاهی لازم است قبل از اجرای هر تست، یک شیء اولیه‌سازی شود. در این حالت از @BeforeEach استفاده می‌کنیم. این کار باعث جلوگیری از تکرار کد نیز می‌شود.

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class CalculatorTest {

    private Calculator calculator;

    @BeforeEach
    public void setUp() {
        calculator = new Calculator();
    }

    @Test
    public void testAddition() {
        int result = calculator.add(10, 20);
        assertEquals(30, result);
    }

    @Test
    public void testAdditionWithNegativeNumbers() {
        int result = calculator.add(-5, -8);
        assertEquals(-13, result);
    }
}


در این نمونه، مقداردهی شیء calculator تنها یک‌بار قبل از هر تست انجام می‌شود، و هر تست مستقل از تست دیگر اجرا می‌گردد.

۴. اهمیت Assertها در JUnit

JUnit مجموعه‌ای از متدهای Assert را ارائه می‌دهد که امکان ارزیابی دقیق خروجی‌ها را فراهم می‌کنند. برای مثال:

assertEquals(expected, actual)
assertTrue(condition)
assertThrows(exceptionType, executable)

با استفاده از assertThrows می‌توانیم عملکرد صحیح برنامه در پاسخ به ورودی‌های نامعتبر را بررسی کنیم:

@Test
public void testDivisionByZero() {
    assertThrows(ArithmeticException.class, () -> {
        int x = 10 / 0;
    });
}


۵. نتیجه‌گیری

آزمون‌نویسی با JUnit روشی استاندارد و قابل اعتماد برای تضمین کیفیت کد است. با تعریف تست‌های واحد، توسعه‌دهنده می‌تواند ایرادهای احتمالی را در همان مراحل اولیه تشخیص دهد و از ایجاد خطاهای پیچیده در آینده جلوگیری کند. استفادهٔ صحیح از Annotationها، Assertها و ساختار مناسب تست‌ها، موجب افزایش پایداری، خوانایی و قابلیت نگه‌داری کد خواهد شد.
#کاربرـحرفهـای


🆔 @javapro_ir
🆔 @group_javapro
👍52
کتاب یادگیری جاوا در ۲٠ روز!

عنوانش بیشتر جنبه انگیزشی و بازاریابی داره ولی شما می توانید از آن به عنوان یک نقشه راه مخصوصا اکر تازه کار هستید استفاده کنید و انتظار نداشته باشید در ۲٠ روز بتوانید جاوا را یاد بگیرید.

در ادامه پی دی اف این کتاب در کانال قرار داده می شود

🆔 @javapro_ir
🆔 @group_javapro
Become JAVA Expert in just 20 Days PDF.pdf
4 MB
کتاب «تنها در ۲٠ روز متخصص جاوا شوید»

تازه کارها می توانند از این کتاب به عنوان نقشه راه استفاده کنند و نباید انتظار داشته باشند که یک زبان برنامه نویسی نظیر Java را در ۲٠ روز یاد بگیرند!

منبع این کتاب

🆔 @javapro_ir
🆔 @group_javapro
مصاحبه بعدی جاوای خود را با قدرت پشت سر بگذارید: نقشه راه عملی!

مفاهیمی را تسلط پیدا کنید که همیشه در مصاحبه‌ها مطرح می‌شوند، نه چیزهای پراکنده‌ی اینترنت.

اگر می‌خواهید با اعتمادبه‌نفس وارد مصاحبه جاوا شوید، روی چیزهایی تمرکز کنید که واقعاً مهم هستند.
حدود ۸۰٪ از مصاحبه‌های جاوا حول چند موضوع اصلی می‌چرخند.
این موارد را عمیقاً درک کنید، نه اینکه فقط حفظ کنید.

چک‌لیست زیر برای شماست:

➤ر Core Java

تفاوت JDK vs JRE vs JVM

چرا جاوا Platform-Independent است

ر Abstract class در برابر Interface

تفاوت final vs finally vs finalize

تفاوت Stack و Heap Memory

تفاوت Method Overloading و Method Overriding

تفاوت private vs protected

ر Constructor Overloading و کلیدواژه super

مفهوم static (متد، متغیر، کلاس)

پشت‌صحنه اجرای System.out.println()

نحوه‌ی کار Garbage Collection

➤ ر OOP (شی‌ءگرایی)

اصول OOP در جاوا

سطوح دسترسی (public / private / protected / default)

ر Composition در برابر Inheritance

هدف Abstract Class در برابر Concrete Class

تفاوت Constructor و Method

مشکل Diamond Problem و راه‌حل جاوا

تفاوت local و instance variables

مفهوم Marker Interfaces

ر ➤ Data Structures & Algorithms (ساختار داده و الگوریتم‌ها)

چرا String تغییرناپذیر است (Immutable)؛ تفاوت string literal و new String()

مرور Java Collections Framework

ر ArrayList در برابر LinkedList

ر HashMap vs TreeMap و HashSet vs TreeSet

تفاوت Iterator و ListIterator

ر Comparable و مرتب‌سازی سفارشی

مباحث ضروری java.util.concurrent

ر ➤ Exception Handling (مدیریت استثنا)

ر Exception چیست و چگونه propagate می‌شود

تفاوت Checked و Unchecked Exceptions

استفاده از try–catch–finally

تفاوت throw vs throws

کلاس پایه‌ی Exception

ر ➤ Multithreading (چندریسمانی)

مفهوم Thread و چرخه عمر آن

تفاوت Process و Thread؛ اولویت‌های Thread

مبانی Context Switching

تفاوت User Threads و Daemon Threads

ر Synchronization، بن‌بست (Deadlock)، متدهای wait() / notify()

تفاوت synchronized و volatile

➤ نکته تکمیلی Java EE

تفاوت Servlet و JSP

➤ نکته حرفه‌ای

⚠️ حفظ نکنید!
برای هر مفهوم یک برنامه کوچک بنویسید، آن را دیباگ کنید و سعی کنید با صدای بلند توضیحش دهید.
این دقیقاً همان چیزی است که مصاحبه‌کننده‌ها دنبال آن هستند.


🆔 @javapro_ir
🆔 @group_javapro
👍4
سازوکارهای داخلی JVM شامل JIT، Heap و Stack

عبارت «ماشین مجازی جاوا» یا JVM نقش یک محیط اجرایی مستقل را ایفا می‌کند که کدهای Bytecode را به صورت ایمن، قابل حمل و مدیریت‌شده اجرا می‌کند. این سازوکار با مدیریت حافظه، اجرای بهینه‌شده و سازماندهی چرخهٔ حیات برنامه، نقش بسیار مهمی در کیفیت و کارایی نهایی نرم‌افزار دارد.

۱. آشنایی با JIT Compiler 🚀

عبارت «Just-In-Time Compiler» یا JIT به مکانیزمی اشاره دارد که در زمان اجرا بخش‌هایی از Bytecode را به کد بومی و قابل فهم برای CPU تبدیل می‌کند.
این فرایند موجب افزایش چشمگیر سرعت می‌شود، زیرا اجرای کد کامپایل‌شده بسیار سریع‌تر از تفسیر مستقیم است.

مثال

public int multiply(int a, int b) {
    return a * b;
}


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

۲. آشنایی با Memory Heap در JVM 🧠

عبارت «Heap» به حافظه‌ای اشاره دارد که JVM برای نگهداری اشیا و داده‌های پویا اختصاص می‌دهد.
این بخش شامل نواحی مختلفی مانند Young Generation و Old Generation است و توسط Garbage Collector مدیریت می‌شود.
این ساختار امکان می‌دهد برنامه از تعداد زیادی شیء استفاده کند بدون اینکه توسعه‌دهنده مجبور به مدیریت دستی حافظه باشد.

مثال

Person p = new Person("Alice");


این شیء در Heap ذخیره می‌شود و تا زمانی که به آن ارجاع وجود داشته باشد در حافظه باقی می‌ماند.
این روند تضمین می‌کند کنترل حافظه کاملاً مدیریت‌شده و امن باشد.

۳. آشنایی با Stack در JVM 📚

عبارت «Stack Memory» به بخشی از حافظهٔ JVM اشاره دارد که برای ذخیرهٔ متغیرهای محلی، پارامترهای متد و اطلاعات مربوط به اجرای هر تابع استفاده می‌شود.
این بخش برای هر Thread به‌صورت مستقل ساخته می‌شود و سرعت دسترسی بسیار بالایی دارد.

مثال

public void example() {
    int x = 10;   // ذخیره در Stack
    int y = 20;   // ذخیره در Stack
}


این متغیرها با اتمام متد به‌صورت خودکار از Stack حذف می‌شوند.
این ویژگی مدیریت سریع، ایمن و بسیار کارآمد را تضمین می‌کند.

۴. نتیجه‌گیری نهایی 🎯

عبارت «درک ساختار داخلی JVM» برای هر برنامه‌نویس حرفه‌ای جاوا ضروری است، زیرا کارایی، مدیریت حافظه و رفتار اجرای برنامه‌ها به این مفاهیم وابسته است.
این شناخت امکان تصمیم‌گیری بهتر در طراحی الگوریتم‌ها، بهینه‌سازی کد و رفع مشکلات زمان اجرا را فراهم می‌کند.
این مفاهیم شامل JIT برای سرعت، Heap برای مدیریت اشیای پویا و Stack برای مدیریت اجرای متدها هستند و هر یک نقش بنیادی در عملکرد نهایی برنامه ایفا می‌کنند.

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


🆔 @javapro_ir
🆔 @group_javapro
5
اگر از طریق درگاه پرداخت نتونستید در دوره مدنظر شرکت کنید می توانید از طریق کارت به کارت اقدام به ثبت نام نمایید

جهت ثبت نام با کارت به کارت به آی دی زیر پیام بدید

@rzutab
💯1
راهنما و پشتیبانی ثبت نام دوره ها
@rzutab
📣درگاه پرداخت آکادمی جاواپرو درست شد


📚لیست دوره های تخصصی مرتبط با جاوا
جاواپرو | برنامه نویسی جاوا | Java pinned «📣درگاه پرداخت آکادمی جاواپرو درست شد 📚لیست دوره های تخصصی مرتبط با جاوا»
جاواپرو | برنامه نویسی جاوا | Java pinned «لیست مهارت های مورد نیاز برای شروع برنامه نویسی و بازارکار جاوا... 🔥🔥🔥🔥🔥🔥 دوره پرتاب | آموزش پیش نیازهای برنامه نویسی دوره مقدماتی جاوا دوره شاهکار پیشرفته جاوا دوره طلایی Spring Core دوره فریمورک Spring Boot دوره پروژه محور Spring Boot-سیستم…»
چرا در کلاس‌های جاوا از Getter و Setter استفاده می‌کنیم؟ 🔍

در برنامه‌نویسی شی‌ءگرا، اصل مهم Encapsulation یا «کپسوله‌سازی» بیان می‌کند که داده‌های داخلی یک شیء باید محافظت شوند و تنها از طریق متدهای کنترل‌شده قابل دسترسی یا تغییر باشند. در جاوا، این کنترل عمدتاً با استفاده از getter و setter انجام می‌شود. این رویکرد نه‌تنها امنیت داده‌ها را افزایش می‌دهد، بلکه انعطاف‌پذیری و قابلیت نگه‌داری کد را نیز بهبود می‌بخشد. 🛡️

۱. ضرورت جلوگیری از دسترسی مستقیم به فیلدها 🔒

استفاده از getter و setter این امکان را فراهم می‌کند که فیلدها به‌صورت private تعریف شوند و هیچ بخش دیگری از برنامه به‌صورت مستقیم آن‌ها را تغییر ندهد. این روش احتمال بروز اشتباه، ناسازگاری و تغییرات ناخواسته را به حداقل می‌رساند.

۲. امکان اعمال محدودیت و اعتبارسنجی 🧩

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

۳. امکان تغییر پیاده‌سازی بدون ایجاد وابستگی اضافی 🔧

در صورتی‌که فیلدی public باشد، هر تغییری در آن ممکن است کدهای دیگر را تحت تأثیر قرار دهد. اما با استفاده از getter و setter می‌توان نحوهٔ ذخیره یا پردازش داده را تغییر داد بدون اینکه بخش‌های دیگر برنامه تغییر کنند. این موضوع باعث افزایش پایداری و انعطاف‌پذیری نرم‌افزار می‌شود. ⚙️

۴. افزایش خوانایی و استاندارد بودن کد 📘

ساختار getter/setter بخشی از استاندارد توسعه در جاوا است. بسیاری از ابزارها و فریم‌ورک‌ها مانند Spring و Hibernate بر پایه همین ساختار کار می‌کنند. رعایت این الگو سازگاری کد با اکوسیستم جاوا را تضمین می‌کند. ✔️


مثال کامل از استفادهٔ Getter و Setter

تعریف کلاس بدون کنترل (روش اشتباه) 🚫

public class Person {
    public String name;
    public int age;
}


نمونهٔ استفاده‌ی نادرست:

Person p = new Person();
p.age = -5; // مقدار نامعتبر و بدون هیچ کنترلی



تعریف صحیح کلاس با Getter و Setter

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age >= 0) {
            this.age = age;
        } else {
            throw new IllegalArgumentException("سن نمی‌تواند منفی باشد");
        }
    }
}


نحوهٔ صحیح استفاده

Person p = new Person();
p.setName("Ali");
p.setAge(20);

System.out.println(p.getName()); // Ali
System.out.println(p.getAge());  // 20



نتیجه‌گیری 🎯

استفاده از getter و setter سه هدف کلیدی دارد:

حفاظت از داده‌ها و جلوگیری از دسترسی مستقیم
اعمال کنترل و اعتبارسنجی پیش از تغییر مقادیر
افزایش پایداری و انعطاف‌پذیری کد در بلندمدت

این روش تضمین می‌کند که شیء‌ها در حالت معتبر باقی بمانند و کد قابل اعتمادتر و حرفه‌ای‌تر نوشته شود.

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


🆔 @javapro_ir
🆔 @group_javapro
👍72
جاواپرو | برنامه نویسی جاوا | Java pinned «📚لیست دوره های رایگان آکادمی جاواپرو آموزش برنامه نویسی سوکت با زبان جاوا آموزش ساخت برنامه ساده مدیریت ایمیل ها با JavaFX آموزش ساخت برنامه آزمون تستی با JavaFX آموزش ساخت ربات تلگرام ساده با جاوا آموزش مباحث JavaFX آموزش ساخت ماشین حساب با JavaFX…»
سؤالات مصاحبه جاوا و پاسخ‌های یک‌خطی
اگر در حال آماده شدن برای مصاحبه برنامه‌نویسی جاوا هستید، موارد زیر می‌توانند در بخش کدنویسی بسیار کمک‌کننده باشند.


🟣 ۱. معکوس کردن یک رشته در یک خط

String reversed = new StringBuilder(str).reverse().toString();

نیازی به حلقه یا جابه‌جایی دستی نیست. کلاس StringBuilder یک متد داخلی به نام reverse() دارد که این کار را به‌صورت کارآمد و شیک انجام می‌دهد.

🟣 ۲. بررسی اینکه یک رشته پالیندروم است یا نه
boolean isPalindrome = str.equalsIgnoreCase(new StringBuilder(str).reverse().toString());

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


🟣 ۳. پیدا کردن بزرگ‌ترین عدد در یک لیست
int max = list.stream().max(Integer::compareTo).orElseThrow();

Stream API این کار را در یک خط تمیز انجام می‌دهد—بدون نیاز به حلقه یا مقایسه‌های دستی.

🟣 ۴. گرفتن اولین مقدار غیرخالی از چند Optional
String result = Stream.of(opt1, opt2, opt3)
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst()
.orElse("default");

این خط برای مصاحبه‌گرها بسیار تأثیرگذار است. نشان می‌دهد که Optional، Stream و زنجیره‌سازی تمیز را به خوبی می‌شناسید.

🟣 ۵. تبدیل یک لیست از رشته‌ها به حروف بزرگ
List<String> upper = list.stream()
.map(String::toUpperCase)
.toList();

کدی فانکشنال، تمیز و بسیار خوانا. متد toList() (در Java 16+) پایانی شیک برای این خط است.

🟣 ۶. شمارش تعداد تکرار یک کلمه در جمله

long count = Arrays.stream(sentence.split("\\s+"))
.filter(w -> w.equalsIgnoreCase("java"))
.count();

نمونه‌ای سریع از اینکه Stream حتی کارهای کوچک مثل شمارش کلمات را ساده می‌کند.

🟣 ۷. تولید یک رمز ۶ رقمی (OTP) تصادفی

int otp = 100000 + new Random().nextInt(900000);

ساده و مؤثر؛ همیشه یک OTP شش‌رقمی تولید می‌کند، بدون نیاز به قالب‌بندی اضافی.

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


🆔 @javapro_ir
🆔 @group_javapro
👍3
📣اطلاعیه
دانشجویان عزیز آکادمی جاواپرو، از امروز ۱۳ آذر ۱۴۰۴ می‌توانید از طریق رمز یکبار مصرف به پنل دوره‌های خود وارد شوید یا ثبت‌نام کنید.

اکانت افرادی که با شماره همراه یا ایمیل نامعتبر(فیک) ثبت‌نام کرده بودند، مسدود شده است. این دسته از افراد می‌توانند مجدداً با شماره همراه و ایمیل معتبر در آکادمی جاواپرو ثبت‌نام کنند.

در صورت نیاز به پشتیبانی برای ورود یا ثبت‌نام، لطفاً به آی‌دی زیر پیام دهید:
@rzutab


www.academyjavapro.com

🆔 @javapro_ir
🆔 @group_javapro
3