آموزش رایگان صفر تا صد جاوا (Java) به زبان ساده
-
معرفی جاوا
-
ساخت اولین برنامه: Hello World
-
چاپ متن در جاوا
-
چاپ عدد در جاوا
-
نظرات (Comments) در جاوا
-
متغیرها جاوا
-
نمایش متغیرها (Display Variables) در جاوا
-
تعریف چند متغیر در جاوا (Java)
-
شناسایی متغیرها (Identifiers)
-
معرفی متغیرها با مثالهای واقعی
-
آشنایی با انواع دادهها (Data Types) در جاوا
-
آشنایی با اعداد (Numbers) در جاوا
-
آشنایی با نوع داده بولین (Boolean)
-
کار با کاراکترها و رشتهها در جاوا (Characters and Strings in Java)
-
مثال واقعی برای استفاده از انواع داده در جاوا
-
آشنایی با انواع دادههای غیرابتدایی (Non-Primitive Data Types)
-
آموزش مفهوم Type Casting در جاوا
-
آموزش عملگرها (Operators) در جاوا
-
آشنایی با رشتهها (Strings) در جاوا
-
آشنایی با الحاق رشتهها (String Concatenation)
-
اضافه کردن اعداد و رشتهها در جاوا
-
رشتهها و کاراکترهای خاص در جاوا
-
آشنایی با کلاس Math در جاوا
-
آشنایی با Boolean در جاوا
-
آشنایی با شرطها (Conditions) و دستورات شرطی (If Statements) در جاوا
-
آشنایی با دستور else در برنامهنویسی
-
آموزش عبارت else if در برنامهنویسی
-
آشنایی با عملگر شرطی کوتاه در جاوا (Ternary Operator)
-
آموزش شرطها (If..Else) در برنامهنویسی با مثالهای واقعی
-
آشنایی با Switch Statement در جاوا
-
آشنایی با حلقه While در جاوا
-
حلقه Do/While در جاوا
-
آشنایی با حلقه For در جاوا
-
حلقههای تودرتو (Nested Loops) در جاوا
-
حلقه For-Each در جاوا
-
آموزش دستورات Break و Continue در جاوا
-
آشنایی با آرایهها در جاوا (Java Arrays)
-
آموزش ساده استفاده از حلقهها برای پیمایش آرایهها در جاوا (Java Arrays Loop)
-
آرایههای چندبعدی در جاوا (Java Multi-Dimensional Arrays)
-
معرفی متدها در جاوا (Java Methods)
-
آموزش ساده: پارامترها و آرگومانها در متدهای جاوا (Java Method Parameters)
-
مفهوم بازگشت مقدار در جاوا (Java Return)
-
روش بارگذاری مجدد متدها در جاوا (Java Method Overloading)
-
آشنایی با محدوده متغیرها در جاوا (Java Scope)
-
بازگشت در جاوا (Java Recursion)
-
آشنایی با برنامهنویسی شیءگرا (Object-Oriented Programming یا OOP)
-
برنامهنویسی شیءگرا در جاوا (Java Classes/Objects)
-
آشنایی با ویژگیهای کلاس در جاوا (Java Class Attributes)
-
متدها در جاوا (Java Methods)
-
Constructor در جاوا
-
آشنایی با Modifiers در جاوا (Java Modifiers)
-
مفهوم کپسولهسازی (Encapsulation) در جاوا
-
راهنمای جامع پکیجها (Packages) و API در جاوا
-
وراثت (Inheritance) در جاوا – ساده و قابل فهم
-
پلیمورفیسم (Polymorphism) در جاوا به زبان ساده
-
کلاسهای داخلی (Inner Classes) در جاوا
-
کلاسها و متدهای انتزاعی (Abstract Classes and Methods) در جاوا
-
رابطها (Interfaces) در جاوا
-
آشنایی با Enum در جاوا
-
دریافت ورودی از کاربر در جاوا (Scanner)
-
تاریخ و زمان در جاوا (Java Date and Time)
-
آشنایی با ArrayList در جاوا
-
آشنایی با LinkedList در جاوا
-
مرتبسازی لیست در جاوا (Java List Sorting)
-
آشنایی با HashMap در جاوا
-
آشنایی با HashSet در جاوا
-
آشنایی با Iterator در جاوا
-
کلاسهای بستهبندی (Wrapper Classes) در جاوا
-
استفاده از try...catch برای مدیریت خطاها
-
آشنایی با عبارات منظم (Regular Expressions) در جاوا
-
آشنایی با Threads در جاوا 🚀
-
آشنایی با Lambda Expressions در جاوا
-
مرتبسازی پیشرفته در جاوا
-
آشنایی با کلمه کلیدی assert در جاوا
-
آشنایی با کلمه کلیدی abstract در جاوا
-
آشنایی با کلمه کلیدی boolean در جاوا
-
آشنایی با کلمه کلیدی break در جاوا
-
آشنایی با کلمه کلیدی byte در جاوا
-
آشنایی با کلمه کلیدی case در جاوا
-
آشنایی با کلمه کلیدی catch در جاوا
-
آشنایی با کلمه کلیدی char در جاوا
-
آشنایی با کلمه کلیدی class در جاوا
-
آشنایی با کلمه کلیدی continue در جاوا
-
آشنایی با کلمه کلیدی default در جاوا
-
آشنایی با کلمه کلیدی do در جاوا
-
آشنایی با کلمه کلیدی double در جاوا
-
آشنایی با کلمه کلیدی else در جاوا
-
آشنایی با کلمه کلیدی enum در جاوا
-
آشنایی با کلمه کلیدی exports در جاوا
-
آشنایی با کلمه کلیدی Inheritance در جاوا
-
آشنایی با کلمه کلیدی final در جاوا
-
آشنایی با کلمه کلیدی finally در جاوا
-
آشنایی با کلمه کلیدی float در جاوا
-
آشنایی با کلمه کلیدی for در جاوا
-
آشنایی با کلمه کلیدی if در جاوا
-
آشنایی با کلمه کلیدی implements در جاوا
-
آشنایی با کلمه کلیدی import در جاوا
-
آشنایی با کلمه کلیدی instanceof در جاوا
-
آشنایی با کلمه کلیدی int در جاوا
-
آشنایی با کلمه کلیدی Interface در جاوا
-
آشنایی با کلمه کلیدی long در جاوا
-
آشنایی با کلمه کلیدی module در جاوا
-
آشنایی با کلمه کلیدی native در جاوا
-
آشنایی با کلمه کلیدی new در جاوا
-
آشنایی با کلمه کلیدی package در جاوا
-
آشنایی با کلمه کلیدی private در جاوا
-
آشنایی با کلمه کلیدی protected در جاوا
-
آشنایی با کلمه کلیدی public در جاوا
-
آشنایی با کلمه کلیدی return در جاوا
-
آشنایی با کلمه کلیدی requires در جاوا
-
آشنایی با کلمه کلیدی short در جاوا
-
آشنایی با کلمه کلیدی static در جاوا
-
آشنایی با کلمه کلیدی super در جاوا
-
آشنایی با کلمه کلیدی switch در جاوا
-
آشنایی با کلمه کلیدی synchronized در جاوا
-
آشنایی با کلمه کلیدی this در جاوا
-
آشنایی با کلمه کلیدی throw در جاوا
-
آشنایی با کلمه کلیدی throws در جاوا
-
آشنایی با کلمه کلیدی transient در جاوا
-
آشنایی با کلمه کلیدی try...catch در جاوا
-
آشنایی با کلمه کلیدی var در جاوا
-
آشنایی با کلمه کلیدی void در جاوا
-
آشنایی با کلمه کلیدی volatile در جاوا
-
آشنایی با کلمه کلیدی while در جاوا
-
متد charAt() در جاوا
-
متد codePointAt() در جاوا
-
متد codePointBefore() در جاوا
-
متد codePointCount() در جاوا
-
متد compareTo() در جاوا
-
متد compareToIgnoreCase() در جاوا
-
متد concat() در جاوا
-
متد contains() در جاوا
-
متد contentEquals() در جاوا
-
متد copyValueOf() در جاوا
-
متد endsWith() در جاوا
-
متد equals() در جاوا
-
متد equalsIgnoreCase() در جاوا
-
متد format() در جاوا
-
متد getBytes() در جاوا
-
متد getChars() در جاوا
-
متد hashCode() در جاوا
-
متد indexOf() در جاوا
-
متد isEmpty() در جاوا
-
متد join() در جاوا
-
متد lastIndexOf() در جاوا
-
متد length() در جاوا
-
متد matches() در جاوا
-
متد offsetByCodePoints() در جاوا
-
متد regionMatches() در جاوا
-
متد replace() در جاوا
-
متد replaceAll() در جاوا
-
متد replaceFirst() در جاوا
-
متد split() در جاوا
-
متد startsWith() در جاوا
-
متد subSequence() در جاوا
-
متد substring() در جاوا
-
متد toCharArray() در جاوا
-
متد toLowerCase() در جاوا
-
متد toString() در جاوا
-
متد toUpperCase() در جاوا
-
متد trim() در جاوا
-
متد valueOf() در جاوا
-
متد abs() در جاوا
-
متد acos() در جاوا
آشنایی با Modifiers در جاوا (Java Modifiers)
در زبان برنامهنویسی جاوا، Modifiers یا تعدیلکنندهها کلماتی هستند که برای کنترل سطح دسترسی (Access Level) یا افزودن ویژگیهای خاص به کلاسها (Classes)، متغیرها (Attributes)، متدها (Methods) و سازندهها (Constructors) استفاده میشوند.
Modifiers به دو دسته اصلی تقسیم میشوند:
- تعدیلکنندههای دسترسی (Access Modifiers) – مشخص میکنند که چه کدی میتواند به بخشهای مختلف یک کلاس دسترسی داشته باشد.
- تعدیلکنندههای غیردسترسی (Non-Access Modifiers) – ویژگیهای خاصی به کلاسها، متغیرها و متدها اضافه میکنند، بدون اینکه سطح دسترسی را تغییر دهند.
1. تعدیلکنندههای دسترسی (Access Modifiers)
برای کلاسها (Classes)
در جاوا، یک کلاس میتواند دارای دو نوع تعدیلکننده دسترسی باشد:
Modifier | توضیح |
---|---|
public | کلاس از همه جا در دسترس است. |
default | کلاس فقط در همان پکیج (Package) قابل دسترسی است. اگر هیچ تعدیلکنندهای مشخص نشود، مقدار پیشفرض default خواهد بود. |
🔹 مثال: تفاوت public
و default
در کلاسها
// این کلاس عمومی است و میتوان از هر جای برنامه به آن دسترسی داشت.
public class PublicClass {
// کدهای داخل کلاس...
}
// این کلاس فقط درون همان پکیج قابل دسترسی است.
class DefaultClass {
// کدهای داخل کلاس...
}
برای متغیرها، متدها و سازندهها
تعدیلکنندههای دسترسی برای متغیرها، متدها و سازندهها چهار نوع هستند:
Modifier | توضیح |
---|---|
public | از هر جای برنامه قابل دسترسی است. |
private | فقط درون همان کلاس قابل استفاده است. |
default | فقط در همان پکیج قابل دسترسی است. |
protected | در همان پکیج و کلاسهای فرزند (Subclasses) قابل استفاده است. |
🔹 مثال: تفاوت تعدیلکنندهها در متغیرها و متدها
class Person {
public String name = "Ali"; // قابل دسترسی از همه جا
private int age = 25; // فقط درون همین کلاس قابل استفاده است
protected String job = "Engineer"; // در همان پکیج و کلاسهای فرزند قابل دسترسی است
String city = "Tehran"; // `default` (فقط در همان پکیج قابل دسترسی است)
public void sayHello() {
System.out.println("Hello!");
}
private void showAge() {
System.out.println("Age: " + age);
}
}
💡 چالش:
چرا متغیر age
را نمیتوان مستقیماً از کلاس دیگری چاپ کرد؟ راهحلی برای دسترسی به مقدار آن ارائه دهید.
2. تعدیلکنندههای غیردسترسی (Non-Access Modifiers)
این نوع از تعدیلکنندهها ویژگیهای خاصی به کلاسها، متغیرها و متدها اضافه میکنند.
برای کلاسها (Classes)
Modifier | abstract |
---|---|
final | کلاس را نمیتوان ارثبری (Extend) کرد. |
abstract | از این کلاس نمیتوان شیء ساخت و باید به ارث برده شود. |
🔹 مثال: استفاده از final
و abstract
در کلاسها
// کلاس نهایی که نمیتوان از آن ارثبری کرد
final class FinalClass {
// کدهای کلاس...
}
// کلاس انتزاعی که نمیتوان از آن شیء ساخت
abstract class AbstractClass {
abstract void doSomething(); // متد انتزاعی که باید در کلاس فرزند پیادهسازی شود.
}
برای متغیرها و متدها
Modifier | توضیح |
---|---|
final | مقدار متغیر یا رفتار متد تغییر نمیکند. |
static | متد یا متغیر به کلاس تعلق دارد، نه به شیء. |
abstract | فقط در کلاسهای انتزاعی قابل استفاده است و متدها بدنه ندارند. |
transient | هنگام ذخیرهسازی (Serialization) مقدار این متغیر نادیده گرفته میشود. |
synchronized | متد فقط توسط یک نخ (Thread) در هر لحظه قابل اجراست. |
volatile | مقدار متغیر همیشه از حافظه اصلی خوانده میشود، نه از کش (Cache) نخ. |
3. بررسی چند مثال کاربردی
۱) متغیر final
(تعیین مقدار ثابت)
class Main {
final int x = 10;
final double PI = 3.14;
public static void main(String[] args) {
Main obj = new Main();
obj.x = 50; // خطا: مقدار `final` قابل تغییر نیست
}
}
🔹 نکته: اگر یک متغیر final
باشد، مقدارش بعد از مقداردهی اولیه تغییر نمیکند.
۲) متد static (عدم نیاز به ایجاد شیء)
class Main {
static void staticMethod() {
System.out.println("این متد را میتوان بدون ایجاد شیء فراخوانی کرد.");
}
public void normalMethod() {
System.out.println("برای این متد باید ابتدا یک شیء بسازید.");
}
public static void main(String[] args) {
staticMethod(); // بدون نیاز به شیء
// normalMethod(); // خطا: نیاز به شیء دارد
Main obj = new Main();
obj.normalMethod(); // حالا میتوان متد را فراخوانی کرد
}
}
🔹 نکته: متدهای static
به کلاس تعلق دارند، اما متدهای معمولی به اشیاء.
۳) کلاس و متد abstract (تعریف متد بدون بدنه)
abstract class Animal {
abstract void makeSound(); // متد بدون بدنه
}
// کلاس فرزند که متد انتزاعی را پیادهسازی میکند
class Dog extends Animal {
void makeSound() {
System.out.println("Woof! Woof!");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // خروجی: Woof! Woof!
}
}
🔹 نکته: نمیتوان از Animal
شیء ساخت، اما میتوان از کلاس Dog
که آن را پیادهسازی کرده، استفاده کرد.
جمعبندی
Modifier | توضیح |
---|---|
public | دسترسی آزاد از همه جا |
private | محدود به داخل کلاس |
protected | قابل دسترس در پکیج و کلاسهای فرزند |
default | فقط در پکیج قابل دسترس |
final | مقدار یا رفتار غیرقابل تغییر |
static | متد/متغیر مربوط به کلاس، نه شیء |
abstract | متد بدون بدنه که در کلاس فرزند پیادهسازی میشود |
📌 تمرین:
یک کلاس Car
ایجاد کنید که شامل یک متغیر final
برای سرعت حداکثر و یک متد static
برای نمایش اطلاعات خودرو باشد.