استفاده از عناصر ارایه بعنوان شمارنده :
public class Learn {
public static void main(String[] args) {
Random is = new Random();
int[] fer = new int[7];
for (int i = 1; i <= 6000000; i++) {
++fer[1 + is.nextInt(6)];
}
System.out.println("Face" + "\t" + "Ferquency[face]");
for (int face = 1; face < fer.length; face++) {
System.out.println(face + "\t" + fer[face]);
}
}
}
public class Learn {
public static void main(String[] args) {
Random is = new Random();
int[] fer = new int[7];
for (int i = 1; i <= 6000000; i++) {
++fer[1 + is.nextInt(6)];
}
System.out.println("Face" + "\t" + "Ferquency[face]");
for (int face = 1; face < fer.length; face++) {
System.out.println(face + "\t" + fer[face]);
}
}
}
استفاده از ارایه ها برای تحلیل نتایج:
به مثال زیر توجه کنید :
از بیست دانشجو در مورد کیفیت غذای عرضه شده در رستوران دانشگاه سوال شده و پاسخ دانشجویان میتواند در محدوده ی 1 تا 10 قرار داشته باشد. به اینصورت که 1 نشانده ی کیفیت پایین و ده کیفیت بالاست... پاسخ دانشجویان را در یک ارایه قرار داده و میزان و تعداد پاسخ های همسان را مشخص سازرید
راه حل:
public class Learn {
public static void main(String[] args) {
int[] i = {1,2,5,4,3,5,2,1,3,3,1,4,3,3,3,2,3,3,2,14};
int[] ferquency = new int [6];
for(int answer = 0; answer<i.length;answer++) {
try{
++ferquency[i[answer]];
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println(e);
System.out.printf("Responses [%d]= %d%n%n",answer,i[answer]);
}
}
System.out.println("Rating"+"\t"+"Ferquency");
for(int rating = 1; rating<ferquency.length;rating++) {
System.out.println(rating+"\t"+ferquency[rating]);
}
}
}
خروجی :
java.lang.ArrayIndexOutOfBoundsException: 14
Responses [19]= 14
Rating Ferquency
1 3
2 4
3 8
4 2
5 2
@this_java
به مثال زیر توجه کنید :
از بیست دانشجو در مورد کیفیت غذای عرضه شده در رستوران دانشگاه سوال شده و پاسخ دانشجویان میتواند در محدوده ی 1 تا 10 قرار داشته باشد. به اینصورت که 1 نشانده ی کیفیت پایین و ده کیفیت بالاست... پاسخ دانشجویان را در یک ارایه قرار داده و میزان و تعداد پاسخ های همسان را مشخص سازرید
راه حل:
public class Learn {
public static void main(String[] args) {
int[] i = {1,2,5,4,3,5,2,1,3,3,1,4,3,3,3,2,3,3,2,14};
int[] ferquency = new int [6];
for(int answer = 0; answer<i.length;answer++) {
try{
++ferquency[i[answer]];
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println(e);
System.out.printf("Responses [%d]= %d%n%n",answer,i[answer]);
}
}
System.out.println("Rating"+"\t"+"Ferquency");
for(int rating = 1; rating<ferquency.length;rating++) {
System.out.println(rating+"\t"+ferquency[rating]);
}
}
}
خروجی :
java.lang.ArrayIndexOutOfBoundsException: 14
Responses [19]= 14
Rating Ferquency
1 3
2 4
3 8
4 2
5 2
@this_java
چاپ تمامی عناصر ارایه ی دو بعدی:
package learn;
public class Learn {
public static void main(String[] args) {
//row equals sart
//columns means soton
int[][] Array = {{2, 2, 3, 4}, {3, 4, 2, 1}};
int[][] parsa = {{1, 2}, {3}, {4, 5, 6}};
System.out.println("Array: ");
output(Array);
System.out.println("Parsa: ");
output(parsa);
}
static void output(int[][] k) {
for (int counrer = 0; counrer < k.length; counrer++) {
for (int c = 0; c < k[counrer].length; c++) {
System.out.println(k[counrer][c]);
}
}
}
}
@this_java
package learn;
public class Learn {
public static void main(String[] args) {
//row equals sart
//columns means soton
int[][] Array = {{2, 2, 3, 4}, {3, 4, 2, 1}};
int[][] parsa = {{1, 2}, {3}, {4, 5, 6}};
System.out.println("Array: ");
output(Array);
System.out.println("Parsa: ");
output(parsa);
}
static void output(int[][] k) {
for (int counrer = 0; counrer < k.length; counrer++) {
for (int c = 0; c < k[counrer].length; c++) {
System.out.println(k[counrer][c]);
}
}
}
}
@this_java
مثال کاربردی از متد split() در جاوا
مثال جاری تمامی کلمات موجود در آبجکت s1 را که بر اساس فاصله (space) از هم جدا شده اند، برمی گرداند.
public class SplitExample{
public static void main(String args[]){
String s1="java string split method by javatpoint";
String[] words=s1.split("\\s");//splits the string based on whitespace
//using java foreach loop to print elements of string array
for(String w:words){
System.out.println(w);
}
}}
خروجی:
java
string
split
method
by
javatpoint
@this_java
مثال جاری تمامی کلمات موجود در آبجکت s1 را که بر اساس فاصله (space) از هم جدا شده اند، برمی گرداند.
public class SplitExample{
public static void main(String args[]){
String s1="java string split method by javatpoint";
String[] words=s1.split("\\s");//splits the string based on whitespace
//using java foreach loop to print elements of string array
for(String w:words){
System.out.println(w);
}
}}
خروجی:
java
string
split
method
by
javatpoint
@this_java
متد های get و set در مقابل داده public
بنظر میرسد که تدارک دیدن قابلیت های set و get به میزان ایجاد متغیر های نمونه ی پابلیک از اهمیت برخوردار است. این قابلیت یکی از نکات جالب توجه زبان جاوا در زمینه ی مهندسی هنرم افزار است...یک متغیر نمونه public میتواند توسط هر متدی که دارای یک مراجعه به یک شی است که حاوی متغیر نمونه باشد , خوانده یا نوشته شود...اگر متغیر بصورت privatrr اعلان شده باشد یک متد public get بطور مشخص به سایر متد ها اجازه ی دسترسی به متغیر را میدهد , اما متد get تنها میتواند در نحوه ی دسترسی کلاینت به متغیر کنترل داشته باشید..
برای مثال امکان دارد یک متد get بر فرمت برگشتی کنترل داشته باشد از اینرو همانند یک حفاظ در مقابل کد کلاینت در دسترسی به داده واقعی عمل میکند.
یک متد public set میتواند و باید به دقت مبادرت به تغییر مقدار متغیر کند تا مطمعن گردد مقدار جدید برای ان ایتم مناسب است..
برای مثال اقدام به set روز ماه 37 پذیرفته نیست.. یا تنظیم وزن یک نفر به مقدار منفی و الی اخر.. بنابراین اگرچه متد های set و get دسترسی به داده های private را فراهم می اورند ... اما این دسترسی توسط برنامه نویس به هنگام پیاده سازی متد ها با محدودیت همراه میشود
@this_java
بنظر میرسد که تدارک دیدن قابلیت های set و get به میزان ایجاد متغیر های نمونه ی پابلیک از اهمیت برخوردار است. این قابلیت یکی از نکات جالب توجه زبان جاوا در زمینه ی مهندسی هنرم افزار است...یک متغیر نمونه public میتواند توسط هر متدی که دارای یک مراجعه به یک شی است که حاوی متغیر نمونه باشد , خوانده یا نوشته شود...اگر متغیر بصورت privatrr اعلان شده باشد یک متد public get بطور مشخص به سایر متد ها اجازه ی دسترسی به متغیر را میدهد , اما متد get تنها میتواند در نحوه ی دسترسی کلاینت به متغیر کنترل داشته باشید..
برای مثال امکان دارد یک متد get بر فرمت برگشتی کنترل داشته باشد از اینرو همانند یک حفاظ در مقابل کد کلاینت در دسترسی به داده واقعی عمل میکند.
یک متد public set میتواند و باید به دقت مبادرت به تغییر مقدار متغیر کند تا مطمعن گردد مقدار جدید برای ان ایتم مناسب است..
برای مثال اقدام به set روز ماه 37 پذیرفته نیست.. یا تنظیم وزن یک نفر به مقدار منفی و الی اخر.. بنابراین اگرچه متد های set و get دسترسی به داده های private را فراهم می اورند ... اما این دسترسی توسط برنامه نویس به هنگام پیاده سازی متد ها با محدودیت همراه میشود
@this_java
کپسوله سازی(Encapsulation)
کپسوله سازی قابلیتی برای حفظ و پنهان کردن اشیای کلاس می باشد. ممکنه بپرسید چه کسانی قصد دارند به طور غیرقانونی به داده ی من دسترسی داشته باشند؟ موقعی که یک برنامه نویس یک کلاس در جاوا ایجاد می کند، او یک الگوی خاص از این کد بوسیله دیگر کلاس ها طرح می کند. برای مثال متغییر grossIncome نبایستی بطور مستقیم اصلاح شود، بلکه بوسیله متدی که روش های اعتبار سنجی را انجام میدهد مطابق با قواعد برنامه مقدار اختصاص داده شود.
یک برنامه نویس جاوا ممکنه تصمیم بگیرد ۱۵تا از ۲۰ متغییر را پنهان کند، بنابراین دیگر کلاس ها نمی توانند به آنها دسترسی پیدا کنند. بعنوان مثال یک راننده را در نظر بگیرید، آیا لازم است کارکرد تمام قطعات یک اتومبیل را بداند؟ البته که نه، او فقط احتیاج به چطور روشنو خاموش کردن اتومبیل،کارکردن با برف پاک کن و… دارد که در اصطلاح برنامه نویسی به آن واسط مشترک اتومبیل می گوییم.
@this_java
کپسوله سازی قابلیتی برای حفظ و پنهان کردن اشیای کلاس می باشد. ممکنه بپرسید چه کسانی قصد دارند به طور غیرقانونی به داده ی من دسترسی داشته باشند؟ موقعی که یک برنامه نویس یک کلاس در جاوا ایجاد می کند، او یک الگوی خاص از این کد بوسیله دیگر کلاس ها طرح می کند. برای مثال متغییر grossIncome نبایستی بطور مستقیم اصلاح شود، بلکه بوسیله متدی که روش های اعتبار سنجی را انجام میدهد مطابق با قواعد برنامه مقدار اختصاص داده شود.
یک برنامه نویس جاوا ممکنه تصمیم بگیرد ۱۵تا از ۲۰ متغییر را پنهان کند، بنابراین دیگر کلاس ها نمی توانند به آنها دسترسی پیدا کنند. بعنوان مثال یک راننده را در نظر بگیرید، آیا لازم است کارکرد تمام قطعات یک اتومبیل را بداند؟ البته که نه، او فقط احتیاج به چطور روشنو خاموش کردن اتومبیل،کارکردن با برف پاک کن و… دارد که در اصطلاح برنامه نویسی به آن واسط مشترک اتومبیل می گوییم.
@this_java
سازنده های پیش فرض و بدون ارگومان
هر کلاس حداقل باید دارای یک سازنده باشد. اگر سازنده ای در اعلان کلاس در نظر نگرفته باشید کامپایلر یک سازنده پیش فرض که ارگومانی دریافت نمیکند را فراخوانی میکند سازنده ی پیش فرض مبادرت به مقدار دهی متغیر های نمونه با مقادیر اولیه مشخص شده در اعلانشان یا مقادیر پیش فرضشان میکند (صفر برای نوع های عددی , false برای مقادیر بولی و null برای مراجعه ها) ..
اگر در کلاسی اقدام به اعلان سازنده کرده باشید کامپایلر سازنده ی پیش فرض برای ان کلاس ایجاد نخواهد کرد. در این مورد برای مشخص کردن مقدار دهی پیش فرض برای شی های کلاس بایستی یک سازنده ی بدون ارگومان اعلان کنید..
هر کلاس حداقل باید دارای یک سازنده باشد. اگر سازنده ای در اعلان کلاس در نظر نگرفته باشید کامپایلر یک سازنده پیش فرض که ارگومانی دریافت نمیکند را فراخوانی میکند سازنده ی پیش فرض مبادرت به مقدار دهی متغیر های نمونه با مقادیر اولیه مشخص شده در اعلانشان یا مقادیر پیش فرضشان میکند (صفر برای نوع های عددی , false برای مقادیر بولی و null برای مراجعه ها) ..
اگر در کلاسی اقدام به اعلان سازنده کرده باشید کامپایلر سازنده ی پیش فرض برای ان کلاس ایجاد نخواهد کرد. در این مورد برای مشخص کردن مقدار دهی پیش فرض برای شی های کلاس بایستی یک سازنده ی بدون ارگومان اعلان کنید..
متد finaliz مشکلش چیه که برنامه نویسا نباید ازش استفاده کنند؟
ببینین در داخل Java دستوری وجود داره به نام System.gc که کارش اینه که به Garbage Collection دستور میده که مموری های غیر قابل استفاده رو آزاد کن برادر و وقتی که Java تشخیص بده که از یک Object توی مموری استفاده ای دیگه نمیشه و دیگه بهش reference ی وجود نداره متده finalize عه اون Object ترو فراخوانی میکنه تا از تو مموری بندازتش بیرون
حالا نکات زیادی در مورد این System.gc وجود داره :
۱- تضمینی وجود نداره که وقتی که شما فراخوانیش میکنین همون لحظه اعمال بشه، شما در حقیقت این تسک رو میدین دست JVM ولی این JVM عه که تصمیم میگیره کی این تسکی که شما دادین بهش رو اجرا کنه
۲- این کار بسیار کار پر هزینه ای هستش برای JVM چون باید کلی فرایند داخلش انجام بشه و همیشه بهتره که دست خود JVM سپرده بشه این کار تا زمان درستش رو خودش تشخیص بده و انجامش بده
۳- با توجه به نکته ۱ شما نمیتونین تضمین بدین که دقیقا کی اون متده finalize فراخوانی میشه
۴- با توجه به نکته ۱ اگر قبل از اینکه JVM تصمیم بگیره GC رو فراخوانی کنه کل RAM پر بشه برنامه CRASH میکنه پس همیشه بهتره طوری برنامه نوشته بشه که بدرستی Resource ها آزاد بشن. مثلا توی مثال بالا باید توی catch یه final بزاریم و Stream رو close کنیم و یا از ویژگی try با resource عه JDK 7 به بعد استفاده کنیم
۵- دلیل اینکه میگن نباید از متد finalize استفاده کنین اینه که این متد یک متده System ی برای JVM هست و باید مدیریت این Garbage Collection گردن خوده JVM باشه نه شما چون اگر شما این متد رو خودتون مدیریت کنین ممکنه thread زنده ای که داره action عه مورد نظر رو انجام میده سرعت اجرای فرایند داخلی سیستم رو کند کنه (نه lock - فقط کند) و همچنین نکته ی دیگه ای که هست اینه که JVM در داخل دل خودش فرایندهای دیگه ای رو برای کنترل و مدیرت مموری انجام میده.
۶- وقتی که JVM تشخیص بده که همه thread های live ی که با یک Object در حال کار کردن هستند کشته شدند، اونوقته که تصمیم به free کردن حافظه میگیره و متده finalize اون Object مورد نظر رو فراخوانی میکنه
۷- همیشه این متد تنها یکبار توسط JVM فراخوانی میشه و نه بیشتر
۸- در داخل جاوا کلاس هایی وجود دارند که با Weak شروع میشن مثل WeakHashMap . با توجه به نکته شماره ۶ اگر JVM تشخیص بده که به یه Object یک Reference ی هست و thread ی براش هست که ممکنه آبجکت رو به چرخه کار برگردونه، متده finalize عه اون Object رو فراخوانی نمیکنه. حالا این کلاسهایی که در Java به نام Weak شناخته میشن به JVM میگن که آقای JVM تو به Reference هایی که از Object های دیگه به من هست توجه نکن و اگر دیدی Object ی وضعیت finalize شدن رو داره، حتی اگر به منم reference داره متده finalize ش رو فراخوانی کن و بندازش از تو مموری بیرون ....
۹- رفرنس های Phantom دقیقا برعکس Reference های Weak هستند و بیشتر برای Scheduling ها استفاده میشن و هیچوقت reference هاشون رو در اختیار garbage collection قرار نمیدن که GC بتونه اونارو پاک سازی کنه و مادامی که هم خود شیٔ و هم تمام referent های اون شیٔ بطور کامل غیرقابل استفاده نباشند توی مموری میمونند. از این مکانیزم بیشتر برای کارهای Schedling استفاده میشه و روشی منعطف تر از روشی کنترل مموری که خود جاوا توسط مکانیزم JVM در حالت عادی برای پاکسازی اون کارهای خاص انجام میده، دارند.
@this_java
ببینین در داخل Java دستوری وجود داره به نام System.gc که کارش اینه که به Garbage Collection دستور میده که مموری های غیر قابل استفاده رو آزاد کن برادر و وقتی که Java تشخیص بده که از یک Object توی مموری استفاده ای دیگه نمیشه و دیگه بهش reference ی وجود نداره متده finalize عه اون Object ترو فراخوانی میکنه تا از تو مموری بندازتش بیرون
حالا نکات زیادی در مورد این System.gc وجود داره :
۱- تضمینی وجود نداره که وقتی که شما فراخوانیش میکنین همون لحظه اعمال بشه، شما در حقیقت این تسک رو میدین دست JVM ولی این JVM عه که تصمیم میگیره کی این تسکی که شما دادین بهش رو اجرا کنه
۲- این کار بسیار کار پر هزینه ای هستش برای JVM چون باید کلی فرایند داخلش انجام بشه و همیشه بهتره که دست خود JVM سپرده بشه این کار تا زمان درستش رو خودش تشخیص بده و انجامش بده
۳- با توجه به نکته ۱ شما نمیتونین تضمین بدین که دقیقا کی اون متده finalize فراخوانی میشه
۴- با توجه به نکته ۱ اگر قبل از اینکه JVM تصمیم بگیره GC رو فراخوانی کنه کل RAM پر بشه برنامه CRASH میکنه پس همیشه بهتره طوری برنامه نوشته بشه که بدرستی Resource ها آزاد بشن. مثلا توی مثال بالا باید توی catch یه final بزاریم و Stream رو close کنیم و یا از ویژگی try با resource عه JDK 7 به بعد استفاده کنیم
۵- دلیل اینکه میگن نباید از متد finalize استفاده کنین اینه که این متد یک متده System ی برای JVM هست و باید مدیریت این Garbage Collection گردن خوده JVM باشه نه شما چون اگر شما این متد رو خودتون مدیریت کنین ممکنه thread زنده ای که داره action عه مورد نظر رو انجام میده سرعت اجرای فرایند داخلی سیستم رو کند کنه (نه lock - فقط کند) و همچنین نکته ی دیگه ای که هست اینه که JVM در داخل دل خودش فرایندهای دیگه ای رو برای کنترل و مدیرت مموری انجام میده.
۶- وقتی که JVM تشخیص بده که همه thread های live ی که با یک Object در حال کار کردن هستند کشته شدند، اونوقته که تصمیم به free کردن حافظه میگیره و متده finalize اون Object مورد نظر رو فراخوانی میکنه
۷- همیشه این متد تنها یکبار توسط JVM فراخوانی میشه و نه بیشتر
۸- در داخل جاوا کلاس هایی وجود دارند که با Weak شروع میشن مثل WeakHashMap . با توجه به نکته شماره ۶ اگر JVM تشخیص بده که به یه Object یک Reference ی هست و thread ی براش هست که ممکنه آبجکت رو به چرخه کار برگردونه، متده finalize عه اون Object رو فراخوانی نمیکنه. حالا این کلاسهایی که در Java به نام Weak شناخته میشن به JVM میگن که آقای JVM تو به Reference هایی که از Object های دیگه به من هست توجه نکن و اگر دیدی Object ی وضعیت finalize شدن رو داره، حتی اگر به منم reference داره متده finalize ش رو فراخوانی کن و بندازش از تو مموری بیرون ....
۹- رفرنس های Phantom دقیقا برعکس Reference های Weak هستند و بیشتر برای Scheduling ها استفاده میشن و هیچوقت reference هاشون رو در اختیار garbage collection قرار نمیدن که GC بتونه اونارو پاک سازی کنه و مادامی که هم خود شیٔ و هم تمام referent های اون شیٔ بطور کامل غیرقابل استفاده نباشند توی مموری میمونند. از این مکانیزم بیشتر برای کارهای Schedling استفاده میشه و روشی منعطف تر از روشی کنترل مموری که خود جاوا توسط مکانیزم JVM در حالت عادی برای پاکسازی اون کارهای خاص انجام میده، دارند.
@this_java
اعتبار سنجی در متد های set
یکی از مزایای جامعیت داده ها در اتوماتیک نبودن انهاست.. چرا که متغیر های نمونه بصورت private اعلان میشوند, باید اعتبار سنجی داده هارا فراهم اورید. جاوا به شما اجازه میدهد تا به روش های مناسب اقدام به طراحی برنامه ها کنید. متد های set یک کلاس میتواندد مقادیری برگشت دهند که این مقادیر میتوانند دلالت بر اقدام به تخصیص یک داده غیر معتبر به شی های ان کلاس داشته باشند. کلاینت یک کلاس میتواند با تست مقدار برگشتی از یک متد set تعیین کند که ایا کلاینت با موفقیت مبادرت به تغییر شی کرده و عملیات مناسب را انجام داده است یا خیر. با این همه در اغلب موارد متد های set دارای نوع برگشتی void هستند و برای شناسایی, اقدام به تخصیص یک مقدار غیر معتبر از عبارت رسیدگی به استثنا استفاده میکنند.
همانند راه اندازی استثنا در کد زیر:
public void setTime(int hour, int minute, int second) {
throw new IllegalArgumentExeption("Hour, minute or second was out of range");
}
@this_java
یکی از مزایای جامعیت داده ها در اتوماتیک نبودن انهاست.. چرا که متغیر های نمونه بصورت private اعلان میشوند, باید اعتبار سنجی داده هارا فراهم اورید. جاوا به شما اجازه میدهد تا به روش های مناسب اقدام به طراحی برنامه ها کنید. متد های set یک کلاس میتواندد مقادیری برگشت دهند که این مقادیر میتوانند دلالت بر اقدام به تخصیص یک داده غیر معتبر به شی های ان کلاس داشته باشند. کلاینت یک کلاس میتواند با تست مقدار برگشتی از یک متد set تعیین کند که ایا کلاینت با موفقیت مبادرت به تغییر شی کرده و عملیات مناسب را انجام داده است یا خیر. با این همه در اغلب موارد متد های set دارای نوع برگشتی void هستند و برای شناسایی, اقدام به تخصیص یک مقدار غیر معتبر از عبارت رسیدگی به استثنا استفاده میکنند.
همانند راه اندازی استثنا در کد زیر:
public void setTime(int hour, int minute, int second) {
throw new IllegalArgumentExeption("Hour, minute or second was out of range");
}
@this_java
محبوب ترین زبان های برنامه نویسی :
http://bit.ly/2LRzybM
http://bit.ly/2LRzybM
آی کد
۱۰ زبان برنامه نویسی محبوب در ۲۰۱۸ : یاد بگیریم کد بزنیم
برای کسانی که تازه وارد دنیای برنامه نویسی شده اند بزرگ ترین دوراهی تصمیم گرفتن در مورد اینست که از کجا شروع کنند یا کدام زبان برنامه نویسی مزایای شغلی بیشتری دارد. به همین صورت کد نویسان حرفه ای در م
سوپر کلاس و زیر کلاس (subclass, superclass)
غالبا یک شی از یک کلاس , به همان اندازه شی از یک کلاس دیگر است. برای مثال در علم هندسه یک مستطیل یک چهار ضلعی است. از اینرو در جاوا , میتوان گفت که کلاس Rectangle از کلاس Quadrilateral ارث بری داشته است. در این حالت کلاس Quadrilateral یک سوپر کلاس است و کلاس Rectangle یک زیر کلاس میباشد. مستطیل نوع خاصی از چهار ضلعی است, اما تصور اشتباهی است که بگوییم یک چهار ضلعی یک مستطیل است, چرا که چهار ضلعی میتواند یک متوازی الاضلاع یا نوع دیگری از Quadrilateral باشد.
به دلیل اینکه هر شی از زیرکلاس , شی از سوپر کلاس خود است و یک سوپر کلاس میتواند تعداد زیادی زیر کلاس داشته باشد, از اینرو, مجموعه شی های به نمایش در امده توسط سوپر کلاس بیشتر از مجموعه شی های عرضه شده توسط هر زیر کلاس از خود سوپر کلاس است. برای مثال, سوپر کلاس گیاه شامل گیاه گلدار.. دانه دار.. تک لپه ای.. دو لپه ای است در مقابل زیر کلاس گیاه گلدار تنها نشاندهنده ی زیر مجموعه ی کوچکی از تمام گیاهان است:
A = {1,2,3,4};
عدد چهار تنها نشاندهنده ی زیر مجموعه ی کوچکی از کل مجموعه ی A است
@this_java
غالبا یک شی از یک کلاس , به همان اندازه شی از یک کلاس دیگر است. برای مثال در علم هندسه یک مستطیل یک چهار ضلعی است. از اینرو در جاوا , میتوان گفت که کلاس Rectangle از کلاس Quadrilateral ارث بری داشته است. در این حالت کلاس Quadrilateral یک سوپر کلاس است و کلاس Rectangle یک زیر کلاس میباشد. مستطیل نوع خاصی از چهار ضلعی است, اما تصور اشتباهی است که بگوییم یک چهار ضلعی یک مستطیل است, چرا که چهار ضلعی میتواند یک متوازی الاضلاع یا نوع دیگری از Quadrilateral باشد.
به دلیل اینکه هر شی از زیرکلاس , شی از سوپر کلاس خود است و یک سوپر کلاس میتواند تعداد زیادی زیر کلاس داشته باشد, از اینرو, مجموعه شی های به نمایش در امده توسط سوپر کلاس بیشتر از مجموعه شی های عرضه شده توسط هر زیر کلاس از خود سوپر کلاس است. برای مثال, سوپر کلاس گیاه شامل گیاه گلدار.. دانه دار.. تک لپه ای.. دو لپه ای است در مقابل زیر کلاس گیاه گلدار تنها نشاندهنده ی زیر مجموعه ی کوچکی از تمام گیاهان است:
A = {1,2,3,4};
عدد چهار تنها نشاندهنده ی زیر مجموعه ی کوچکی از کل مجموعه ی A است
@this_java
Gorbage Collection
هر شی که ایجاد می کنید از منابع مختلف سیستم استفاده میکند, همانند حافظع. نیاز به روش مناسبی در باز پس گیری منابع سیستم از انهایی که دیگر به اان نیازی ندارند , لازم است تا از فقدان منابع جلوگیری شود. jvm یک عملیات اتوماتیک به نام garbage collection انجام میدهد تا حافظه اشغال شده توسط شی هایی که دیگر نیازی به ان ندارند , را پس بگیرد. زمانیکه دیگر مراجعه ای به یک شی صورت نمیگیرد, توسط jvm علامت گذاری میشود. این حافظه می تواند با اجرای garbage collection توسط jvm پس گرفته شده و به سیستم برگردانده شود. بر خلاف c و c++ که فقدان حافظه در انها امری رایج است (چون حافظه به طور خودکار توسط این زبان ها باز پس گرفته نمیشود) جاوا وضعیت بهتری دار. امکان دارد با فقدان منابع دیگری هم مواجه شویم, برای مثال, یک برنامه میتواند فایلی از روی دیسک باز کند تا انرا تغییر دهد. اگر برنامه فایل را نبندد برنامه ی دیگیری نمیتواند از ان فایل استفاده کند تا اینکه برنامه ای که فایل را باز کرده است کار را تمام کند
@this_java
هر شی که ایجاد می کنید از منابع مختلف سیستم استفاده میکند, همانند حافظع. نیاز به روش مناسبی در باز پس گیری منابع سیستم از انهایی که دیگر به اان نیازی ندارند , لازم است تا از فقدان منابع جلوگیری شود. jvm یک عملیات اتوماتیک به نام garbage collection انجام میدهد تا حافظه اشغال شده توسط شی هایی که دیگر نیازی به ان ندارند , را پس بگیرد. زمانیکه دیگر مراجعه ای به یک شی صورت نمیگیرد, توسط jvm علامت گذاری میشود. این حافظه می تواند با اجرای garbage collection توسط jvm پس گرفته شده و به سیستم برگردانده شود. بر خلاف c و c++ که فقدان حافظه در انها امری رایج است (چون حافظه به طور خودکار توسط این زبان ها باز پس گرفته نمیشود) جاوا وضعیت بهتری دار. امکان دارد با فقدان منابع دیگری هم مواجه شویم, برای مثال, یک برنامه میتواند فایلی از روی دیسک باز کند تا انرا تغییر دهد. اگر برنامه فایل را نبندد برنامه ی دیگیری نمیتواند از ان فایل استفاده کند تا اینکه برنامه ای که فایل را باز کرده است کار را تمام کند
@this_java
نکاتی در ارتباط با متد finalize
هر کلاس در جاوا داری متد هایی از کلاس Object است(پکیج java.lang). که یکی از انها متد finalize است. این متد به ندرت به کار گرفته میشود. با این همه, به دلیل اینکه این متد بخشی از هر کلاس میباشد انرا در اینجا مطرح میکنیم تا درک شما از اهداف این متد کاملتر شود... جزعیات بیشتر درمورد این متد خارج از بحث ماست و اکثر برنامه نویسان نباید از ان استفاده کنند.
متد finalize توسط garbage collector برای انجام عملیات termination houskeeping بر روی شی قبل از بازپس گیری حافظه از ان اجرا میشود. متد finalize پارامتری دریافت نکرده و void برگشت میدهد و مشکلی که با متد finalize رخ میدهد این است که garbage collector تضمینی بر اجرا خود در سر زمان مشخص اراعه نمی کند. درواقع , امکان دارد garbage collector هرگز قبل از خاتمه یک برنامه اجرا نشود. از اینرو اصولا عملکرد ان غیر مشخص بوده و با فراخونی متد finalize همچین رفتاری دارد. به همین دلیل , اکثر برنامه نویسان از متد finalize دوری میکنند!...
@this_java
هر کلاس در جاوا داری متد هایی از کلاس Object است(پکیج java.lang). که یکی از انها متد finalize است. این متد به ندرت به کار گرفته میشود. با این همه, به دلیل اینکه این متد بخشی از هر کلاس میباشد انرا در اینجا مطرح میکنیم تا درک شما از اهداف این متد کاملتر شود... جزعیات بیشتر درمورد این متد خارج از بحث ماست و اکثر برنامه نویسان نباید از ان استفاده کنند.
متد finalize توسط garbage collector برای انجام عملیات termination houskeeping بر روی شی قبل از بازپس گیری حافظه از ان اجرا میشود. متد finalize پارامتری دریافت نکرده و void برگشت میدهد و مشکلی که با متد finalize رخ میدهد این است که garbage collector تضمینی بر اجرا خود در سر زمان مشخص اراعه نمی کند. درواقع , امکان دارد garbage collector هرگز قبل از خاتمه یک برنامه اجرا نشود. از اینرو اصولا عملکرد ان غیر مشخص بوده و با فراخونی متد finalize همچین رفتاری دارد. به همین دلیل , اکثر برنامه نویسان از متد finalize دوری میکنند!...
@this_java
متغیر های نمونه final
یکی از اصول بنیادین در مهندسی نرم افزار, اصل اعطا حداقل امتیاز یا برتری ویژه است. در ارتباط با یک برنامه, این اصل بر این پایه متکی است که باید به کد ان مقدار که برای انجام وظیفه نیاز دارد, امتیاز و حق دسترسی در نظر گرفت و نه بیشتر!
نیاز است تا برخی از متغیر های نمونه دچار تغییر و اصلاح شوند و برخی دیگر نیازی به این تغییرات ندارند. میتوانید با استفاده از کلمه ی کلیدی final مشخص کنید که متغیر تغییر دادنی نیست(یعنی یک ثابت است)و اینکه هر اقدامی در تغییر داده ان خطا محسوب خواهد شد , برای مثال,
private final int INCREMENT;
یک متغیر نمونه بنام INCREMENT از نوع int و بصورت final (ثابت) اعلان کرده است. تگرچه میتوان ثابت هارا در زمان اعلان مقدار دهی اولیه کرد, اما اینکار الزامی نیست. میتوان ثابت هارا توسط هر سازنده کلاس مقدار دهی اولیه کرد...
@this_java
یکی از اصول بنیادین در مهندسی نرم افزار, اصل اعطا حداقل امتیاز یا برتری ویژه است. در ارتباط با یک برنامه, این اصل بر این پایه متکی است که باید به کد ان مقدار که برای انجام وظیفه نیاز دارد, امتیاز و حق دسترسی در نظر گرفت و نه بیشتر!
نیاز است تا برخی از متغیر های نمونه دچار تغییر و اصلاح شوند و برخی دیگر نیازی به این تغییرات ندارند. میتوانید با استفاده از کلمه ی کلیدی final مشخص کنید که متغیر تغییر دادنی نیست(یعنی یک ثابت است)و اینکه هر اقدامی در تغییر داده ان خطا محسوب خواهد شد , برای مثال,
private final int INCREMENT;
یک متغیر نمونه بنام INCREMENT از نوع int و بصورت final (ثابت) اعلان کرده است. تگرچه میتوان ثابت هارا در زمان اعلان مقدار دهی اولیه کرد, اما اینکار الزامی نیست. میتوان ثابت هارا توسط هر سازنده کلاس مقدار دهی اولیه کرد...
@this_java
🔴 رده بندی زبان های برنامه نویسی براساس موقعیت شغلی و تعداد پروژه ها
@this_java
@this_java