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

📝برای تدریس پیام دهید
محمدرضا عظیمی‌فرد
🆔 @mrvj475
Download Telegram
💎 کلاس Object در جاوا

هر کلاس جاوا بصورت مستقیم یا غیر مستقیم از کلاس Object ارث بری میکند. این به این معناست که هر کلاسی میتواند متد های کلاس Object را که به نحوی private یا final نیستند، اورراید کند.

⭕️متد HashCode مقدار هش کد را برای شی بازگشت میدهد.
⭕️متد equals برابری دو شی را بررسی میکند 🔗 (درباره مقایسه ابجکت ها(اشیا) و هش کد از اینجا بخوانید)
⭕️متد clone یک کپی از شی مورد نظر ایجاد میکند. البته برای clone کردن، کلاس مورد نظر باید اینترفیس Cloneable را پیاده سازی و از این کلاس متد clone() را تعریف کند.
⭕️متد toString رشته ای را در مورد شی ایجاد شده بازگشت میدهد. این رشته میتواند اطلاعات شی یا هرچیز دیگری باشد. برای مثال بصورت پیشفرض متد toString رشته @هش کد را بازگشت میدهد.
⭕️متد finalize متدی است که بصورت خودکار توسط گاربیج کالکشن قبل از حذف و از بین بردن شی صدا زده میشود. برای مثال زمانی که یک شی از هیچ یک از منابع استفاده نکند و هیچ شیی به آن مراجعه نکند، بصورت خودکار توسط گاربیج کالکشن برای ازاد سازی و مدیریت حافظه، حذف خواهد شد.
👍5
تیکه پاره های جاوا
Photo
💎 کلاس Wrapper ها و مفهوم Unboxing و Auto-Boxing

🔆در جاوا کلاس wrapper (به فارسی کلاس پوشاننده یا کلاس بسته بندی کننده) به کلاس هایی گفته میشود که هشت داده ی نوع پیشین را به شی تبدیل میکند. لیست کلاس wrapper ها در تصویر بالا قابل مشاهده است.

🔰برای مثال برای تبدیل داده int به Integer از متد زیر استفاده میشود:
int x = 475;
Integer number = Integer.valueOf(x);
🛑 به این شیوه از تبدیل autoBoxing گفته میشود.
در این مورد برای تبدیلدوباره شی ایجاد شده به داده نوع پیشین از متد IntValue استفاده میشود:
int y =number.intValue();
🛑 به این شیوه از تبدیل شی به داده نوع پیشین، unboxing گفته میشود

💡البته در نسخه های اخیر جاوا نیازی به استفاده از این متد ها برای تبدیل نیست. این تغییر مقدار بصورت خودکار توسط کمپایلر انجام میشود:
Integer number = 475; //auto-boxing
int y = number; //unboxing

⁉️ چرا از کلاس wrapper ها استفاده کنیم؟
⭕️ بعضی از ساختار ها بجای داده های نوع پیشین با اشیا سروکار دارند. برای مثال کالکشن ها مانند اری لیست، لینک لیست و ... در نتیجه برای استفاده لازم است که داده های نوع پیشین را بوسیله ی کلاس wrapper ها به شی تبدیل کنید:
ArrayList<Integer> list = new ArrayList<>();

⭕️ از انجا که این داده ها به شی تبدیل میشوند، میتوان مقدار ذخیره ی آن را برابر null قرار داد.

Integer number = null;

⭕️یکی از متد های پرکاربرد در این کلاس ها متد ...parse میباشد. متد parse... برای تبدیل رشته به داده دیگر کاربرد دارد.
برای مثال:
int x = Integer.parseInt("475");//Converts String to integer
double y = Double.parseDouble("12.3");

💡 البته از لحاظ کارآمدی داده های نوع پیشین بیشتر کارآمد خواهند بود. پیشنهاد میشود که فقط در صورت لزوم از کلاس Wrapper ها به جای داده های نوع پیشین استفاده کنید.

#Wrapper #Integer #parseInt #parse #unboxing #AutoBoxing

@pieceJava
👍6
💎 کلیدواژه 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
This media is not supported in your browser
VIEW IN TELEGRAM
#ساختمان_داده
نحوه پیمایش پیش ترتیب در ساختار درختی و پیاده سازی به زبان جاوا
Pre order traversal

#dsa
@piecejava
👍8
💎 سطوح دسترسی در جاوا

🔆 سطوح دسترسی (access modifiers) برای تعیین کردن میزان دسترسی یک کلاس به فیلد ها یا متد های یک کلاس کاربرد دارد.

🔅 در جاوا چهار نوع سطح دسترسی داریم:
⭕️ سطح دسترسی default
: این سطح دسترسی فقط به پکیج شامل کلاس محدود میشود و باقی کلاس ها از باقی پکیج ها نمیتوانند به فیلد ها و متد های با سطح دیفالت، دسترسی داشته باشند. در واقع سطح دیفالت برای حالتی گفته میشود که هیچ سطح دسترسی برای فیلد یا متد تعریف نکنید.

⭕️ سطح دسترسی protected: اعضای کلاس با این سطح دسترسی فقط از طریق پکیج شامل کلاس قابل دسترسی هستند و در باقی پکیج ها فقط از طریق زیرکلاس هایش قابل دسترسی هستند. در غیر این صورت قابل دسترسی نیستند.

⭕️ سطح دسترسی private: این سطح دسترسی فقط به خود کلاس محدود میشود. یعنی اعضای کلاس با این سطح دسترسی فقط از داخل خود کلاس قابل دسترسی هستند.


⭕️ سطح دسترسی public: این سطح دسترسی به این معناست که اعضای کلاس از هر جایی قابل دسترسی هستند.

منظور از اعضا، متد(متد ها) یا فیلدی (فیلد ها) است که دارای سطح(سطوح) دسترسی پابلیک/پرایوت/دیفالت و یا پروتکتد میباشد (میباشند).

#access_modifiers #سطح_دسترسی #public #private #protected #default
———
☕️ @PieceJava
👍10
💎 بررسی پارامتر String[] args در جاوا

🔆 آرایه args شامل ورودی های خط فرمان (command-line arguments) میشود. در واقع پیش از اجرای برنامه، از طریق پنجره کنسول میتوانید یکسری ورودی ها برای برنامه در نظر بگیرید. این ورودی ها در آرایه args ذخیره میشوند تا در حین اجرای برنامه مورد استفاده قرار گیرند. در واقع این به شما اجازه خواهد داد که بتوانید رفتار برنامه رو در ازای ورودی های متفاوت بررسی کنید.

طول آرایه args از پیش قابل تعیین نیست
هیچ الزامی بر استفاده از اسم args نیست. میتوانید این اسم رو به هرچیز دلخواه تغییر دهید:
String[] a
String[] parameter
...
🔰 برای مثال:
public class ITHooloo {
//Telegram: @pieceJava
public static void main(String[] args) {
for(int i = 0;i<args.length;i++){
System.out.println(args[i]);
}
}
}
در این برنامه قرار است ورودی های آرایه args در خروجی چاپ شوند.

1️⃣ برای کمپایل و اجرا پنجره cmd را باز میکنیم:

⭕️ پیش از اجرا میبایست آدرس فایل java را در پنجره cmd وارد کنید. برای مثال در اینجا ادرس desktop را وارد کرده ایم. زیرا فایل ITHooloo.java در این زیرشاخه قرار گرفته است)
C:\Users\Status 200>cd Desktop

C:\Users\ITHOOLOO\Desktop>javac ITHooloo.java

2️⃣ بعد از کمپایل، برنامه رو اجرا میکنیم. اما همانطور که گفتیم پیش از اجرا میتوانید بعد از اسم کلاس یکسری ورودی برای برنامه در نظر بگیرید:
C:\Users\Status 200\Desktop>java ITHooloo one two three
بعد از اجرای برنامه خواهید دید که بواسطه ی حلقه، خروجی های زیر در پنجره cmd نمایش داده خواهد شد:
one
two
three

#main #main_method #args
———
☕️ @pieceJava
👍9
This media is not supported in your browser
VIEW IN TELEGRAM
#ساختمان_داده
نحوه پیمایش میان ترتیب در ساختار درختی و پیاده سازی به زبان جاوا
In order traversal

#dsa
☕️ @piecejava
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
#ساختمان_داده
نحوه پیمایش پس ترتیب در ساختار درختی و پیاده سازی به زبان جاوا
Post order traversal

#dsa
☕️ @piecejava
👍5
💎 قرارداد نام گذاری در جاوا (Naming Conventions)

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

