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

📝برای تدریس پیام دهید
محمدرضا عظیمی‌فرد
🆔 @mrvj475
Download Telegram
💎 اینترفیس یا واسط چیست و چرا استفاده میکنیم؟

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

☕️ @PIECEJAVA
👍7
تیکه پاره های جاوا
💎 اینترفیس یا واسط چیست و چرا استفاده میکنیم؟ 🔆 اینترفیس یا واسط در واقع یک نوع قرار داد میان کلاس ها خواهد بود. به این صورت که هر کلاسی که اینترفیس موردنظر را پیاده سازی کند، موظف است تمامی متد های آن را هم پیاده سازی کند. ☕️ @PIECEJAVA
🔰 برای مثال فرض کنید قرار است انواع گوشی های هوشمند از کلاس موبایل ارث بری کنند که ویژگی های اولیه یک گوشی را پیاده سازی میکنند. مثلا لازم است که تمامی گوشی ها بخش گالری، دوربین و مرورگر و... داشته باشند. حالا هر کلاسی از مجموعه گوشی های هوشمند که واسط موبایل را پیاده سازی کند، موظف است متد های مربوط به موبایل را هم پیدا سازی کند. در نتیجه به کمک اینترفیس میتوان این اطمینان را حاصل کرد که تمامی کلاس های گوشی این ویژگی ها را پیاده سازی میکنند:
public interface Mobile {
void browser();
void camera();
void gallery();
}
💡 به متد هایی که فقط تعریف شوند و بدنه ای نداشته باشند (پیاده سازی نشده باشند) آبسترکت گفته میشود. یعنی فقط امضای متد method signature نوشته میشود. منظور از امضای متد، ساختار اولیه متد میباشد که نشان دهنده سطح دسترسی، نوع خروجی، اسم متد و ورودی های متد است. برای مثال:
void browser();
💡 اینترفیس حاوی متد های ابسترکت میباشد.
💡 از آنجا که متد های ابسترکت باید پیاده سازی شوند، در نتیجه لزومی به نوشتن سطح دسترسی متد ابسترکت نیست.

برای پیاده سازی اینترفیس بعد از اسم کلاس از کلیدواژه implements و سپس اسم اینترفیس مورد نظر استفاده میشود. برای مثال:
public class Note8Pro implements Mobile{
@Override
public void browser() { }

@Override
public void camera() { }

@Override
public void gallery() { }
}

حالا برای هر کلاس متد های browser , camera و gallery را پیاده سازی میکنیم. دقت داشته باشید که حذف هر کدام از متد های بالا، خطای کمپایلر را خواهد داشت. زیرا همانطور که گفتیم، کلاس ها موظفند این متد ها را پیاده سازی کنند.

💬البته از بعد جاوای 8 متد های دیفالت و استاتیک هم به اینترفیس ها اضافه شده که انشالله در فرصتی دیگر حتما بررسی میشه :)
#interface
———
☕️ @PIECEJAVA
👍11
#مثبت_برنامه_نویس
#پیشنهاد
🟨 داکیومنت های آفلاین با نرم افزار Zeal


- از طریق 🔗 لینک وارد سایت Zeal بشید و برنامه Zeal رو دانلود کنید.
- بعد از دانلود و نصب، از طریق منوی
Tools > Docsets > Available
میتونید داکیومنت مربوط به زبان دلخواهتون رو یکبار برای همیشه دانلود و بصورت آفلاین استفاده کنید.

💬 البته نه فقط جاوا، بلکه داکیومنت هر زبونی که بخواید رو داره و میتونید برای همیشه بصورت آفلاین داشته باشید. (لیست داکیومنت زبان ها از طریق خود سایت قابل دسترسیه) :)


⭕️ اگه احیانا داکیومنت مدنظرتون داخل Docset وجود نداشت (مثلا کاتلین، three.js یا... )، از طریق 🔗آدرس لینک یکی از پکیج های XML یا JSON مربوط به زبان رو کپی کنید و از بخش Docset از طریق گزینه Add Feed آدرس پکیج رو به برنامه بدید تا دانلود رو شروع کنه.

~موفق باشید❤️

