Learn Java
304 subscribers
92 photos
1 video
94 files
84 links
یاد گیری زبان برنامه نویسی جاوا و نکات و مفاهیم
کاربردی ان



@parsa8113
@bardiademon
Download Telegram
لیندا _ آموزش رمزنگاری جاوا (با زیرنویس)
لیندا _ آموزش JUnit 5 برای جاوا (با زیرنویس)
اعضای کلاس استاتیک

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

برای توضیح اینکه چرا به کلاس استاتیکی نیاز است(کلاسی که دارای فیلد یا متد استاتیک باشد) , به بررسی یک بازی ویدیویی میپردازیم. فرض کنید که در این بازی , سفینه های مریخی که با کلاس Martian مشخص شده اند , مورد حمله سفینه های دیگر قرا گرفته اند. هر سفینه مریخی قادر به درگیری با سفینه های دشمن است به شرطی که هر سفینه مطمعن باشد حداقل چهار سفینه ی خودی در صحنه هستند. اگر مجموع Martian ها کمتر از پنج باشد, انگاه سفینه پا به فرار خواهد گذاشت.به همین دلیل هر سفیه باید از تعداد سفینه ها (martianCount) مطلع باشد . میتوانیم martianCount را به عنوان یک متغیر نمونه به هر کلاس Martian اعطا کنیم (متغیر نمونه یعنی متغیری که وابسته به نمونه های یا شی های ساخته شده از کلاس است). اگر چنین کاری انجام دهیم هر Martian یک نسخه (کپی ) جداگانه از داده نمونه خواهد داشت و هربار که یک Martian ایجاد میکنیم باید متغیر نمونه martianCount را در هر Martian بروز کنیم..کپی های اضافی موجب تلف شدن حافظه میشوند و به روز کردن این تعداد کپی , زمان زیادی مطلبد. بجای اینکار متغیر martianCount را بصورت استاتیک اعلان میکنیم, از اینرو این متغیر یک داده سراسری در کلاس خواهد بود. هر سفینه میتواند مقدار این متغیر را مشاهده کند , اما برنامه فقط یک کپی از این متغیر استاتیک را به منظور حفظ فضا در خود نگهداری میکند. در کنار اینکار در زمان هم صرفه جویی میشود چرا که سازنده martian فقط مقدار متغیر استاتیکی را افزایش میدهد

@this_java
آیا ++a و a++ در جاوا با یکدیگر تفاوت دارند؟

اگر عملگر ++ بعد از متغییر بیاید، یک واحد اضافه شدن پس از اتمام عملیات مقداردهی انجام می شود (یعنی محاسبات بر اساس مقدار قبلی انجام می شود):

int a = 1;
int b = a++;// b=1
int c = a; // c=2

اما اگر عملگر ++ قبل از متغییر بیاید، ابتدا یک واحد به متغییر اضافه می شود و سپس محاسبات انجام می شود:

int a = 1;
int b = ++a;// b=2
int c = a; // c=2
@this_java
تفاوت مابین field وProperty در چیست؟

Field: یک متغیر خصوصی در یک کلاس است ...که اغلب برای استفاده ی داخلی کلاس در نظر گرفته شده است

Property:متغیر های خصوصی که دارای ستر و گتر هستند و برای دستکاری از بیرون کلاس نیز درنظر گرفته شده اند

@this_java
یافتن یک کاراکتر مشخص از یک رشته

متد indexOf و lastIndexOf مکان کاراکتر مربوطه در رشته را برگشت میدهند ... همانطور که میدانید اولین عضو رشته در صفرمین خانه قرار میگیرد...برای بدست اوردن یک کاراکتر با داشتن مکان مربوط به ان (درواقع برعکس متد lastindexof)
باید از متدی به نام charAt در کلاس String بهره ببریم :

String this_java= "this_java";
char c = this_java.charAt(0);
System.out.println(c);

خروجی;
t

برای اطلاع از چگونگی نحوه ی کارکرد indexOf و lastIndexOf پست زیر را در کانال مطالعه کنید:
https://t.me/this_java/610

@this_java
Hospital.zip
67 KB
سورس کد برنامه ی مدیریت بیمارستان با استفاده از فریمورک محبوب hibernate و دیتابیس Postgresql

@this_java
spring book.pdf
2 MB
کتاب فارسی اموزش Spring از سایت تحلیل داده
@this_java
hibernate book.pdf
2.6 MB
کتاب فارسی اموزش فریمورک محبوب هایبرنیت از سایت تحلیل داده

@this_java
محبوب ترین تکنولوژی ها در میان توسعه دهنگان
منبع :
سایت quera
@this_java
دیتابیس های nosql

دیتابیس های nosql یا not only SQL دیتابیسهایی هستند که هر کدام برای مقصد و منظور خاص درست شدند ولی هیچکدام نمیتونن جایگزین دیتابیس های relational بشن، دلیلشم اینه که در همه business ها به دیتابیس هایی که ویژگی های دیتابیس های relational را دارند نیازه.

از Graph برای پیداکردن پترن های خاص مابین انتتی های متفاوت که واقعا یک دیتابیس relational نمیتونه براحتی انجام بده استفاده میشه.
مثلا شما نمیتونین مفهوم mutual friend هارو بهمین راحتی توی شبکه های اجتماعی با استفاده از یک دیتابیس relational پیاده سازی کنین. مثال این دیتابیس Neo4J

در مورد column database ها: این دیتابیس ها برای این خوب هستن که شما با مقدار بزرگی big amount of data سرو کار دارین و براتون عملکرد سیستمتان با performance بالا خیلی مهمه. مثال این دیتابیس Apache Cassandra

