1 / 28

متدهای استاتیک

متدهای استاتیک. دکتر مظفر بگ محمدی دانشگاه ایلام. استاتیک به چه معنا است؟. می توان از برچسب static برای متغییرها و ثابتهای و متدها استفاده کرد. در این موضوع، استاتیک به این معنا است که متغییر، ثابت یا متد به کلاس (و نه به شی که از نوع کلاس تعریف می شود) تعلق دارد.

sona
Download Presentation

متدهای استاتیک

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. متدهای استاتیک دکتر مظفر بگ محمدی دانشگاه ایلام

  2. استاتیک به چه معنا است؟ • می توان از برچسب static برای متغییرها و ثابتهای و متدها استفاده کرد. • در این موضوع، استاتیک به این معنا است که متغییر، ثابت یا متد به کلاس (و نه به شی که از نوع کلاس تعریف می شود) تعلق دارد. • لازم نیست که برای دسترسی به متدها، متغییرها و ثابتهای استاتیک کلاس یک شی ایجاد کرد.

  3. ثابتهای استاتیک یک ثابت استاتیک می تواند عمومی یا خصوصی باشد. مقدار ثابت استاتیک را نمی توان عوض کرد، پس می توان آنرا عمومی تعریف کرد و به برنامه نویسان مشتری اجازه داد از آن استفاده کنند. یک ثابت استاتیک خصوصی را فقط می توان در هنگام تعریف کلاس استفاده نمود. در تعریف ثابتهای استاتیک باید از کلمه ی final نیز استفاده کرد تا فرزندان نتوانند آنرا دوباره تغییر دهند. public static final int BIRTH_YEAR = 1954; ثابتهای استاتیک به خود کلاس تعلق دارند و فقط یک نسخه از ثابت استاتیک وجود دارد که بین تمام اشیاء مشترک است. اگر ثابت استاتیک عمومی باشد، برنامه نویسان مشتری می توانند از آن استفاده کنند. برای ارجاع به ثابت استاتیک در خارج از کلاس از روش زیر استفاده کنید: int year = MyClass.BIRTH_YEAR;

  4. متغییرهای استاتیک متغییر استاتیک به طور کلی به کلاس تعلق دارد و به یک شی متعلق نیست. یعنی به ازای هر کلاس، یک کپی از متغییر استاتیک وجود دارد. تمام اشیاء کلاس به متغییر استاتیک دسترسی دارند و می توانند آنرا تغییر دهند یا بخوانند. متغییر استاتیک بصورت زیر تعریف می شود: private static int myStaticVariable; می توان متغییر استاتیک را تعریف نمود و بطور همزمان مقداردهی اولیه آنرا نیز انجام داد: private static int myStaticVariable = 0;

  5. متدهای استاتیک تا کنون • برای فراخوانی متدهای کلاس از یک شی استفاده کردیم: Date birthday = new Date(1, 23, 1982); String s = birthday.toString( ); • به این متدها متد غیر ایستا گفته می شود. متدهای استاتیک: • نیز به کلاس متعلق هستند، اما به شی فراخوانی کننده نیاز ندارند • بیشتر برای پیاده سازهای توابع کاربردی استفاده می گردد.

  6. متدmonthString یادآوری: کلاس Date یک متد کمکی به اسم monthStringفراهم کرده است: • حال می توان بصورت زیر به کاربران Date اجازه داد بدون ایجاد یک شی متد فوق را فراخوانی کند: public static StringmonthString( intmonthNumber ) { switch ( monthNumber ) { case 1: return "January"; case 2: return "February"; case 3: return "March"; case 4: return "April"; case 5: return "May"; case 6: return "June"; case 7: return "July"; case 8: return "August"; case 9: return "September"; case 10: return "October"; case 11: return "November"; case 12: return "December"; default: return “????”; } } It is now a public static method.

  7. دموی monthString • کدهای خارج از کلاس Date می توانند از متد monthString استفاده کنند، بدون این که یک شی ایجاد کنند. • بجای اسم یک شی، از اسم کلاس برای فراخوانی متد استاتیک استفاده کنید. class MonthStringDemo { public static void main( String [ ] args ) { String month = Date.monthString( 6 ); System.out.println( month ); } } Date اسم یک کلاس است نه شی. monthStringاسم یک متد استاتیک است.

  8. قوانین متدهای استاتیک • متدهای استاتیک شی میزبان/فراخوانی کننده ندارند. لذا : • نمی توانند از this استفاده کنند. • به هیچ کدام از متغییرهای کلاس دسترسی ندارند. • نمی توانند متدی را فراخوانی کنند که از this یا متغییر کلاس استفاده می کند. • متدهای استاتیک فقط می توانند متدهای استاتیک دیگر را فراخوانی کنند یا به متغییرهای و ثابتهای استاتیک دسترسی داشته باشند یا متغییرهای استاتیک را تغییر دهند. • تعریف کلاس می تواند شامل متدهای استاتیک و معمولی باشد.

  9. متد استاتیک برای تبدیل Fo به Co public class FtoC { public static double convert( double degreesF ) { return 5.0 / 9.0 * (degreesF – 32 ); } } public class F2CDemo { public static void main( String[ ] args ) { double degreesF = 100; // Since convert is static, no object is needed // The class name is used when convert is called double degreesC = FtoC.convert( degreesF ); System.out.println( degreesC ); } }

  10. main یک متد استاتیک است به امضای main توجه کنید: public static void main(String [] args) استاتیک بودنmain دو خاصیت دارد: • می توان main را بدون ایجاد شی صدا زد. • متدهای کمکی که توسط main صدا زده می شوند نیز باید استاتیک باشند.

  11. هر کلاس می تواند یک main( ) داشته باشد. • هر کلاسی می تواند یک متد استاتیک عمومی به اسمmain() داشته باشد. • جاوا متد main کلاسی که در خط فرمان مشخص شده باشد را صدا می زند: java <className> • به این ترتیب می توان کلاسها را تست کرد.

  12. کلاس Math کلاس Math دارای تعدادی متد ریاضی است. در بسته ی java.lang قرار دارد و نیازی به import ندارد. تمام متدها و داده های آن استاتیک هستند. یعنی توسط اسم کلاس (Math) فراخوانی می شوند. کلاس Math دو ثابت تعریف شده دارد: E (e, the base of the natural logarithm system)and PI (, 3.1415 . . .). area = Math.PI * radius * radius;

  13. بعضی از متدهای کلاس Math (قسمت 1 از 5)

  14. بعضی از متدهای کلاس Math (قسمت 2 از 5)

  15. بعضی از متدهای کلاس Math (قسمت 3 از 5)

  16. بعضی از متدهای کلاس Math (قسمت 4 از 5)

  17. بعضی از متدهای کلاس Math (قسمت 5 از 5)

  18. دوره ی استاتیک • قسمتی از یک کلاس در زیر داده شده است: public class C {public int a = 0;public static int b = 1; public void f( ) { …}public static void g( ) {…} } • آیا تابع f می تواند به a ارجاع دهد؟ • آیا تابع f می تواند به b ارجاع دهد؟ • آیا تابع g می تواند به a ارجاع دهد؟ • آیا تابع g می تواند به b ارجاع دهد؟ • آیا تابع f می تواند تابع g را صدا کند؟ • آیا تابع g می تواند تابع f را صدا کند؟

  19. کلاسهای پوشاننده برای هر کدام از انواع اصلی یک کلاس پوشاننده متناظر وجود دارد. یعنی کلاسی داریم که شبیه انواع اصلی رفتار می کند. کلاسهای پوشاننده برای انواع اصلی: byte, short, int, long, float, double, و char به ترتیب برابر: Byte, Short, Integer,Long, Float, Double, و Character هستند کلاسهای پوشاننده شامل ثوابت از قبل تعریف شده و متدهای استاتیک هستند.

  20. ثوابت ومتدهای استاتیک کلاسهای پوشاننده کلاسهای پوشاننده دارای ثابتهایی هستند که بزرگترین و کوچکترین عدد را برای انواع داده ای اصلی در آنها ذخیره کرده اند. Integer.MAX_VALUE,Integer.MIN_VALUE,Double.MAX_VALUE, Double.MIN_VALUE, etc. کلاس Boolean دو اسم برای مقادیر صحیح و غلط دارند. Boolean.TRUE با trueمتناظر است. Boolean.FALSEبا falseمتناظر است.

  21. ثوابت ومتدهای استاتیک کلاسهای پوشاننده بعضی از متدهای استاتیک معادل عددی رشته ی داده شده (به شرطی که رشته غلط نباشد) را به عددی از نوع کلاس مربوطه تبدیل می کنند. متدهای Integer.parseInt(),Long.parseLong(), Float.parseFloat(), و Double.parseDouble()از این دسته هستند و به ترتیب یک عدد int,long,float, و double. تولید می کنند. همچنین متدهای استاتیکی وجود دارند که عمل معکوس را انجام می دهند. یعنی از عدد به رشته تبدیل می کنند. مثلاً عبارت: Double.toString(123.99); مقدار "123.99”برمیگرداند. کلاس Characterشامل تعدادی متد استاتیک مفید است که برای پردازش رشته مناسب هستند.

  22. پوشاننده ها و ورودی خط فرمان • آرگومانهای خط فرمان از طریق پارامتری به اسم args به کلاس main فرستاده می شوند. public static void main (String[ ] args) • برای مثال، اگر تایپ کنیم که: java proj1.Project1 Bob 42 در نتیجه args[0] = “Bob” و args[1] = “42” خواهند بود. • حال می توانیم از متد Integer.parseInt( )برای تبدیل رشته ی “42” به عدد 42 استفاه کنیم: int age = Integer.parseInt( args[ 1 ] );

  23. متدهای کلاس کاراکتر Character (1 از 3)

  24. متدهای کلاس کاراکتر Character (2 از 3)

  25. متدهای کلاس کاراکتر Character (3از 3)

  26. بسته بندی Boxing یا بسته بندی به عملی گفته می شود که یک مقدار از انواع اصلی را به یک شی متناظر از نوع کلاس پوشاننده تبدیل می کند. مقدار اصلی را به عنوان آرگومان به سازنده کلاس لفاف متناظر ارسال کنید و یک شی ایجاد کنید. شی جدید یک کپی از مقدار اصلی را دارد. Integer integerObject = new Integer(42); کلاسهای پوشاننده سازنده ی بدون آرگومان ندارند. مقدار داخل پوشاننده غیر قابل تغییر است.

  27. باز کردن بسته بندی باز کردن بسته بندی به عملی گفته می شود که یک شی پوشاننده را به مقدار اصلی متناظر با آن تبدیل می کند. در کلاسهای Byte, Short, Integer, Long, Float, Double, و Character متدهای byteValue, shortValue, intValue, longValue, floatValue, doubleValue, و charValueعمل باز کردن بسته بندی را انجام می دهند. این متدها آرگومان ندارند: inti = integerObject.intValue();

  28. بسته بندی اتوماتیک از جاوای نسخه ی 5 به بعد، جاوا اعمال بسته بندی و باز کردن آنرا به صورت اتوماتیک انجام می دهد. Integer integerObject = 42; به جای: Integer integerObject = new Integer(42); ---------------------------------------- inti = integerObject; به جای: inti = integerObject.intValue();

More Related