☕️@PIECEJAVA
👍9
🧊 انواع بلاک ها در جاوا (قسمت اول)

🔆 در جاوا به مجموعه ی خطوط کد که در یک بدنه { } قرار گرفته اند ، بلاک گفته میشود. از بلاک عموما برای دسته بندی خطوط کد (statement) استفاده میشود. برای مثال چهار خط زیر نشان دهنده یک بلاک میباشد. :
{
int x = 0;
x++
}
در حالت کلی سه نوع بلاک در جاوا داریم که در این قسمت بلاک محلی را بررسی خواهیم کرد.
👍9
💠 بلاک محلی (local block):
🔅 بلاک کدی که داخل بلاک یک متد، کنستراکتور یا حتی داخل بدنه بلاک دیگر(بلاک تو در تو) ساخته شود، به آن بلاک محلی گفته میشود. برای مثال:

public class Main {
public static void main(String[] args) {
{//localBlock
int x = 0;
System.out.println("Hello x = "+x);
}
}
}
🔅 این نوع بلاک فقط زمانی اجرا میشود که متد، کنستراکتور یا بلاک در برگیرنده آن اجرا شود.

در نظر داشته باشید که فقط در محدوده خود بلاک قابل دسترسی هستند. در نتیجه کد زیر خطای کمپایلر به همراه خواهد داشت.
{
int x = 0;
x++;
}
//x cannot be used outside that block
System.out.println(x);

نمیتوانید دو متغیر همنام، یکی قبل از بلاک و یکی داخل بلاک همزمان داشته باشید. برای مثال بلاک زیر هم خطای کمپایلر خواهد داشت:
public class Main {
public static void main(String[] args) {
int num = 20;
{
// Invalid. A compile-time error.
int num = 30;
}
}
}

———
#block
☕️@PIECEJAVA
👍10
💠 رفتار عجیب رشته ها در ترکیب با اعداد

تکه کد زیر را در نظر بگیرید:
String s = 1 + 2 + " My String " + 3 + 4 + 5;
System.out.println(s);
———
⚙️ OUTPUT
3 My String 345
——--- -
🔴Question
#چرا 2 عدد اول با هم جمع میشوند ولی سه عدد آخر (مانند رشته ها) به هم وصل میشوند؟
———-- -
🟢Answer
در بحث رشته ها وقتی از داده ای استفاده میشود، داده در نهایت به رشته تبدیل میشود. برای مثال با رشته زیر
"String" + 1
مانند رشته زیر در نهایت رفتار میشود:
"String" + "1"

اما اگر هیچ رشته ای نداشته باشیم، پلاس بعنوان عملگر حسابی در بین داده ها درنظر گرفته میشود و بعد از محاسبات، نتیجه نهایی تبدیل به رشته میشود. در نتیجه خروجی زیر رشته 3 خواهد بود:
String str = 1+2; // "3"
———-- -
🟡Conclusion

رشته ها از چپ به راست خوانده میشوند. پس میتوان رشته بالا را میتوان بصورت زیر دسته بندی کرد:
(((((1 + 2) + " My String ")+ 3) + 4) + 5)
در نتیجه اولین + بعنوان عملگر حسابی در نظر گرفته میشود، زیرا هنوز به رشته ای نرسیده ایم پس دو عدد را با هم جمع میکند و سپس به رشته تبدیل میکند. + دوم رشته 3 و "My String" را به هم وصل میکند. به همین ترتیب + های بعدی رشته های 3، 4 و 5 را به رشته اصلی وصل میکنند.


در نهایت اگر میخواهید + بین 3 و 4 و 5 بعنوان عملگر حسابی در نظر گرفته شود، این سه عدد را درون یک پرانتز قرار دهید:
1 + 2 + "My String " + (3 + 4 + 5)

☕️ @PIECEJAVA
👍151
بنظرتون خروجی کد بالا کدوم گزینه میشه؟
Anonymous Quiz
27%
ABCabc
6%
ABC
57%
abcabc
10%
abc
👏101👎1
💬 دوستان اگه در رابطه با گیت، توسعه نرم افزار و در کل در رابطه با محدودیت های اینترنت به مسئله خوردین، حتما یبار به آدرس زیر سر بزنید:

