PDA

View Full Version : سوال: متد نیتیو، کاربرد استاتیک و Double Buffering



ehsangerrard
چهارشنبه 01 تیر 1390, 16:07 عصر
اگه میشه به این 3سوال من پاسخ بدید:
1.متد نیتیو چه نوع متدی است؟
2.کاربرد استاتیک چیست؟
3.کاربرد double buffering؟
مرسی

enterprise
یک شنبه 05 تیر 1390, 19:10 عصر
یکی از کاربردهای متغیر های استاتیک اینه که هنگام خروج از تابع مقدار خودشون را حفظ میکنند(سابقه را نگه میدارند) یعنی تا زمانی که برنامه کار میکنه اینها تو حافظه هستند!
تفاوتش با گلوبال اینه که به گلوبال سرتاسر برنامه دسترسی داریم ولی استاتیک فقط بلاکی که تعریف شده.

mostafabahrami
دوشنبه 06 تیر 1390, 13:27 عصر
با سلام. سوال اول و سومتو اطلاعات ندارم ولی راجع به سوال دوم باید بگم جوابی که دوستمون enterprise دادن باید بگم ایشون اشتباه می کنن. چون اصولا مبحث استاتیک ربطی به گلوبال نداره. البته باید گفت که تو جاوا چیزی به عنوان گلوبال نداریم. معادل گلوبال public داریم.هر چند که سوال شما به این موضوع ربطی نداره اما جهت اطلاع اون دوستمون باید بگم که ما 4 تا شیوه دسترسی به اعضا کلاس(متغیرها و متدها) داریم :
1-public
2-package
3-protected
4-private
....... بگذریم.
و اما...... استاتیک : نمیدونم تا حالا شده از MessageBox یا توابع ریاضی توی جاوا استفاده کنین یا نه؟ اگر دیده باشین نحوه فراخوانی اونا با فراخوانی توابع معمولی یه کم فرق داره. نگاه کنین:
Math.Abs(-10);
JOptionPane.showMessageDialog(this,"salam");
در اینجا Math و JOptionPane با حروف بزرگ اومدن ونشون دهنده اسم کلاسشون هستن. اما یه سوال پیش میاد اونم اینه که چطوری میشه بدون اینکه شی ءی از یه کلاس ساخت به توابع(متدها) و متغیراش دسترسی داشت؟ کلید این موضوع دست استاتیکه!! ویژگی استاتیک اینه که به شیء وابسته نیست یا بهتر بگم اصلا از طریق شیء قابل دسترسی نیست و فقط با نام کلاس استفاده میشه . فرق متغیر استاتیک با متغیر معمولی اینه که متغیر معمولی در هر شیء مقدار منحصر بفردی داره و با هر بار ساختن یک شی از کلاس متغیر معمولی از مقدار پیش فرض خودش شروع میشه . اما اگر هزاران شیء از یه کلاس بسازیم متغیر استاتیک از اول مقداردهی نمیشه و همون مقداری که قبل داشته حفظ می کنه. حالا این عضو استاتیک هم میتونه یک متغیر باشه هم یه متد که میتونن public , private یا یکی از اون چهار حالتو داشته باشن. به این کد یه نگا بکنی می فهمی خروجیشم زیرش هست.

class TestStatic {

static int staticcounter = 0;
int dynamicCounter = 0;

public void increaseStaticCounter() {
TestStatic.staticcounter++;
}

public void increaseDynamicCounter() {
dynamicCounter++;
}

public int getStaticCounter() {
return TestStatic.staticcounter;
}

public int getDynamicCounter() {
return dynamicCounter;
}
}

public class Main {
public static void main(String[] args) {
TestStatic t1 = new TestStatic();
TestStatic t2 = new TestStatic();
t1.increaseDynamicCounter();
t1.increaseDynamicCounter();
System.out.println("t1.DynamicCounter = " + t1.getDynamicCounter());
t2.increaseDynamicCounter();
t2.increaseDynamicCounter();
t2.increaseDynamicCounter();
System.out.println("t2.getDynamicCounter = " + t2.getDynamicCounter());
t1.increaseStaticCounter();
t2.increaseStaticCounter();
t2.increaseStaticCounter();
t2.increaseStaticCounter();
System.out.println("t1.getStaticCounter() = " + t1.getStaticCounter());
System.out.println("t2.getStaticCounter() = " + t2.getStaticCounter());
TestStatic.staticcounter++;
TestStatic.staticcounter++;
System.out.println("t1.getStaticCounter() = " + t1.getStaticCounter());
System.out.println("t2.getStaticCounter() = " + t2.getStaticCounter());
}


}


اینم خروجیش :
t1.DynamicCounter = 2
t2.getDynamicCounter = 3
t1.getStaticCounter() = 4
t2.getStaticCounter() = 4
t1.getStaticCounter() = 6
t2.getStaticCounter() = 6

persianshadow
جمعه 10 تیر 1390, 09:05 صبح
Double Buffering یک تکنیک برای ترسیم هست ، از این تکنیک در Swing و java2D بهره برده شده .
مشکل اینجاست که وقتی شما شکلی رو روی صفحه نمایش کاربر رسم میکنید به شکل یک فریم هست
و بعد باید فریم بعدی رو ترسیم کنید این کار باعث میشه پرش‌های صورت بگیره که شبیه به چشمک زدن
صفحه هست برای رفع این مشکل از تکنیک Double Buffering استفاده میشه یعنی یک فریم در حافظه ترسیم
میشه و اون فریم روی صفحه ترسیم میشه و چون این فریم بر روی رم قرار داره و سرعت ترسیم بالا هست شما
متوجه چشمک زدن صفحه دیگه نخواهید شد.

enterprise
دوشنبه 13 تیر 1390, 20:50 عصر
بله شما درست می فرمایید:بامزه: