اعضای کلاس استاتیک
هر شی از یک کلاس دارای کپی از تمام متغیر های نمونه متعلق به کلاس خود است. با این همه , در موارد مشخص, تمام شی های کلاس میتوانند کپی از یک متغیر خاص را به اشتراک در اورند . یک فیلد استاتیک , که متغیر کلاس نامیده میشود , چنین متغیری است, یک برنامه فقط حاوی یک کپی از این متغیر در حافظه است, تعداد شی های نمونه سازی شده از کلاس اهمیت ندارند و بر تعداد کپی های این متغیر در حافظه تاثیری نمیگذارند. یک متغیر استاتیک نشان دهنده ی اطلاعات و شی در مورد کلاس است. تمام شی های کلاس اطلاعات یکسانی را به اشتراک میگذارند. اعلان یک متغیر استاتیک با کلمه کلیدی static اغاز میشود.
برای توضیح اینکه چرا به کلاس استاتیکی نیاز است(کلاسی که دارای فیلد یا متد استاتیک باشد) , به بررسی یک بازی ویدیویی میپردازیم. فرض کنید که در این بازی , سفینه های مریخی که با کلاس Martian مشخص شده اند , مورد حمله سفینه های دیگر قرا گرفته اند. هر سفینه مریخی قادر به درگیری با سفینه های دشمن است به شرطی که هر سفینه مطمعن باشد حداقل چهار سفینه ی خودی در صحنه هستند. اگر مجموع Martian ها کمتر از پنج باشد, انگاه سفینه پا به فرار خواهد گذاشت.به همین دلیل هر سفیه باید از تعداد سفینه ها (martianCount) مطلع باشد . میتوانیم martianCount را به عنوان یک متغیر نمونه به هر کلاس Martian اعطا کنیم (متغیر نمونه یعنی متغیری که وابسته به نمونه های یا شی های ساخته شده از کلاس است). اگر چنین کاری انجام دهیم هر Martian یک نسخه (کپی ) جداگانه از داده نمونه خواهد داشت و هربار که یک Martian ایجاد میکنیم باید متغیر نمونه martianCount را در هر Martian بروز کنیم..کپی های اضافی موجب تلف شدن حافظه میشوند و به روز کردن این تعداد کپی , زمان زیادی مطلبد. بجای اینکار متغیر martianCount را بصورت استاتیک اعلان میکنیم, از اینرو این متغیر یک داده سراسری در کلاس خواهد بود. هر سفینه میتواند مقدار این متغیر را مشاهده کند , اما برنامه فقط یک کپی از این متغیر استاتیک را به منظور حفظ فضا در خود نگهداری میکند. در کنار اینکار در زمان هم صرفه جویی میشود چرا که سازنده martian فقط مقدار متغیر استاتیکی را افزایش میدهد
@this_java
هر شی از یک کلاس دارای کپی از تمام متغیر های نمونه متعلق به کلاس خود است. با این همه , در موارد مشخص, تمام شی های کلاس میتوانند کپی از یک متغیر خاص را به اشتراک در اورند . یک فیلد استاتیک , که متغیر کلاس نامیده میشود , چنین متغیری است, یک برنامه فقط حاوی یک کپی از این متغیر در حافظه است, تعداد شی های نمونه سازی شده از کلاس اهمیت ندارند و بر تعداد کپی های این متغیر در حافظه تاثیری نمیگذارند. یک متغیر استاتیک نشان دهنده ی اطلاعات و شی در مورد کلاس است. تمام شی های کلاس اطلاعات یکسانی را به اشتراک میگذارند. اعلان یک متغیر استاتیک با کلمه کلیدی 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
اگر عملگر ++ بعد از متغییر بیاید، یک واحد اضافه شدن پس از اتمام عملیات مقداردهی انجام می شود (یعنی محاسبات بر اساس مقدار قبلی انجام می شود):
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
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
متد 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
Telegram
Learn Java
یافتن مکان کاراکتر ها و زیر رشته ها
در بسیاری از برنامه جستجو برای یافتن یک کاراکتر یا مجموعه ای از کاراکتر ها در یک رشته ضروری است. برای مثال , برنامه نویس یک برنامه پردازشگر لغت ایجاد میکند و مایل است تا این برنامه از ویژگی جستجو در میان مستندات برخوردار…
در بسیاری از برنامه جستجو برای یافتن یک کاراکتر یا مجموعه ای از کاراکتر ها در یک رشته ضروری است. برای مثال , برنامه نویس یک برنامه پردازشگر لغت ایجاد میکند و مایل است تا این برنامه از ویژگی جستجو در میان مستندات برخوردار…
Hospital.zip
67 KB
سورس کد برنامه ی مدیریت بیمارستان با استفاده از فریمورک محبوب hibernate و دیتابیس Postgresql
@this_java
@this_java
spring book.pdf
2 MB
کتاب فارسی اموزش Spring از سایت تحلیل داده
@this_java
@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
دیتابیس های 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
swing در مقابل AWT
درواقع دو مجموعه از کامپوننت های GUI در جاوا وجود دارد . قبل از اینکه swing در java SE 1.2 معرفی شود, GUI های جاوا با کامپوننت هایی از Abstract window Tolkit که به اختصار awt نامیده میشود در پکیج java.awt ایجاد میشدند. زمانیکه یک برنامه جاوا با awt gui در پلتفرم های مختلف جاوا اجرا میشد, ی gui برنامه در هر پلتفرم با ظاهری متفاوت به نمایش در می امدند.
کامپوننت های swing gui به شما این امکان را میدهند تا ظاهر متحد الشکلی برای برنامه خود در میان تمام پلتفرم ها و استفاده از آن را فراهم اورید . حتی برنامه میتواند در زمان اجرا ظاهر و عملکرد خود را بر حسب نیاز کاربر تغییر دهد.
@this_java
درواقع دو مجموعه از کامپوننت های 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
به ظاهر و روشی که کاربر با یک برنامه در تعامل قرار میگیرد,lock-and-feel برنامه گفته میشود
@this_java
کامپوننت های سبک وزن در مقابل کامپوننت های سنگین وزن
اکثر کامپوننت های سویینگ واقعا به کامپوننت های GUI پشتیبانی شده توسط لایه های زیرین پلتفرم که برنامه بر روی ان اجرا میشود, بستگی ندارند. چنین کامپوننت های کامپوننت های سبک وزن یا lightweight شناخته میشوند. کامپوننت های AWT با پلتفرم محلی متصل میشوند و کامپوننت های سنگین وزن heavywheight را بوجود می اورند.. چرا که انها متکی به سیستم windowing پلتفرم محلی هستند تا عملکرد و ظاهر انهارا تعیین کند. تعدادی از کامپوننت های سویینگ از جمله کامپوننت های سنگین وزن هستند و همانند AWT کامپوننت های سنگین وزن سویینگ مستلزم تعامل مستقیم با سیستم windowing محلی هستند که ممکن است در ظاهر و عملکرد انها محدودیتی بوجود اورد.کامپوننت های سبک وزن به شما اجازه میدهند تا کنترل بیشتری بر روی ظاهر عملکرد انها داشته باشید
@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
🔺در حالت عادی، معمولاً این کار به کمک تابع 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
معنای کپسوله کردن این است که اطمینان حاصل شود که اطلاعات "حساس" از کاربران پنهان است.
برای رسیدن به این هدف باید:
متغیر های کلاس را با دسترسی private تعریف کنید(تنها در همان کلاس در دسترس خواهد بود)
برای مقدار دهی و یا خواندن مقدار یک متغیر یک Getter , Setter تعریف کنید
کپسوله سازی چه فایده هایی دارد؟
۱-کنترل بهتر : متغیرهای کلاس را فقط می توان به صورت read-only (اگر Stter را حذف کنید) یا write-only (اگر Getter را حذف کنید) قرار داد
۲-انعطاف پذیر: برنامه نویس می تواند یک قسمت از کد را بدون تاثیر بر سایر قسمت ها تغییر دهد
۳- افزایش امنیت اطلاعات
برای اطلاعات بیشتر به این لینک مراجعه کنید :
http://appinapps.com/View/articles/view/aid/135
@this_java
#Why_Encapsulation
بعضی اینترفیس ها در جاوا هیچگونه پیاده سازی ای ندارند .. به چه درد میخورند؟(Marker Interface)مثال : Serializable
به این نوع اینترفیس ها Marker Interface گفته میشه که برای طبقه بندی یا classified کردن مجموعه ای از تایپ ها، کلاسها، اینترفیس ها استفاده میشن!
فرض کنین شما یکسری کلاس دارین که کارشون انتقال داده از یک مکان به مکان دیگس
شما یه اینترفیس میتونین بسازین به نام Transferrable که هیچی توش نیست
سپس مادامی که کلاس ها و اینترفیس های دیگه بصورت مستقیم و یا غیرمستقیم (از طریق پدر)، از این اینترفیس ارث بری داشته باشن، میتونن توی جاهای مختلف استفاده بشن
مثلا میتونین بعنوان ورودی یک متد بفرستینشون :
public void doAction(Transferrable tf)
اینجا شما میدونین که حتما کلاسها و اینترفیس های قابل Transfer شدن میتونن برن داخل
یعنی اومدین طبقه بندی کردین تایپ رو ...
یا مثلا ممکنه شرطی باشه که فقط بخواد به یکسری کلاس یا اینترفیس که یه اینترفیس مارکر رو به ارث بردن اجازه بده که واردش بشن
@this_java
#marker_interface
به این نوع اینترفیس ها Marker Interface گفته میشه که برای طبقه بندی یا classified کردن مجموعه ای از تایپ ها، کلاسها، اینترفیس ها استفاده میشن!
فرض کنین شما یکسری کلاس دارین که کارشون انتقال داده از یک مکان به مکان دیگس
شما یه اینترفیس میتونین بسازین به نام Transferrable که هیچی توش نیست
سپس مادامی که کلاس ها و اینترفیس های دیگه بصورت مستقیم و یا غیرمستقیم (از طریق پدر)، از این اینترفیس ارث بری داشته باشن، میتونن توی جاهای مختلف استفاده بشن
مثلا میتونین بعنوان ورودی یک متد بفرستینشون :
public void doAction(Transferrable tf)
اینجا شما میدونین که حتما کلاسها و اینترفیس های قابل Transfer شدن میتونن برن داخل
یعنی اومدین طبقه بندی کردین تایپ رو ...
یا مثلا ممکنه شرطی باشه که فقط بخواد به یکسری کلاس یا اینترفیس که یه اینترفیس مارکر رو به ارث بردن اجازه بده که واردش بشن
@this_java
#marker_interface
🔹به تازگی JetBrains گزارش و آمار جالبی از تغییرات مهم زبانهای برنامه نویسی در سال ۲۰۱۹ منتشر کردهاست؛ #Java محبوبترین زبان برنامه نویسی، #JavaScript پرکاربردترین.
http://bit.ly/2FONzD0
@this_java
http://bit.ly/2FONzD0
@this_java
کلمه ی کلیدی transient چیست؟
هنگامی که با عملیات Serialization داده هارا به صورت توالی از بایت ها در میاورید تمام فیلد های کلاس به صورت توالی از بایت ها در می ایند در صورت عدم تمایل به تبدیل یک متغیر به توالی بایت ها میتوانید از این کلمه ی کلیدی استفاده کنید:
public class Foo implements Serializable
{
private String saveMe;
private transient String dontSaveMe;
private transient String password;
//...
}
کاربرد transient در زمینه Serialization می باشد و به این معنی هست که فیلد مورد نظر در عمل Serialization استفاده نشود، فیلد هایی رو transient می کنند که نمی خواهند آن ها را نگهداری کنند یا در انتقال شی ها در شبکه نیازی به انتقال اطلاعات آن ها نیست. مثلا اگر شما وضعیت لحظه به لحظه ی یک فرآیند را در یک فیلدی از یک شی نگهداری کنید در موقع ثبت و Serialization ممکن است دوست نداشته باشید آن فیلد را نگهداری کنید چون همیشه در زمان اجرا محاسبه میشود.
@this_java
هنگامی که با عملیات Serialization داده هارا به صورت توالی از بایت ها در میاورید تمام فیلد های کلاس به صورت توالی از بایت ها در می ایند در صورت عدم تمایل به تبدیل یک متغیر به توالی بایت ها میتوانید از این کلمه ی کلیدی استفاده کنید:
public class Foo implements Serializable
{
private String saveMe;
private transient String dontSaveMe;
private transient String password;
//...
}
کاربرد transient در زمینه Serialization می باشد و به این معنی هست که فیلد مورد نظر در عمل Serialization استفاده نشود، فیلد هایی رو transient می کنند که نمی خواهند آن ها را نگهداری کنند یا در انتقال شی ها در شبکه نیازی به انتقال اطلاعات آن ها نیست. مثلا اگر شما وضعیت لحظه به لحظه ی یک فرآیند را در یک فیلدی از یک شی نگهداری کنید در موقع ثبت و Serialization ممکن است دوست نداشته باشید آن فیلد را نگهداری کنید چون همیشه در زمان اجرا محاسبه میشود.
@this_java