تیکه پاره های جاوا
526 subscribers
93 photos
24 videos
7 files
58 links
سلام خوش اومدید. اینجا یادداشت ها و تکه های جاوا رو کنار هم قرار میدیم :) مطالب کاملا اختصاصی و دستنویس هستند. کپی فقط با ذکر منبع و آیدی کانال❤️

📝برای تدریس پیام دهید
محمدرضا عظیمی‌فرد
🆔 @mrvj475
Download Telegram
💎 تفاوت Constructor و Static Factory Method

🔆 سازنده یا Constructor:
زمانی که یک شی (نمونه / آبجکت) از یک کلاس ایجاد میکنیم، برای مقدار دهی اولیه و استفاده از مشخصات شی، یک کنستراکتور هم ایجاد میکنیم. در این حالت میتوان یکسری مقدار دهی اولیه برای شی قرار داد:
 MyClass class = new Class();

🔆 مشخصات و ویژگی های سازنده:
- اسم سازنده باید هم نام با اسم کلاس باشد
- نوع بازگشتی نداشته باشد
- اگر برای کلاس سازنده ای تعریف نشده باشد، کمپایلر بصورت خودکار یک default constructor برای کلاس قرار خواهد داد.
- سازنده میتواند دارای سطوح دسترسی public, private, protected, default باشد. (اگر سازنده ای پرایوت تعریف شده باشد، خارج از خود کلاس قابل استفاده نخواهد بود.)
- سازنده میتواند بدون ورودی باشد. (default constructor)
- یک کلاس میتواند شامل چند سازنده با ورودی های مختلف باشد.

💡 در مقابل میتوانیم از Static Factory Method ها هم استفاده کنیم. اگر داخل کلاس متدی ایجاد کنیم که نوع بازگشتی یک شی از همین کلاس باشه، به این متد Static Factory Method گفته میشه.

🔆 در اینجا میتونید مزایای استفاده از Static Factory Methods رو مشاهده کنید:
دارای اسم با معنی
نوع بازگشتی دارند
میتوان یک شی ( نمونه / ابجکت) بصورت کنترل شده از یک کلاس بوسیله این متد ها ایجاد کرد (برای مثال الگوی سینگلتون که در آینده با هم بررسی خواهیم کرد)
از آنجا که Static Factory Methods دارای اسم با معنی میباشد، به خوانایی کد کمک میکند

🔰مثال:

LocalDateTime now = LocalDateTime.now();
ایجاد یک نمونه از کلاس LocalDateTime بدون استفاده از کنستراکتور و بوسیله متد استاتیک now
String str = String.valueOf(4);
ایجاد یک نمونه از کلاس String و استفاده از متد استاتیک valueOf برای تبدیل عدد به رشته

#constructor #static #static_factory_method #static_method

@pieceJava
👍4
💎 کلیدواژه static

🔆 یکی از 57 کلیدواژه رزرو شده در جاوا، کلیدواژه استاتیک static میباشد.

💡 از کلیدواژه های رزرو شده برای اسامی متغیر ها و... نمیتوان استفاده کرد.

در اصل کلیدواژه استاتیک برای مدیریت حافظه به کار میرود. در جاوا متغیر ها ، متد ها، بلاک ها ( {} ) و کلاس های تو در تو میتوانند بعنوان استاتیک در نظر گرفته شوند. هرگاه یک متغیر یا یک متد استاتیک در نظر گرفته شود، در واقع فقط یک نمونه از آن میان نمونه (ابجکت) های آن کلاس مشترک میباشد.

🔅 بلاک استاتیک (static block)
معمولا از این نوع بلاک برای مقدار دهی اولیه داده های استاتیک استفاده میشود. در واقع هر زمانی که کلاس داخل حافظه بارگذاری شد، خطوط داخل بلاک هم اجرا میشوند نکته حائز اهمیت آن است که بلاک های استاتیک پیش از سازنده ها (کنستراکتور) اجرا میشوند:
(برای خوانایی بهتر کد ها، گوشی خود را در حالت افقی قرار دهید و یا در ادامه از تصاویر زیر پست استفاده کنید)

