ورود

View Full Version : سوال: کاربرد کلاس های استاتیک در جاوا



JaVa/sUn
شنبه 14 خرداد 1390, 17:07 عصر
سلام دوستان.
من می خواستم دوستان لطف کنند مختصر راجع به کلاس های استاتیک بگویند و اینکه آیا همه فیلد ها و متدهای کلاس استاتیک ، استاتیک است؟(من استاتیک بودن متد و فیلد های یک کلاس را می دانم چی هست ، اما کلاس استاتیک را دقیقا نه)

می دونم که متدهای استاتیک را میشه بدون ساختن object از کلاسی که درآن تعریف شدند استفاده کرد و این خیلی مفیده. اما راجع به کلاسهای استاتیک نمی دونم. با سرچ چند ساعته هم چیزی عایدم نشد(حداقل توی جاوا).

دوستان لطف کنند راجع به نحوه تعریف کلاس های استاتیک و کاربردشان من را کمک کنند. واقعا درک نمی کنم باوجود متد وفیلد استاتیک چه نیازی به مفهومی به نام کلاس استاتیک هست.(؟)
آیا کلاس استاتیک (مثل اینترفیسه که ابسترک کلاسی است که همه متدهاش ابسترک هست) همه فیلد ها و متدهاش استاتیکه؟

ممنون

mazdadoost
شنبه 14 خرداد 1390, 19:40 عصر
. Nested top-level classes are typically used as a convenient way to group related classes without creating a new package

JaVa/sUn
شنبه 14 خرداد 1390, 22:51 عصر
ممنون که توجه کردید.
خدمتون گفتم راجع به کلاس های استاتیک نمیدونم.اگه ممکنه بیشتر و واضح تر توضیح بدید.

یعنی کلاسهای استاتیکی توی پکیجی قرار نگرفتند؟(!) .(من نگرفتم!)

ممنون

mazdadoost
یک شنبه 15 خرداد 1390, 23:40 عصر
توی پکیجی که کلاسی که درش تعریف میشند قرار دارند.

JaVa/sUn
دوشنبه 16 خرداد 1390, 18:43 عصر
ممنون.
من نمیدونم چرا بیشتر توضیح نمیدید؟ فقط یک جمله...
------
من اگه درست گفته باشم شما مثالی از کلاسهای استاتیک زدید یا بهتره بگم کاربردی از اون را گفتید؛ که اون استاتیک تعریف کردن NestedClass هستش.و این حالت مقابلش innerClass _که NestedClass های غیراستاتیک است_ است.
یعنی فقط این استفاده را داره؟
من میخواستم بیشتر و کامل تر و پایه ای تر آشناشم.
اگه بیشتر از این ازحوصله فروم خارجه لطفا یه لینک توتریال (برای استاتیک کلاسها)بدید خودم بخوونم.خودم که پیدا نکردم.
ممنون

JaVa/sUn
سه شنبه 17 خرداد 1390, 18:09 عصر
دوستان جوابی نبود؟
بقیه هم نمی توونند کمک کنند؟

ermia2008
سه شنبه 17 خرداد 1390, 22:08 عصر
سلام
در جاوا تعریف کلاس به ۲ صورت انجام میشه:
1. Top level classes
2. nested classes

اولیش که واضحه چیه همون کلاس های معمولی خودمون هست که در واقغ بعنوان اعضای پکیج هستن.
تعریف کلاس top level به عنوان static امکان پذیر نیست و خطای زمان کامپایل هست.

و اما دومی:
کلاس های nested خودشون به ۲ بخش تقسیم میشن:
1. static nested classes
2. inner classes

نکته ۱: کلاسهای از نوع static nested به همه فیلدهای کلاس دربرگیرندشون دسترسی ندارن وفقط فیلدها و متدهای static رو میبینند
ولی کلاسهای از نوع ۲ به همه فیلدها و متدهای کلاس دربرگیرنده اون دسترسی دارن.

نتیجه ۱:‌ پس تا اینجا مساله دسترسی به فیلدها و متدهای کلاس دربرگیرنده nested class مطرح هست. براساس نوع دسترسی که میخوایم تعیین کنیم میشه از یکی از ۲ مورد بالا استفاده کرد


نکته ۲: یکی از کاربردهای مهم استفاده از inner کلاسها به عنوان eventHandler هست که معمولا هم به صورت anonymous تعریف میشن. مثل:




Button btn = new Button("Ok");
btn.addActionListener(
new ActionListener() {
public voidactionPerformed(ActionEvent ae) {
okClicked();
}
}
);



نکته ۳: یکی از کاربردهای static nested class این هست که بدون نمونه سازی از کلاس در برگیرندش میشه از اون استفاده کرد و بنابراین تعداد اشیا ساخته در برنامه در زمان RunTime کاهش پیدا میکنه.ولی برای کلاس های از نوع inner class حتما باید یک نمونه از شی دربرگیرنده ساخته شود.

مثال:



// creating an instance of the enclosingclass
NestedClassTip nt = new NestedClassTip();



//برای نمونه سازی از inner class باید از شی در برگیرنده نمونه ساخته شود
NestedClassTip.NestedOne nco = nt.new NestedOne();

NestedClassTip.NestedTwo nct = newNestedClassTip.NestedTwo();


public class NestedClassTip {
private String name = "instancename";
private static String staticName = "staticname";

public static void main(String args[]){
NestedClassTip nt= new NestedClassTip();

NestedClassTip.NestedOnenco = nt.new NestedOne();

NestedClassTip.NestedTwonct = new NestedClassTip.NestedTwo();
}

class NestedOne {
NestedOne(){
System.out.println(name);
System.out.println(staticName);
}
}

static class NestedTwo {
NestedTwo(){
System.out.println(staticName);
}
}
}



امیدوارم مفید واقع شده باشه.

موفق باشید

JaVa/sUn
چهارشنبه 18 خرداد 1390, 00:08 صبح
ممنون واقعا.

پس کاملا با تصوری که از متدها و فیلدهای استاتیک داشتم متفاوت عمل می کنه.