🔅 قرارداد نام گذاری پکیج ها (Packages):
- اسم پکیج ها باید با حروف کوچک نوشته شود (lowercase). برای مثال java, lang... اگر اسم شامل چند کلمه میباشد، میبایست کلمات را با دات (.) جدا کرد. برای مثال
java.util
java.lang
💡 اسامی خاص و منحصر بفرد برای مثال دامنه اینترنتی یک سایت یا یک شرکت بعنوان پکیج معمولا به صورت زیر نوشته میشود:
com.ithooloo
com.company
com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese


🔅 قرارداد نام گذاری کلاس ها (Class):
- اسم کلاس باید با حرف بزرگ شروع شود
- اسم کلاس باید یک متشکل از اسم (noun) باشد و در حالت ترکیبی با کلمات دیگر حرف اول هر کلمه بصورت کاپیتال باشد. اسم کلاس باید ساده و ویژگی های کلاس را بخوبی توصیف کند. برای مثال:
class Raster
class ImageSprite
class Employee
class String
class StringBuffer

🔅 قرارداد نام گذاری اینترفیس ها (Interfaces):
- اسم اینترفیس ها مانند اسامی کلاس ها باید با حرف بزرگ شروع شود.
interface RasterDelegate
interface Storing
💡 البته پیشنهاد میشود اسامی اینترفیس ها (و نه لزوما) به گونه ای تعریف شود که انگار توصیف کننده یک عمل برای کلاس است. برای مثال:
interface Runnable
interface Comparable
interface Enumerable

🔅 قرارداد نام گذاری متد ها (Methods):
- اسامی متد ها باید با حرف کوچک شروع شود. در صورت ترکیب چند کلمه ای، کلمات بعدی باید با حرف بزرگ شروع شوند.
- اسامی متد ها باید از افعال باشد:
run();
runFast();
getBackground();

🔅 قرارداد نام گذاری متغیر ها (Variables):
- اسامی متغیر ها باید با حرف کوچک نوشته شود (lowercase)
- اسامی متغیر ها نباید با _ یا $ شروع شود هر چند هر دو مورد در اول اسم متغیر خطایی بدنبال نخواهد داشت.
- اسم متغیر ها باید کوتاه و با معنا باشد
- اگر اسم متغیر ترکیبی از دو یا چند کلمه است، کلمات بعدی باید با حرف بزرگ شروع شوند. برای مثال:
myName
myAge
💡 اسامی داده های منطقی معمولا با پیشوند is شروع میشود(بصورت سوال کوتاه که فقط دارای پاسخ ترو یا فالس باشد):
isAvailabe
isFound
در بعضی موارد نیز مخصوصا برای متد های با خروجی boolean میتوان از پیشوند has نیز استفاده کرد. برای مثال:
hasNextLine()
hasLisence()
🔅 قرارداد نام گذاری ثابت ها (constants):
- متغیر های ثابت باید با حرف بزرگ نوشته شوند.
- در صورتی که اسامی ثابت ها از چند حرف تشکیل میشود، از "_" برای جدا کردن اسامی باید استفاده شود:
final int MAX_VALUE = 999;
final int MIN_VALUE = 4;

#naming #name #naming_conventions #convetions #قرارداد
———
☕️ @piecejava
👍91
تیکه پاره های جاوا pinned «💎 کلیدواژه static 🔆 یکی از 57 کلیدواژه رزرو شده در جاوا، کلیدواژه استاتیک static میباشد. 💡 از کلیدواژه های رزرو شده برای اسامی متغیر ها و... نمیتوان استفاده کرد. در اصل کلیدواژه استاتیک برای مدیریت حافظه به کار میرود. در جاوا متغیر ها ، متد ها، بلاک ها…»
💎 کلاس StringBuffer در جاوا

🔆 یک کلاس مشابه String در رابطه با رشته ها کلاس StringBuffer میباشد. کلاس رشته همانطور که پیش تر بررسی کردیم، غیرقابل تغییر(Immutable)، دارای اندازه ثابت و... میباشد در حالی که StringBuffer قابل تغییر میباشد و از لحاظ افزودن دنباله ای کاراکتر ها نیز منعطف عمل میکند.

🔗 درباره کلاس های Immutable و Mutable از اینجا بخوانید.
🔗 درباره Immutable بودن رشته ها از اینجا بخوانید.

