شما می توانید با ارسال ایمیل خود ، بصورت رایگان مشترک شده و از بروزسانی مطلع شوید.

ایمیل خود را وارد کنید:

اوراکل (ADF(Application Development Framework یک چارچوب(Framework)  کلی می باشد که برروی استانداردهای Java EE و تکنولوژی های Open Source جهت سادگی و پیاده سازی سریع تر برنامه های Java EE ایجاد شده است که کاملا توسعه پذیر و قابل تنظیم بوسیله افزودن یا اصلاح کتابخانه ها می باشد. ADF وظایف را از طریق ایجاد سرویس […]

CardLayout پنجره ای را در نظر بگیرید که شامل چندین پنل می باشد که در یک زمان فقط یکی از این پنل ها قابل مشاهده می باشد،با استفاده از کلاس java.awt.CardLayout شما می توانید کامپوننتی را ایجاد کنید که فقط یکی از این پنل ها را در یک زمان نمایش دهد، مانند شکل زیر: زمانی […]

اطلاعات سخت افزاری CPU اطلاعات CPU شامل جزئیاتی  مثل معماری ، نام سازنده ، مدل ، تعداد هسته ها ، سرعت هرکدام از هسته ها و غیره است. برای دسترسی به چنین جزئیاتی درباره سخت افزار CPU در لینوکس، تعداد بسیار اندکی کامند برای این منظور وجود دارد که ما در اینجا بطور مختصر تعدادی […]

کلمات کلیدی در جاوا

 

کلمه کلیدی super

اگر یک متد در کلاس فرزند Override شده است،دو نوع متد با خط تعریف یکسان وجود دارد،اگر شما فقط یک متد را با نامش صدا بزنید بعنوان مثال متد ()CalcTax را از کلاس NJTax در بخش های قبلی،JVM متد Override شده را فراخوانی خواهد کرد،اما در مواقعی شما احتیاج دارید متد داخل کلاس پدر را فراخوانی کنید.کلمه کلیدی Super شما را قادر می سازد به فراخوانی دقیق یک متد یا یک سازنده از کلاس پدر،برای مثال ()Super.CalcTax

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

مثال ۱ : فراخوانی سازنده از کلاس پدر.

class SmallerTax extends Tax{
// Constructor
SmallerTax (double gi, String st, int depen){
super(gi,st,depen);
System.out.println(“Applying special tax rates for my friends.”);
}
}

کلمه کلیدی this

کلمه کلیدی this موقعی استفاده می شود که شما به دسترسی شی ای از کلاس از متد خود آن کلاس احتیاج دارید.کدهای مثال مربوط به کلاس Tax را مرور کنید.نام های آرگومانهای سازنده از نام های متغییر کلاس متفاوت بودند.اما کد مثال زیر چگونگی استفاده از متغییرهای همنام را هم در آرگومانها و هم در متغییرهای کلاس نشان می دهد.کلمه کلیدی this به رفع ناسازگاری های نام کمک می کند.برای فهماندن به JVM جهت استفاده متغییر grossIncome از Syntax زیر استفاده کنید.

                                                                                                                           this.grossIncome = 50000;

اگر فقط یک متغییر grossIncome در کلاس Tax بود شما براحتی می توانید this را حذف کنید اما در مثال زیر عدم استفاده از this منجر به ابهام می شود و متغییر هرگز مقدار دهی اولیه نمی شود.

مثال ۲ : حل مشکلات نام با استفاده از کلمه کلیدی this

class Tax {
double grossIncome; // class member variables
String state;
int dependents;
// Constructor
Tax (double grossIncome, String state, int dependents){
this.grossIncome = grossIncome; // instance variable initialization
this.state = state;
this.dependents=dependents;
}
}

یک کلاس با نام SomeOtherClass در نظر بگیرید که دارای متدی به نام(verifyTax(Tax t می باشد.همانطور که میبینید  آن انتظار یک شی از کلاس  Tax را بعنوان آرگومان دارد.مثالی که در پایین آورده شده نشان می دهد که شما چگونه می توانید آنرا از کلاس Tax با استفاده از کلمه کلیدی this برای ارسال یک ارجاع به شی جاری از کلاس Tax فراخوانی کنید.

مثال ۳ : فراخوانی یک سازنده Overload شده با کلمه کلیدی this

class Tax {
void verifyTax(){
SomeOtherClass s = new SomeOtherClass();
s.verifyTax(this);
}
}

یکی دیگر از موارد استفاده this__یک کلاسی که دارای چندین سازنده Overload شده با تعداد آرگومانهای متفاوت را در نظر بگیرید.شما می توانید با استفاده از کلمه کلیدی this یک نوع خاص سازنده را فراخوانی کنید.در مثال زیر دومین سازنده اولی را فراخوانی می کند.

مثال ۴ : فراخوانی یک سازنده Overload شده با کلمه کلیدی this

class Tax {
double grossIncome; // class member variables
String state;
int dependents;
// First Constructor
Tax (double grossIncome, String state, int dependents){
this.grossIncome = grossIncome; // instance variable initialization
this.state = state;
this.dependents=dependents;
}
// Second Constructor
Tax (double grossIncome, int dependents){
this(grossIncome, “NY”, dependents);
}
}

ارسال بوسیله  مقدار یا ارجاع(Passing by Value or by Reference)

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

مقدارهای اولیه با مقدار ارسال شده هستند(به این معنی که یک کپی اضافی در حافظه برای هر متغییر ایجاد شده).اگر شما یک شی از کلاس Tax مانند مثال زیر بسازید،۲ کپی از متغییر grossIncome و  ۲ کپی از متغییر dependents وجود خواهد داشت،یکی از کلاس TestTax و دیگری از کلاس Tax.

مثال ۵ : کلاس TestTax

class TestTax{
public static void main(String[] args){
double grossIncome; // local variables
String state;
int dependents;
grossIncome= 50000;
dependents= 2;
state= “NJ”;
Tax t = new Tax(grossIncome, state, dependents);
double yourTax = t.calcTax(); //calculating tax
// Printing the result
System.out.println(“Your tax is ” + yourTax);
}
}

در این مثال اگر شما بخواهید مقدار grossIncome یا dependent را تغییر بدهید در ساختار کلاس Tax تاثیری نخواهد داشت زیرا ۲ کپی از این مقدارهای اولیه وجود خواهد داشت.

اکنون مثال دیگری را طرح می کنیم،من قصد دارم متغییر دیگری از نوع Tax تعریف کنم و مقداری از t به آن اختصاص بدهم :

Tax t2=t;

متغییر t به یک نمونه ای از شی Tax در حافظه اشاره دارد،به عبارتی دیگر متغییر t آدرس در حافظه یا Reference یک شی را نگه می دارد.کدهای ذکر شده در بالا دیگر از شی tax در حافظه کپی ایجاد نخواهد کرد اما برای متغییر t2 آدرس متغییر را کپی می کند.اکنون ما هنوز یک نمونه تنها از شی Tax در حافظه داریم اما الان ۲ متغییر Reference یعنی t1,t2 در آن اشاره دارند.تا زمانی که هردوی این متغییرها از محدوده خارج شوند شی Tax از حافظه از بین نخواهد رفت.فرآیند حذف شی های استفاده نشده در حافظه را Garbage Collection  یا GC گویند.JVM بطور اتوماتیک GC را اجرا می کند.

کد نمایش داده شده در  مثال ۳  مقدار آرگومان را به طریقی دیگر ارسال می کند.به نظر می رسد که تمام نمونه های شی Tax را به متد ()verifyTax ارسال می کند.در حقیقت،اگرچه در   SomeOtherClass کپی دیگری از متغییر Reference در شی Tax ایجاد خواهد شد اما نمونه ی شی Tax همانطور باقی خواهد ماند.

این به این معنی است که اگر کد کلاس SomeOtherClass بعضی از خصوصیات را تغییر دهد،این تغییرات فقط بر کپی نمونه Tax اعمال خواهد شد واز هردوی Tax و SomeOtherClass قابل مشاهده خواهد بود.

دیدگاه خود را به ما بگویید.