زمانی از key value دیتابیس ها استفاده میکنیم که تعداد زیادی small transaction دارین که میخواین با سرعت زیاد انجام بشه. مثلا خواندن تغییرات سنسورهای آب و هوا در یک منطقه و ذخیره و خوندن آن ها توی دیتابیس، IoT و اینها خیلی از این دیتابیس استفاده میکنند مثال این دیتابیس Redis

در مورد دیتابیس های داکیومنت document based به دیتابیس هایی گفته میشود که ما کاتالوگی از دیتا داریم و نگه داشتیم و برای مصرف خاص میخوایم استفاده کنیم
مثلا شما برای ذخیره اطلاعات آخرین تراکنش های یک حساب بانکی میتونین دیتاهارو توی یک آرشیو اطلاعاتی توسط دیتابیس های داکیومنت مثل mongodb نگه دارین

@this_java
👍1
Ball.zip
51.8 KB
سورس کد بازی توپ و موانع
یک توپ هست که مانع میاد جلوش و با کلید اسپیس ازشون میپره

@this_java
swing در مقابل AWT

درواقع دو مجموعه از کامپوننت های GUI در جاوا وجود دارد . قبل از اینکه swing در java SE 1.2 معرفی شود, GUI های جاوا با کامپوننت هایی از Abstract window Tolkit که به اختصار awt نامیده میشود در پکیج java.awt ایجاد میشدند. زمانیکه یک برنامه جاوا با awt gui در پلتفرم های مختلف جاوا اجرا میشد, ی gui برنامه در هر پلتفرم با ظاهری متفاوت به نمایش در می امدند.
کامپوننت های swing gui به شما این امکان را میدهند تا ظاهر متحد الشکلی برای برنامه خود در میان تمام پلتفرم ها و استفاده از آن را فراهم اورید . حتی برنامه میتواند در زمان اجرا ظاهر و عملکرد خود را بر حسب نیاز کاربر تغییر دهد.

@this_java
lock-and-feel چیست؟

به ظاهر و روشی که کاربر با یک برنامه در تعامل قرار میگیرد,lock-and-feel برنامه گفته میشود

@this_java
کامپوننت های سبک وزن در مقابل کامپوننت های سنگین وزن

اکثر کامپوننت های سویینگ واقعا به کامپوننت های GUI پشتیبانی شده توسط لایه های زیرین پلتفرم که برنامه بر روی ان اجرا میشود, بستگی ندارند. چنین کامپوننت های کامپوننت های سبک وزن یا lightweight شناخته میشوند. کامپوننت های AWT با پلتفرم محلی متصل میشوند و کامپوننت های سنگین وزن heavywheight را بوجود می اورند.. چرا که انها متکی به سیستم windowing پلتفرم محلی هستند تا عملکرد و ظاهر انهارا تعیین کند. تعدادی از کامپوننت های سویینگ از جمله کامپوننت های سنگین وزن هستند و همانند AWT کامپوننت های سنگین وزن سویینگ مستلزم تعامل مستقیم با سیستم windowing محلی هستند که ممکن است در ظاهر و عملکرد انها محدودیتی بوجود اورد.کامپوننت های سبک وزن به شما اجازه میدهند تا کنترل بیشتری بر روی ظاهر عملکرد انها داشته باشید

@this_java
چگونه میتوانیم مدت زمان اجرای یه بخش از کد رو اندازه بگیریم؟

🔺در حالت عادی، معمولاً این کار به کمک تابع System.currentTimeMillis انجام می‌شه، به این صورت که قبل از اجرای اون بخش از کد، یک بار این تابع رو فراخوانی می‌کنید، و زمان شروع رو به دست میارید.


🔺بعد از اجرای کد هم یک بار فراخوانی می‌کنید و زمان پایان رو به دست میارید. بعد این ۲ تا رو از هم کم می‌کنید و مدت زمان اجرای برنامه در واحد میلی‌ثانیه به دست میاد. مثلاً:


public static void f() {
....
}

public static void main(String[] args) {
long t1 = System.currentTimeMillis();
f();
long t2 = System.currentTimeMillis();
System.out.println("Time in milliseconds: " + (t2 - t1));
}


🔺در صورتی که سرعت اجرای کدتون انقدر بالا هست که به یک میلی‌ثانیه نمی‌رسه و نیاز به واحد دقیق‌تری دارید، می‌تونید از System.nanoTime استفاده کنید که با دقت بیشتری بهتون زمان رو برمی‌گردونه.



@this_java

#this_java
کپسوله سازی

معنای کپسوله کردن این است که اطمینان حاصل شود که اطلاعات "حساس" از کاربران پنهان است.
برای رسیدن به این هدف باید:
متغیر های کلاس را با دسترسی private تعریف کنید(تنها در همان کلاس در دسترس خواهد بود)
برای مقدار دهی و یا خواندن مقدار یک متغیر یک Getter , Setter تعریف کنید

کپسوله سازی چه فایده هایی دارد؟
۱-کنترل بهتر : متغیرهای کلاس را فقط می توان به صورت read-only (اگر Stter را حذف کنید) یا write-only (اگر Getter را حذف کنید) قرار داد
۲-انعطاف پذیر: برنامه نویس می تواند یک قسمت از کد را بدون تاثیر بر سایر قسمت ها تغییر دهد
۳- افزایش امنیت اطلاعات

برای اطلاعات بیشتر به این لینک مراجعه کنید :
http://appinapps.com/View/articles/view/aid/135
@this_java
#Why_Encapsulation