public class PieceJava {
//Telegram: @PieceJava
public static void main(String[] args) {
new staticSample();
// OUTPUT: Inside static block
// Inside constructor
}
}
class staticSample{
static int x;
static {
System.out.println("Inside static block");
x=x*6;
}
public staticSample(){
System.out.println("Inside constructor");
}
}
🔅 متغیر استاتیک
زمانی که یک متغیر استاتیک ایجاد میکنید، فقط یک کپی از آن ایجاد و میان باقی نمونه(ابجکت، شی، اشیا) های کلاس به اشتراک گذاشته میشود. با توجه به این تعریف، به این نوع متغیر ها متغیر های سراسری (global variables) نیز گفته میشود. زیرا میان نمونه ها مشترک هستند. متغیر های استاتیک فقط در سطح کلاس میتوانند تعریف شوند.
🔰 برای مثال:

public class PieceJava {
public static void main(String[] args) {
staticSample sample = new staticSample();
staticSample sample2 = new staticSample();
sample.setNumber(4);
System.out.println(sample2.getNumber()); // prints 4
}
}
class staticSample{
private static int number;

public void setNumber(int number){
this.number = number;
}
public int getNumber(){
return number;
}
}
در این مورد مقدار متغیر را در ابجکت sample مقدار دهی کردیم و در ادامه مقدار ذخیره شده را از ابجکت sample2 چاپ کردیم. این به این معناست که مقدار متغیر میان نمونه های ایجاد شده، ثابت میباشد.

🔅 متد استاتیک
این متد ها چند ویژگی خاص دارند:
⭕️ متد های استاتیک وابسته به نمونه های ایجاد شده از کلاس نیستند. در واقع متعلق به خود کلاس هستند. این یعنی بدون ایجاد نمونه از کلاس میتوانید از آنها استفاده کنید.
⭕️ متد های استاتیک فقط میتوانند به داده های استاتیک و دیگر متد های استاتیک دسترسی داشته باشند.

👈 بهمین خاطر معمولا متد هایی که پیش از متد main برای استفاده در این متد تعریف میکنید حتما باید استاتیک تعریف شوند. زیرا در غیر این صورت باید یک نمونه از خود کلاس در متد main تعریف کنید.

مثال:
public class PieceJava {
//Telegram: @PieceJava
public static void main(String[] args) {
staticSample.print();
//OUTPUT: Inside static method
}
}
class staticSample{
public static void print(){
System.out.println("Inside static method");
}
}

——
#static #keywords
از اینجا بخوانید:
👈 کلیدواژه final
👈 تفاوت Constructor و Static Factory Method
@pieceJava
👍51
💎 وارد کردن ایستا (import static )
🔗 پیش از همه در مورد کلیدواژه ایستا (static) از اینجا بخوانید


🔆 وارد کردن ( import) یک پکیج در جاوا به برنامه نویس اجازه استفاده از کلاس های پکیج مورد نظر را میدهد ولی اگر بخواهیم فقط از متد های استاتیک کلاس وارد شده استفاده کنیم، میتوان بجای ایمپورت کردن عادی، کلاس را بصورت ایستا ایمپورت کنیم (import static...)

ایمپورت کردن ایستا کاملا مشابه ایمپورت کردن عادی است. همانطور که در ایمپورت عادی احتیاجی به صدا زدن دوباره اسم پکیج برای استفاده از کلاس نیست، در حالت ایمپورت ایستا، لزومی به صدا زدن اسم کلاس نیست و میتوان بصورت مستقیم از اعضای ایستای کلاس مورد نظر استفاده کرد.
✏️ برای مثال:

import static java.lang.System.out;

public class Ithooloo {
//Telegram: @pieceJava
public static void main(String[] args) {
out.println("hello");
}
}
✏️ مثال 2:
import static java.lang.Math.*;
public class Ithooloo {
//Telegram: @pieceJava
public static void main(String[] args) {
double number1 = pow(2,3);
double number2 = sqrt(4);
double number3 = PI;
}
}
✏️ مثال 3:
import java.time.LocalDate;
import static java.time.LocalDate.*;
public class Ithooloo {
//Telegram: @pieceJava
public static void main(String[] args) {
LocalDate time = now();
}
}


مهم!
⭕️ چه زمانی از این حالت استفاده کنیم؟
💬 اولا بهتره خیلی کم اینکارو انجام بدین! دلیلش هم برمیگرده به خوانایی کد. مثلا اگه همزمان از خاصیت ارث بری هم دارین استفاده میکنین، بهتره به اینصورت ایمپورت نکنین. چون ممکنه در آینده هم خودتون و هم توسعه دهنده ای که با کد شما سر و کار داره، سردرگم بشه :) و نه فقط توی بحث ارث بری بلکه در کل بهتره کم از این خاصیت استفاده بشه.

#import #static
———
☕️@pieceJava
👍3