🔗 https://github.com/freedomofdevelopers/fod

☕️ @pieceJava
👏7
💠 در جاوا پارامتر ها چگونه به متد ها ارسال میشوند؟

💬 یکی از مهم ترین سوالات خیلی مهم اینه که آیا جاوا Call By Value هست یا Call By Reference ؟
خب اول باید بگم که جاوا call by value هست. اما این اصطلاحات به چه معناست؟

🔶 در جاوا Call By Value یعنی از مقادیر ورودی به متد(پارامتر های ورودی)، یک کپی گرفته میشود و تمامی اعمال بر روی کپی مقادیر ورودی انجام میشود و نه خود مقادیر ورودی. در نتیجه مقادیر ورودی دچار تغییر نمیشوند. برای مثال:
class Main {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println("a = "+a + "\t b = "+b);
swap(a,b);
System.out.println("swap a and b...");
System.out.println("a = "+a + "\t b = "+b);
}
static void swap(int a,int b){
int temp = a;
a = b;
b= temp;
}
}
—————
⚙️ OUTPUT

a
= 1 b = 2
swap a and b...
a = 1 b = 2
همانطور که میبینید در اصل مقادیر هیچ تغییری ایجاد نشده است.

🔶 در مقابل Call By Reference هم مقادیر ورودی و هم کپی ایجاد شده به یک خانه از حافظه اشاره میکنند. در نتیجه تغییری درون متد اعمال شود، این تغییرات بر روی ورودی تاثیر مستقیم خواهد داشت.( یعنی اگه جاوا call By Reference بود پس متد swap باید برای a و b عمل میکرد )

اما یک ابهام وجود دارد. اینکه چرا در برنامه زیر، مقدار x در آبجکت ذخیره شده به عدد 475 تغییر پیدا میکند؟

class Main {
public static void main(String[] args) {
Test t = new Test(1);
System.out.println("t.x = "+t.x);
changeX(t);
System.out.println("Change X Value...");
System.out.println("t.x = "+t.x);
}
static void changeX(Test t) {t.x = 475;}

}
class Test{
int x;
public Test(int x) {
this.x = x;
}
}
—————
⚙️ OUTPUT

t.x = 1
Change X Value...
t.x = 475


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


💬 پس اگه ورودی و کپی ایجاد شده هر دو آدرسشون به یه خونه اشاره کنن، این تغییر صورت میگیره اما اگر سعی کنیم آدرس یه آبجکت دیگه رو به متغیر پاس بدیم، روی ورودی اصلی هیچ تغییری اعمال نمیشه. مثلا:
class Main {
public static void main(String[] args) {
Test t = new Test(1);
System.out.println("t.x = "+t.x);
changeObject(t);
System.out.println("Change Object...");
System.out.println("t.x = "+t.x);
}
static void changeObject(Test t) {
t = new Test(10);
}
}
class Test{
int x;
public Test(int x) {
this.x = x;
}
}
—————
⚙️ OUTPUT

t.x = 1
Change Object...
t.x = 1
———
#pass_by_reference #pass_by_value
#call_by_value #call_by_reference
☕️ @PIECEJAVA
👍7
مثال های استفاده شده
Call By Value / Call By Reference
☕️ @PIECEJAVA
7
This media is not supported in your browser
VIEW IN TELEGRAM
یه مثال خیلی باحال از call by value و call by reference😄

☕️ @PIECEJAVA
👍121
تیکه پاره های جاوا
مطالب کانال تا چه حد براتون واضح و مفهومه؟
راستی تا یادم نرفته اگه نظر / انتقاد یا پیشنهادی هم دارین خوشحال میشم باهام در میون بزارید❤️ ^ ^
~ @MRVJ475
9
This media is not supported in your browser
VIEW IN TELEGRAM
#یکبار_برای_همیشه
چرا cmd کمپایلر جاوا (javac) یا java -version رو شناسایی نمیکنه؟

❗️بررسی خطای
'****' is not recognized as an internal or external command,
operable program or batch file.
———
☕️@pieceJava
👏81
#پیشنهاد
💠 معرفی دوره جاوا