✏️ برخی از متد های پرکاربرد کلاس StringBuffer
1️⃣ append()
برای افزودن یک متن به آخر یک رشته استفاده میشود.
2️⃣ length()
طول رشته ی ایجاد شده از طریق کلاس StringBuffer را برمیگرداند
3️⃣ charAt()
کاراکتر موجود در ایندکس موردنظر را برمیگرداند.
4️⃣ delete()
دنباله ای از کاراکتر ها را از شی ایجاد شده (از این کلاس) حذف میکند.
5️⃣ deleteCharAt()
کاراکتر موجود در ایندکس موردنظر را حذف میکند.
6️⃣ insert()
متنی را در یک موقعیت مشخص شده (ایندکس) وارد میکند
7️⃣ reverse()
رشته مورد نظر در وارون میکند.
8️⃣capacity()
یک ظرفیت برای StringBuffer در نظر میگیرد
9️⃣trimToSize()
میزان حافظه مصرفی برای دنباله ای از رشته ها را به اندازه سایز رشته کاهش میدهد
———
🔰در ادامه یک مثال از این کلاس در رابطه با بررسی متد های این کلاس بررسی خواهیم کرد.
⭕️ (خروجی هر متد بصورت کامنت امده است)
⭕️ (برای خوانایی بیشتر، کد رو بصورت تصویر توی کانال قرار میدم)
public class Main {
public static void main(String[] args) {
//Telegram: @pieceJava
StringBuffer sb = new StringBuffer("ITHOOLOO");

//prints length of String
System.out.println(sb.length());// prints 8

//appends .comi to String
sb.append(".comi");
System.out.println(sb); // prints ITHOOLOO.comi

//removes a character at index sb.length()-1
sb.deleteCharAt(sb.length() - 1); // removes i from IT...com(i)
System.out.println(sb);// prints ITHOOLOO.com

//removes sequence of characters from index 8 to sb.length()
sb.delete(8, sb.length());//removes ".com"
System.out.println(sb);// prints ITHOOLOO

//reverses String
sb.reverse();
System.out.println(sb);// prints OOLOOHTI

//inserts a String at index 0
sb.insert(0, "HELLO FROM ");
System.out.println(sb);//prints hello from OOLOOHTI
}
}
#StringBuffer #Buffer #Mutable #reverse
———
☕️@pieceJava
👍21
This media is not supported in your browser
VIEW IN TELEGRAM
#یکبار_برای_همیشه :)
چطور خطای Could Not Find or Load Main Class رو برطرف کنیم!؟ 🤷🏻‍♂️
▶️ Intellij IDEA (00:00) + دلیل خطا
▶️ Eclipse (01:54)
▶️ NetBeans (02:36)
———
#Error
☕️@pieceJava
👏32👍2
#چرا
💎 چرا متد های آرایه در جاوا قابل دسترسی نیست!!؟


———
💁🏻‍♂️ نمیدونم تا حالا دقت کردین یا نه ولی متد و خصوصیات خود آرایه قابل دسترسی نیست! مثلا شما بوسیله length طول آرایه رو بدست میارید ولی هیچوقت نمیتونید به کلاس یا هرکجا که این خصوصیت رو در برمیگیره مراجعه کنید!
———
🔆 آرایه ها یک نوع خاص از ابجکت ها هستند که هیچ تعریفی مانند کلاس ندارند. این یعنی شما نمیتوانید متد ها و خصوصیات یک آرایه را در قالب کلاس ببینید. زیرا آرایه یک بخش از خود زبان است یا به عبارتی یکی از ویژگی های خود زبان میباشد که دارای قواعد نوشتاری(syntax) منحصر به فرد خود است.

〽️ اعضای آرایه:

⭕️ خصوصیت length که طول آرایه رو برمیگرداند. length میتواند 0 یا یک عدد مثبت باشد.

⭕️ متد clone که دقیقا متدی همنام متد clone در کلاس Object را اووراید میکند. خروجی این متد یک آرایه از نوع همان آرایه است. برای مثال اگر آرایه شما نوع []T باشد، خروجی متد Clone یک آرایه از نوع []T میباشد.

⭕️ تمامی اعضای آرایه از کلاس Object به ارث برده شده اند.
#array
———
☕️ @pieceJava
👍6