💎 اورراید در جاوا (Override🌀)
🌀اورراید زمانی اتفاق می افتد که کلاس فرزند (زیر کلاس، subclass)، متدی دقیقا مشابه یکی از متد های کلاس پدر (والد / superclass / parent) داشته باشد.
🔰 مثال:
1. متد باید همنام متد کلاس والد باشد
2. پارامتر ها و نوع بازگشتی متد نیز باید مشابه متد کلاس والد باشد
3. باید رابطه ارث بری میان کلاس ها برقرار باشد
4. در صورتی که کلاس والد بصورت انتزاعی (abstract) باشد، باید تمامی متد های آن در کلاس فرزند اورراید شود.
❔ چه متد هایی قابل اورراید کردن نیست؟
❌ متد های فاینال (Final methods):
متد های فاینل قابل اورراید کردن نیستند.
❌ سازنده (Constructor methods):
از انجا که سازنده ها باید هم نام کلاس باشند، قابل اورراید کردن نیستند.
❌ متد های ایستا (Static methods):
مانند متد های فاینال، متد های ایستا قابل اورراید کردن نیستند. متد های ایستا معمولا نسبت به کلاس فرزند، مخفی میمانند.
#Override #inheritence
@pieceJava
🌀اورراید زمانی اتفاق می افتد که کلاس فرزند (زیر کلاس، subclass)، متدی دقیقا مشابه یکی از متد های کلاس پدر (والد / superclass / parent) داشته باشد.
🔰 مثال:
class Parent{
public void job()
{
System.out.println("Programmer");
}
}
class child extends Parent{
@Override
public void job()
{
System.out.println("Programmer too :)");
}
}
🔆 قوانین اورراید کردن یک متد:1. متد باید همنام متد کلاس والد باشد
2. پارامتر ها و نوع بازگشتی متد نیز باید مشابه متد کلاس والد باشد
3. باید رابطه ارث بری میان کلاس ها برقرار باشد
4. در صورتی که کلاس والد بصورت انتزاعی (abstract) باشد، باید تمامی متد های آن در کلاس فرزند اورراید شود.
❔ چه متد هایی قابل اورراید کردن نیست؟
❌ متد های فاینال (Final methods):
متد های فاینل قابل اورراید کردن نیستند.
❌ سازنده (Constructor methods):
از انجا که سازنده ها باید هم نام کلاس باشند، قابل اورراید کردن نیستند.
❌ متد های ایستا (Static methods):
مانند متد های فاینال، متد های ایستا قابل اورراید کردن نیستند. متد های ایستا معمولا نسبت به کلاس فرزند، مخفی میمانند.
#Override #inheritence
@pieceJava
👍3
💎 اورلود در جاوا (Overload🌀)
🔆 توی جاوا اگر دو یا چند متد وجود داشته باشند، بطوریکه همنام ولی دارای پارامتر های متفاوت (تفاوت در تعداد پارامتر ها، نوع پارامتر ها) باشند، به این متد ها متد های اورلود شده گفته میشود و به این ویژگی اورلودینگ گفته میشود.
🔰مثال ( 1 ):
🔰مثال ( 2 ):
با توجه به تصویر، متد اول دو پارامتر ورودی از نوع int دریافت میکند در حالی که متد دوم دو پارامتر ورودی از نوع دابل دریافت میکند.
⭕️ قوانین اورلود کردن متد:
✅ متد ها باید همنام ولی در تعداد، نوع پارامتر ها تفاوت داشته باشند.
✅ نوع بازگشتی تعیین کننده اورلودینگ نیست (void, int ,....)
@pieceJava
🔆 توی جاوا اگر دو یا چند متد وجود داشته باشند، بطوریکه همنام ولی دارای پارامتر های متفاوت (تفاوت در تعداد پارامتر ها، نوع پارامتر ها) باشند، به این متد ها متد های اورلود شده گفته میشود و به این ویژگی اورلودینگ گفته میشود.
🔰مثال ( 1 ):
void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }
برای مثال توی این مورد متد func() اورلود شده است. همانطور که پیش تر اشاره شد، این متد ها همنام ولی در تعداد و نوع پارامتر های ورودی متفاوتند.🔰مثال ( 2 ):
با توجه به تصویر، متد اول دو پارامتر ورودی از نوع int دریافت میکند در حالی که متد دوم دو پارامتر ورودی از نوع دابل دریافت میکند.
⭕️ قوانین اورلود کردن متد:
✅ متد ها باید همنام ولی در تعداد، نوع پارامتر ها تفاوت داشته باشند.
✅ نوع بازگشتی تعیین کننده اورلودینگ نیست (void, int ,....)
@pieceJava
👍3
💎 مقایسه اشیا (ابجکت ها) در جاوا
🔆 توی جاوا هر کلاس بصورت پیشفرض از کلاس Object ارث بری میکند. کلاس Object شامل متد هایی مثل hashCode, equals, toString و... میشود که کاربرد گسترده ای در رابطه با کار با ابجکت ها دارند. به همین منظور برای مقایسه ابجکت ها از متد equals و hashCode از کلاس Object استفاده میشود.
🔗در مورد کلاس آبجکت از اینجا بخوانید
🔅هش کد در جاوا یک عدد صحیح 32 بیتی میباشد. هش کد یک مقدار منحصر بفرده که بصورت پیشفرض توسط JVM برای هر نمونه (شی / ابجکت) تعریف میشود.
👈 طبق این تعریف اگر دو ابجکت دارای هش کد برابر باشند، یعنی با هم برابرند با توجه به متد equals ولی لزوما دو ابجکت با هش کد برابر، با هم برابر نیستند. یعنی این شرط لازم و کافی نیست.
برای بررسی برابر بودن ابجکت ها، لازم است متد equals پیاده سازی شود.
🔰 مثال:
💠 کلاس Employee
داخل کلاس متد equals را اورراید میکنیم و فیلد هارا با هم مقایسه میکنیم (البته بستگی به این داره که برابری از نظر شما چه شرایطی داشته باشد. توی این مثال من شرط برابری را برابر بودن فیلد ها قرار دادم).
(برای بهتر دیده شدن کد ها، گوشی را در حالت افقی نگه دارید)
(❔) شرط اول: this == o به این معناست که اگر هر دو ابجکت به یک ادرس از حافظه اشاره کنند، یعنی با هم برابرند و مقدار ترو را برگرداند.
(❔) شرط دوم: اگر ابجکت o از یک کلاس نباشد و یا مقدار null را داشته باشد، یعنی با هم برابر نیستند و مقدار فالس را برگرداند.
✅ اگر شرط یک و دو با موفقیت پشت سر گذاشته شود، نوع o را که از نوع Object میباشد، به نوع Employee تغییر میدهیم (type casting) و سپس سراغ شرط آخر میرویم.
(❔) شرط آخر: با توجه به برابر بودن یا نبودن فیلد های کلاس، مقدار ترو یا فالس را برمیگرداند.
🔰 بعنوان مثال با توجه به متد equals باید این دو ابجکت شرط برابری را داشته باشند:
@pieceJava
🔆 توی جاوا هر کلاس بصورت پیشفرض از کلاس Object ارث بری میکند. کلاس Object شامل متد هایی مثل hashCode, equals, toString و... میشود که کاربرد گسترده ای در رابطه با کار با ابجکت ها دارند. به همین منظور برای مقایسه ابجکت ها از متد equals و hashCode از کلاس Object استفاده میشود.
🔗در مورد کلاس آبجکت از اینجا بخوانید
🔅هش کد در جاوا یک عدد صحیح 32 بیتی میباشد. هش کد یک مقدار منحصر بفرده که بصورت پیشفرض توسط JVM برای هر نمونه (شی / ابجکت) تعریف میشود.
👈 طبق این تعریف اگر دو ابجکت دارای هش کد برابر باشند، یعنی با هم برابرند با توجه به متد equals ولی لزوما دو ابجکت با هش کد برابر، با هم برابر نیستند. یعنی این شرط لازم و کافی نیست.
برای بررسی برابر بودن ابجکت ها، لازم است متد equals پیاده سازی شود.
🔰 مثال:
💠 کلاس Employee
داخل کلاس متد equals را اورراید میکنیم و فیلد هارا با هم مقایسه میکنیم (البته بستگی به این داره که برابری از نظر شما چه شرایطی داشته باشد. توی این مثال من شرط برابری را برابر بودن فیلد ها قرار دادم).
(برای بهتر دیده شدن کد ها، گوشی را در حالت افقی نگه دارید)
public class Employee {
private String firstName;
private String lastName;
public Employee(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee a = (Employee) o;
return firstName.equals(a.firstName) && lastName.equals(a.lastName);
}
}
بعد از اورراید کردن متد، شرایط زیر را بررسی میکنیم:(❔) شرط اول: this == o به این معناست که اگر هر دو ابجکت به یک ادرس از حافظه اشاره کنند، یعنی با هم برابرند و مقدار ترو را برگرداند.
(❔) شرط دوم: اگر ابجکت o از یک کلاس نباشد و یا مقدار null را داشته باشد، یعنی با هم برابر نیستند و مقدار فالس را برگرداند.
✅ اگر شرط یک و دو با موفقیت پشت سر گذاشته شود، نوع o را که از نوع Object میباشد، به نوع Employee تغییر میدهیم (type casting) و سپس سراغ شرط آخر میرویم.
(❔) شرط آخر: با توجه به برابر بودن یا نبودن فیلد های کلاس، مقدار ترو یا فالس را برمیگرداند.
🔰 بعنوان مثال با توجه به متد equals باید این دو ابجکت شرط برابری را داشته باشند:
Employee e1 = new Employee("A","B");
Employee e2 = new Employee("A","B");
System.out.println(e1.equals(e2));//returns true
#equals #object #hashCode #hash #inheritence@pieceJava
Telegram
تیکه پاره های جاوا
💎 کلاس Object در جاوا
هر کلاس جاوا بصورت مستقیم یا غیر مستقیم از کلاس Object ارث بری میکند. این به این معناست که هر کلاسی میتواند متد های کلاس Object را که به نحوی private یا final نیستند، اورراید کند.
⭕️متد HashCode مقدار هش کد را برای شی بازگشت میدهد.…
هر کلاس جاوا بصورت مستقیم یا غیر مستقیم از کلاس Object ارث بری میکند. این به این معناست که هر کلاسی میتواند متد های کلاس Object را که به نحوی private یا final نیستند، اورراید کند.
⭕️متد HashCode مقدار هش کد را برای شی بازگشت میدهد.…
👍5
تیکه پاره های جاوا pinned «💎 تفاوت Constructor و Static Factory Method 🔆 سازنده یا Constructor: زمانی که یک شی (نمونه / آبجکت) از یک کلاس ایجاد میکنیم، برای مقدار دهی اولیه و استفاده از مشخصات شی، یک کنستراکتور هم ایجاد میکنیم. در این حالت میتوان یکسری مقدار دهی اولیه برای شی قرار…»
💎 تفاوت equals و compareTo برای مقایسه رشته ها
🔆 هر دو متد برای مقایسه رشته کاربرد دارند ولی این بین تفاوت هایی وجود دارد. شاید بزرگترین تفاوت این باشد که equals ابجکت ها و comareTo حروف را با هم مقایسه میکند. طبق این قضیه میتوان نتیجه گرفت که در مقایسه ی null :
🔆 متد equals فقط دو مقدار false و true را بازگشت میدهد و آنهم زمانیست که مقدار دو رشته برابر یا نابرابر باشد. ضمنا همانطور که اشاره کردیم متد equals در هنگام مقایسه، از رخ دادن خطای NullPointerException جلو گیری میکند.
🔆 متد compareTo با توجه به اسناد جاوا، رشته ها را بصورت حرف به حرف (لغوی / lexographically) و همینطور از نظر طول رشته مقایسه میکند. طبق این مقایسه، این متد سه مقدار صفر، مثبت و منفی را بازگشت میدهد.
🔅مقدار صفر مختص زمانیست که رشته ها هم از لحاظ لغت و هم طول مقدار برابر داشته باشند.
🔅 مقدار منفی مختص زمانیست که رشته اول نسبت به رشته دوم طول کمتری داشته باشد.
🔅مقدار مثبت نیز مختص زمانیست که رشته اول نسبت به رشته دوم طول بیشتری داشته باشد
🔰 مثال:
#equals #string #compareto #lexographically
@pieceJava
🔆 هر دو متد برای مقایسه رشته کاربرد دارند ولی این بین تفاوت هایی وجود دارد. شاید بزرگترین تفاوت این باشد که equals ابجکت ها و comareTo حروف را با هم مقایسه میکند. طبق این قضیه میتوان نتیجه گرفت که در مقایسه ی null :
"foo".equals((String) null)
مقدار فالس را بازگشت میدهد. این در صورتی است که"foo".compareTo( (String) null)
استثنای NullPointerException را به همراه خواهد داشت.🔆 متد equals فقط دو مقدار false و true را بازگشت میدهد و آنهم زمانیست که مقدار دو رشته برابر یا نابرابر باشد. ضمنا همانطور که اشاره کردیم متد equals در هنگام مقایسه، از رخ دادن خطای NullPointerException جلو گیری میکند.
🔆 متد compareTo با توجه به اسناد جاوا، رشته ها را بصورت حرف به حرف (لغوی / lexographically) و همینطور از نظر طول رشته مقایسه میکند. طبق این مقایسه، این متد سه مقدار صفر، مثبت و منفی را بازگشت میدهد.
🔅مقدار صفر مختص زمانیست که رشته ها هم از لحاظ لغت و هم طول مقدار برابر داشته باشند.
🔅 مقدار منفی مختص زمانیست که رشته اول نسبت به رشته دوم طول کمتری داشته باشد.
🔅مقدار مثبت نیز مختص زمانیست که رشته اول نسبت به رشته دوم طول بیشتری داشته باشد
🔰 مثال:
⭕️ System.out.println("Aaaa".compareTo("Aa"));
یک مقدار مثبت را بازگشت میدهد. زیرا رشته اول نسبت به رشته دوم طول بیشتری دارد.⭕️ System.out.println("Aa".compareTo("Aaaaa"));
یک مقدار منفی را برمیگرداند. زیرا رشته دوم نسبت به رشته اول طول بیشتری دارد.⭕️ System.out.println("Aa".compareTo("Aa"));
مقدار صفر را دارد زیرا در این مقایسه رشته ها مقدار برابر را دارند.⭕️ System.out.println("A".compareTo("B"));
در این مثال از آنجا که از نظر لغوی (lexographically) حرف "B" نسبت به حرف "A" در ترتیب الفبا جلوتر قرار گرفته است، خروجی مقدار منفی خواهد بود.#equals #string #compareto #lexographically
@pieceJava
👍4
💎معنی Mutable و Immutable بودن کلاس ها (قابل تغییر و غیر قابل تغییر بودن)
🔅به آبجکت هایی که بعد از ایجاد شدن قابل تغییر هستند، Mutable گفته میشود. برای مثال کلاس Date یا StringBuilder
🔅در مقابل به ابجکت هایی که پس از ایجاد شدن قابل تغییر نیستند، Immutable گفته میشود. برای مثال کلاس String, Integer, Long,...
🔰 نمونه کلاس String:
(در اینباره بیشتر بخوانید)
🔆تفاوت های کلاس های Mutable و Immutable
⭕️در کلاس های Mutable فیلد ها بعد از ایجاد ابجکت قابل تغییر هستند در صورتی که در کلاس های Immutable چنین چیزی ممکن نیست.
⭕️کلاس های Mutable دارای متد هایی برای تغییر مقادیر فیلد ها مانند setter & getter هستند. در صورتی که کلاس های Immutable فقط دارای متد های getter میباشند.
⁉️چرا بعضی از کلاس ها Immutable هستند و یا چرا باید باشند؟
- همانطور که گفتیم مقادیر این کلاس ها غیر قابل تغییر است و از لحاظ مدیریت حافظه بصرفه است.
- کلاس های Immutable اصطلاحا Thread Safe هستند (در محیط های چند نخی (multithreading)) در واقع Thread safety به فرایند امن سازی برنامه در محیط های چند نخی گفته میشود.
🔗 نحوه ایجاد کلاس Immutable
#immutable #mutable #threadsafe #thread_safe #StringBuilder #Date #String
@pieceJava
🔅به آبجکت هایی که بعد از ایجاد شدن قابل تغییر هستند، Mutable گفته میشود. برای مثال کلاس Date یا StringBuilder
🔅در مقابل به ابجکت هایی که پس از ایجاد شدن قابل تغییر نیستند، Immutable گفته میشود. برای مثال کلاس String, Integer, Long,...
🔰 نمونه کلاس String:
String str = "Test";
str.replaceAll("T","s);
System.out.println(str)
;//prints Test
در قطعه کد بالا پس از خروجی گرفتن رشته str خواهید دید که رشته بدون هیچ تغییر خاصی نمایش داده خواهد شد.(در اینباره بیشتر بخوانید)
🔆تفاوت های کلاس های Mutable و Immutable
⭕️در کلاس های Mutable فیلد ها بعد از ایجاد ابجکت قابل تغییر هستند در صورتی که در کلاس های Immutable چنین چیزی ممکن نیست.
⭕️کلاس های Mutable دارای متد هایی برای تغییر مقادیر فیلد ها مانند setter & getter هستند. در صورتی که کلاس های Immutable فقط دارای متد های getter میباشند.
⁉️چرا بعضی از کلاس ها Immutable هستند و یا چرا باید باشند؟
- همانطور که گفتیم مقادیر این کلاس ها غیر قابل تغییر است و از لحاظ مدیریت حافظه بصرفه است.
- کلاس های Immutable اصطلاحا Thread Safe هستند (در محیط های چند نخی (multithreading)) در واقع Thread safety به فرایند امن سازی برنامه در محیط های چند نخی گفته میشود.
🔗 نحوه ایجاد کلاس Immutable
#immutable #mutable #threadsafe #thread_safe #StringBuilder #Date #String
@pieceJava
Telegram
تیکه پاره های جاوا
#چرا
💎چرا رشته ها غیر قابل تغییر یا Immutable هستند؟
در مورد Immutable و Mutable بودن کلاس ها از اینجا بخوانید.
فرض کنید رشته ای بصورت زیر داریم:
String str = "Hello";
حال بوسیله متد concat یک رشته را به رشته فعلی اضافه میکنیم:
str.concat(" World");
و در…
💎چرا رشته ها غیر قابل تغییر یا Immutable هستند؟
در مورد Immutable و Mutable بودن کلاس ها از اینجا بخوانید.
فرض کنید رشته ای بصورت زیر داریم:
String str = "Hello";
حال بوسیله متد concat یک رشته را به رشته فعلی اضافه میکنیم:
str.concat(" World");
و در…
👍3
💎 کلیدواژه final
🔆کلیدواژه فاینال برای محدود کردن کاربرد یک متغیر، متود یا یک کلاس به کار میرود که البته در هر کدام از این موارد، کاربرد متفاوت است.
⭕️ اگر یک متغیر را فاینال تعریف کنیم، به این معناست که پس از مقدار دهی اولیه، مقدار متغیر دچار تغییرات نخواهد شد و مقدار دهی دوباره آن، خطای کمپایلر را به همراه خواهد داشت:
#final #keywords
@pieceJava
🔆کلیدواژه فاینال برای محدود کردن کاربرد یک متغیر، متود یا یک کلاس به کار میرود که البته در هر کدام از این موارد، کاربرد متفاوت است.
⭕️ اگر یک متغیر را فاینال تعریف کنیم، به این معناست که پس از مقدار دهی اولیه، مقدار متغیر دچار تغییرات نخواهد شد و مقدار دهی دوباره آن، خطای کمپایلر را به همراه خواهد داشت:
final int length = 5;⭕️ اگر یک کلاس را فاینال تعریف کنیم، توسط هیچ کلاسی قابل ارث بری نخواهد بود (فاینال تعریف کردن یک کلاس به معنی Immutable کردن این کلاس نیست. زیرا فقط از ارث بری شدن جلوگیری میکند.)
final class Test{ }
⭕️ اگر یک متد را فاینال تعریف کنیم، توسط هیچ زیرکلاسی قابل اورراید کردن نخواهد بود. یا به عبارتی بدنه متد تحت هیچ شرایطی در زیرکلاس ها تغییر نخواهد کرد.final void method(){ }
⭕️ اگر یک آرگومان را فاینال تعریف کنیم، این به این معناست که مقدار آن در بدنه متد قابل تغییر نمیباشد.public void methodWithFinalArguments(final int x) {
x=1;
}
برای مثال، تکه کد بالا خطای کمپایلر را خواهد داشت.#final #keywords
@pieceJava
👍3
💎نحوه ایجاد کلاس Immutable
🔗(در مورد ویژگی کلاس های Immutable از اینجا بخوانید )
🔅برای ایجاد کلاس های Immutable باید یک سری شرایط برقرار باشد:
⭕️کلاس نباید قابل ارث بری باشد. به همین منظور کلاس را فاینال تعریف میکنیم.
⭕️فیلد ها و داده های کلاس باید پرایوت باشند. در این صورت دسترسی فقط از طریق متد ها امکان پذیر خواهد بود.
⭕️فیلد ها و داده های کلاس باید فاینال باشند. در اینصورت فقط یکبار قابل مقدار دهی خواهند بود.
⭕️مقدار دهی فیلد ها فقط از طریق سازنده (constructor) باید صورت گیرد.
⭕️کلاس باید فقط دارای متد گتر باشد. برای بازگرداندن مقدار ترجیحا یک مقدار کپی از فیلد برگردانده شود.
🔰مثال:
🔗(در مورد ویژگی کلاس های Immutable از اینجا بخوانید )
🔅برای ایجاد کلاس های Immutable باید یک سری شرایط برقرار باشد:
⭕️کلاس نباید قابل ارث بری باشد. به همین منظور کلاس را فاینال تعریف میکنیم.
⭕️فیلد ها و داده های کلاس باید پرایوت باشند. در این صورت دسترسی فقط از طریق متد ها امکان پذیر خواهد بود.
⭕️فیلد ها و داده های کلاس باید فاینال باشند. در اینصورت فقط یکبار قابل مقدار دهی خواهند بود.
⭕️مقدار دهی فیلد ها فقط از طریق سازنده (constructor) باید صورت گیرد.
⭕️کلاس باید فقط دارای متد گتر باشد. برای بازگرداندن مقدار ترجیحا یک مقدار کپی از فیلد برگردانده شود.
🔰مثال:
final class Immutable{
private final int instanceNumber;
public Immutable(int instanceNumber) {
this.instanceNumber = instanceNumber;
}
public int getInstanceNumber() {
return instanceNumber;
}
}
@pieceJava👍3
💎ساختار for-each در جاوا
🔆 در جاوا ساختار کلاسیک حلقه فور از سه بخش تشکیل شده است. بخش مقدار دهی شمارنده، شرط حلقه و تعداد گام های شمارنده برای رسیدن به پایان حلقه:
ساختار for each:
#for #for_each #enhanced #enhanced_for
@pieceJava
🔆 در جاوا ساختار کلاسیک حلقه فور از سه بخش تشکیل شده است. بخش مقدار دهی شمارنده، شرط حلقه و تعداد گام های شمارنده برای رسیدن به پایان حلقه:
for (initialization; boolean-condition; step) {
statement;
}
🔅 یک حالت دیگه از فور وجود دارد که اصطلاحا به آن for each (Enhanced for / فور بهبود یافته) گفته میشود که البته برای پیمایش آرایه یا کالکشن ها مانند آری لیست، لینک لیست و ... کاربرد دارد. ضمنا برای مقدار دهی آرایه یا کالکشن ها ، این ساختار مناسب نمیباشد زیرا به ایندکس دسترسی نداریم.ساختار for each:
for (data_type var_name : array | collection) {
// code
}
در این نوع ساختار از حلقه فور، در هر بار پیمایش بترتیب ابجکت هارا در یک خانه از حافظه (توی مثال بالا یعنی بجای data_type ) ذخیره و در ساختار استفاده میشود:public class pieceJava {
public static void main(String[] args)
{
int[] array = {1,2,5,4,7,5};
for(int i: array)
{
System.out.print(i+"\t");
}
}
}
/////Output: 1 2 5 4 7 5
در رابطه با کالکشن ها نیز به همین صورت میتوان پیمایش را انجام داد:import java.util.ArrayList;————
public class pieceJava {
//Telegram: @pieceJava
public static void main(String[] args)
{
ArrayList<Data> datas = new ArrayList<>();
datas.add(new Data(5));
datas.add(new Data(6));
datas.add(new Data(7));
datas.add(new Data(8));
datas.add(new Data(9));
for(Data data: datas)
{
System.out.print(data.getData()+"\t");
}
}
}
class Data{
private int data;
public Data(int data)
{
this.data = data;
}
public int getData() {
return data;
}
}
//output: 5 6 7 8 9
#for #for_each #enhanced #enhanced_for
@pieceJava
👍2
تیکه پاره های جاوا pinned «💎 مقایسه اشیا (ابجکت ها) در جاوا 🔆 توی جاوا هر کلاس بصورت پیشفرض از کلاس Object ارث بری میکند. کلاس Object شامل متد هایی مثل hashCode, equals, toString و... میشود که کاربرد گسترده ای در رابطه با کار با ابجکت ها دارند. به همین منظور برای مقایسه ابجکت ها از…»
💎چطور سازنده ها را بهم متصل کنیم؟ (Chaining Constructors)
⚙️ برای ایجاد ارتباط میان سازنده ها (کنستراکتور) دو حالت وجود دارد:
👈 اتصال سازنده ها در یک کلاس
👈 اتصال سازنده های سوپر کلاس در زیر کلاس
🔅 اتصال سازنده ها در یک کلاس
در این حالت از کلیدواژه this() استفاده میکنیم. در واقع this در این مورد اشاره به سازنده های کلاس دارد.(برای خوانایی بهتر کد صفحه را در حالت افقی نگه دارید):
💡ضمنا با توجه به ورودی هر سازنده، میتوان مشخص کرد که this دقیقا به کدام سازنده اشاره دارد
🔰برای مثال:
🔅 اتصال سازنده های سوپر کلاس در زیر کلاس
برای اینکار از کلیدواژه super استفاده میشود. ضمنا تمامی قوانین در رابطه با this ، برای super نیز برقرار است:
#chaining #constructor #this #super
@pieceJava
⚙️ برای ایجاد ارتباط میان سازنده ها (کنستراکتور) دو حالت وجود دارد:
👈 اتصال سازنده ها در یک کلاس
👈 اتصال سازنده های سوپر کلاس در زیر کلاس
🔅 اتصال سازنده ها در یک کلاس
در این حالت از کلیدواژه this() استفاده میکنیم. در واقع this در این مورد اشاره به سازنده های کلاس دارد.(برای خوانایی بهتر کد صفحه را در حالت افقی نگه دارید):
class Chaining{
private String firstname;
private int age;
private String lastname;
//first constructor
public Chaining(String firstname,String lastname)
{
this.firstname = firstname;
this.lastname = lastname;
}
//chaining constructors
public Chaining(int age,String firstname,String lastname){
this(firstname,lastname);
this.age = age;
}
}
در این مثال در بدنه سازنده دوم بوسیله کلیدواژه this به سازنده اول اشاره کرده ایم و مقادیر ورودی را به سازنده اول بوسیله کلیدواژه this نسبت داده ایم.💡ضمنا با توجه به ورودی هر سازنده، میتوان مشخص کرد که this دقیقا به کدام سازنده اشاره دارد
🔰برای مثال:
class Temp {
public Temp() {
// calls constructor 2
this(5);
System.out.println("The Default constructor");
}
// parameterized constructor 2
public Temp(int x) {
// calls constructor 3
this(5, 15);
System.out.println(x);
}
// parameterized constructor 3
public Temp(int x, int y) {
System.out.println(x * y);
}
}
❌ حتما به خاطر داشته باشید که برای اشاره (this) به سازنده های پیشین حتما باید اینکار در خط اول بعد از ایجاد سازنده جدید صورت گیرد زیرا در غیر این صورت خطای کمپایلر را بدنبال خواهد داشت.🔅 اتصال سازنده های سوپر کلاس در زیر کلاس
برای اینکار از کلیدواژه super استفاده میشود. ضمنا تمامی قوانین در رابطه با this ، برای super نیز برقرار است:
class SuperClass{
private String firstName;
private String lastName;
public SuperClass(String firstName,String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
}
class Chaining extends SuperClass{
private int age;
public Chaining(String firstName, String lastName,int age) {
super(firstName, lastName);
this.age = age;
}
}
———#chaining #constructor #this #super
@pieceJava
👍2
💎بررسی مقدار و کلیدواژه null در جاوا
🔆 یکی از کلمات رزرو شده در جاوا کلمه null میباشد. مقدار null فقط مختص داده های مرجع میباشد. زمانی که یک شی از یک داده مرجع (Reference type) مقدار دهی نشده باشد (به هیچ خانه ای از حافظه اشاره نکند) بصورت پیشفرض مقدار اولیه آن برابر null خواهد بود.
🔰برای مثال:
🔅ویژگی های نال:
⭕️ کلیدواژه null حتما باید با حروف کوچک نوشته شود زیرا در غیر این صورت کمپایلر در شناسایی آن به مشکل خواهد خورد.
⭕️ همانطور که پیش تر نیز اشاره کردیم، مقدار null مختص داده های مرجع میباشد و در صورت اختصاص به داده های نوع پیشین (primitive data types) خطای کمپایلر را به همراه خواهد داشت:
⭕️ از آنجا که نال یک مقدار خاص میباشد، میتواند به انواع داده های مرجع نیز تبدیل شود:
⭕️ یکی از اپراتور های جاوا instanceof میباشد که بررسی میکند آیا یک ابجکت نمونه ای از یک کلاس هست یا خیر. برای مثال:
@pieceJava
🔆 یکی از کلمات رزرو شده در جاوا کلمه null میباشد. مقدار null فقط مختص داده های مرجع میباشد. زمانی که یک شی از یک داده مرجع (Reference type) مقدار دهی نشده باشد (به هیچ خانه ای از حافظه اشاره نکند) بصورت پیشفرض مقدار اولیه آن برابر null خواهد بود.
🔰برای مثال:
public class ITHOOLOO {
private static Object object;
public static void main(String[] args) {
System.out.println(object);
}
}
خروجی نال را خواهد داشت. زیرا شی مقدار دهی نشده است. 🔅ویژگی های نال:
⭕️ کلیدواژه null حتما باید با حروف کوچک نوشته شود زیرا در غیر این صورت کمپایلر در شناسایی آن به مشکل خواهد خورد.
⭕️ همانطور که پیش تر نیز اشاره کردیم، مقدار null مختص داده های مرجع میباشد و در صورت اختصاص به داده های نوع پیشین (primitive data types) خطای کمپایلر را به همراه خواهد داشت:
int a = null; //error⭕️مقدار پیشفرض هر داده مرجع (رفرنس، reference) پیش از مقدار دهی نال میباشد.
⭕️ از آنجا که نال یک مقدار خاص میباشد، میتواند به انواع داده های مرجع نیز تبدیل شود:
// Typecasting null to String type⭕️تلاش برای دسترسی به یک آبجکت نال استثنای NullPointerException را به همراه خواهد داشت. برای مثال پیمایش آرایه ای از ابجکت ها (اشیا) که شامل یک یا چند ابجکت نال باشد. در حین پیمایش، زمانی که حلقه به آبجکت نال برخورد کرد، اسثتنای NullPointerException رخ میدهد
String myStr = (String) null;
// Typecasting to an Integer class
Integer myItr = (Integer) null;
// Typecasting to a Double class
Double myDbl = (Double) null;
⭕️ یکی از اپراتور های جاوا instanceof میباشد که بررسی میکند آیا یک ابجکت نمونه ای از یک کلاس هست یا خیر. برای مثال:
public class ITHOOLOO {
public static void main(String[] args) {
Object a = new Object();
System.out.println(a instanceof Object);
}
}
مقدار ترو را برمیگرداند زیرا a یک شی (ابجکت) از کلاس Object میباشد. حال اگر مقدار یک ابجکت null باشد، در بررسی با اپراتور instanceof مقدار فالس بازگشت میدهد. این نشان میدهد که null به معنای هیچ است. یعنی هیچ خانه ای در حافظه به ابجکت ساخته شده اختصاص داده نشده است:public class ITHOOLOO {
public static void main(String[] args) {
Integer b = null;
System.out.println(b instanceof Integer);//return false
}
}
#null #nullpointerException #instanceof@pieceJava
👍4
💎 کلاس Scanner و متد هایuserDelimeter و delimeter
🔆 همانطور که میدانید، کلاس اسکنر برای خواندن داده های ورودی کاربرد دارد. برای مثال برای هر کدام از ورودی های از نوع اینتجر، دابل، استرینگ و... کلاس اسکنر متد هایی را فراهم کرده است.
🔅یکی از متد های پر کاربرد کلاس Scanner، متد useDelimeter میباشد. بوسیله ی این متد میتوان یک جداکننده برای داده ورودی در نظر گرفت. برای مثال "," را جدا کننده رشته "Hello,From,ITHOOLOO" قرار میدیم و ورودی هارو چاپ میکنیم:
🔰برای مثال:
فرض کنید یک فایل در زیرشاخه src به نام test.txt داریم که شامل رشته زیر میباشد:
Mohammad,23,Iran
حال برای خواندن و ذخیره اطلاعات داریم:
@pieceJava
🔆 همانطور که میدانید، کلاس اسکنر برای خواندن داده های ورودی کاربرد دارد. برای مثال برای هر کدام از ورودی های از نوع اینتجر، دابل، استرینگ و... کلاس اسکنر متد هایی را فراهم کرده است.
🔅یکی از متد های پر کاربرد کلاس Scanner، متد useDelimeter میباشد. بوسیله ی این متد میتوان یک جداکننده برای داده ورودی در نظر گرفت. برای مثال "," را جدا کننده رشته "Hello,From,ITHOOLOO" قرار میدیم و ورودی هارو چاپ میکنیم:
import java.util.Scanner;در این صورت خروجی به صورت زیر خواهد بود:
public class ITHOOLOO {
public static void main(String[] args) {
String text = "HELLO,FROM,ITHOOLOO";
Scanner input = new Scanner(text);
input.useDelimiter(",");
while(input.hasNext())
{
System.out.println(input.next());
}
}
}
HELLO💡متد delimeter جدا کننده را برگشت میدهد:
FROM
ITHOOLOO
input.delimiter(); // return ,
⭕️ یکی از کاربرد های useDelimeter در هنگام خواندن فایل و جدا کردن داده ها میباشد.🔰برای مثال:
فرض کنید یک فایل در زیرشاخه src به نام test.txt داریم که شامل رشته زیر میباشد:
Mohammad,23,Iran
حال برای خواندن و ذخیره اطلاعات داریم:
public class ITHOOLOO {
public static void main(String[] args) {
File file = new File("src\\Test.txt");
String name = "";
int age = 0;
String country = "";
Scanner input = null;
try {
input = new Scanner(file);
input.useDelimiter(",");
while(input.hasNext())
{
name = input.next();
age = Integer.parseInt(input.next());
country = input.next();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(input!=null)
input.close();
}
System.out.println(name);
System.out.println(age);
System.out.println(country);
}
}
در این مثال خروجی بصورت زیر خواهد بود:Mohammad#scanner #delimeter #useDelimeter
23
Iran
@pieceJava
👍3