یکی از بهترین دوره های جاوا (متدلوژی برنامه نویسی) که دیدم :)
دوره از پروفسور مهران سهامی هستش از دانشگاه استنفورد و البته به زبان انگلیسیه.

کاملا قابل فهم و واضح هست. البته چون خودم دورشون روکامل ندیدم، نمیتونم در مورد پایان دوره چیزی بگم. اما 5 قسمتی که دیدم واقعا عالی بود.
این رو هم بگم که اگه این دوره رو انتخاب میکنید، دقیق و درست باهاش همراه بشید. مثلا تمرین ها و هرچیزی که میگه رو حتما انجام بدید (کل فایل های لازم داخل لینک زیر، از جمله تمرین ها، متن سخنرانی و ... موجوده)

× قبل از شروع دوره حتما Course Description رو بخونید...

🔸 آدرس دوره:
| آدرس سایت دوره |

🔻 مشاهده فیلم ها از طریق یوتیوب (همراه با زیرنویس زبان اصلی):
| آدرس پلی لیست یوتیوب دوره |
8
💠 تفاوت runtime error و compile time error و logical error
5
تیکه پاره های جاوا
💠 تفاوت runtime error و compile time error و logical error
⚠️ خطای رانتایم
خطای رانتایم در زمان اجرا رویت میشود. برای مثال:
- زمانی که کاربر از طریق اسکنر یک داده نامعتبر را وارد کند (فرضا بجای عدد رشته رو وارد کنه).
- تبدیل رشته حاوی کاراکتر به عدد: Integer.parsInt("a1")
- زمانی که حافظه استک سر ریز شود
- تقسیم 1 بر 0

💡این نوع خطا اکثر اوقات بر اساس ورودی های نامعتبر رخ میدهد.

⚠️ خطای کمپایل
خطای کمپایل مربوط به خطا هاییست که پیش از اجرا شدن برنامه رخ میدهد و معمولا خود IDE قبل از اجرای برنامه به شما اخطار میدهد. برای مثال:
- ذخیره یک داده اشتباه در مکان اشتباه:
int name = "Mohammad Reza";

- جا انداختن سمیکالن ;
- جا انداختن آکولاد باز یا بسته یا هر دو {}
- استفاده از کلاسی که هنوز تعریف نشده است
- استفاده از متغیری که هنوز ایجاد نشده است.
- استفاده از متغیری که هنوز مقدار دهی نشده است:
int sum;
System.out.println(sum);
رفع این خطاها عموما بدون هیچ پیچیدگیست. زیرا به کمک کمپایلر جای خطا به شما نشان داده میشود.

⚠️خطای منطقی
یکی از سخت ترین نوع خطا ها خطای منطقیست. در واقع برنامه بدون هیچ مشکلی اجرا و کار میکند اما نتیجه اشتباه را برمیگرداند. در این حالت میگوییم خطای منطقی رخ داده است. برای مثال:

برنامه ای بنویسید که دو عدد 2 و 5 را با هم جمع کند و نمایش دهد:
حالا اگر بین 2 و 5 بجای + از هر عملگر دیگری استفاده کنید، از آنجا که نتیجه اشتباه خواهد بود میگوییم خطای منطقی رخ داده است.

#runtime_error #compile_error
#errors #error #runtime #compile
#logical_error
—————
تیکه پاره های جاوا
@PieceJava
6
#پیشنهاد
💠 پروژه چی بنویسم؟

🔆 اگه دوست دارید پروژه بزنید ولی ایده ای براش ندارید، لینک زیر رو دنبال کنید.
در واقع یه ریپازیتوری که کلی پیشنهاد برای ساختن پروژه مطرح کرده. پروژه ها توی موضوعات مختلفی از جمله اعداد، الگوریتم نویسی، کار با رشته ها، شبکه، کلاس ها، نخ ها، فایل ها، دیتابیس و... دسته بندی شده اند.

ضمنا ناگفته نمونه که سورس پروژه ها از طریق آدرس زیر قابل دسترسیه. تقریبا به اکثر زبان ها موجود هستن:
🔗 پروژه ها
🔗 سورس پروژه ها
@PieceJava
👍64😁1