نمایش نتایج 1 تا 7 از 7

نام تاپیک: تابع Main

  1. #1
    کاربر دائمی آواتار suraty
    تاریخ عضویت
    خرداد 1389
    محل زندگی
    http://narmafzaria.blogfa.com
    پست
    182

    تابع Main

    سلام.
    من تازه با نرم افزار NetBeans آشنا شدم. یه سوالی داشتم. دلیل اینکه تابع Main در کلاس اصلی به صورت استاتیک تعریف میشه چیه.
    public static void main(String[] args) {
    این تابع موقع اجرا توسط چی و کجا فراخوانی میشه که باید استاتیک باشه؟
    کجاست که نمیشه در اون یک شی جدید از این کلاس اصلی ساخت و تابع مین رو فراخوانی کرد؟

  2. #2

    نقل قول: تابع Main

    این تابع مستقیما توسط JVM فراخوانی میشه و باید static باشه چون نیازی نیست که static نباشه.
    در زبان‌های برنامه‌نویسی شیء گرای ناکامل (مثل ++C) این متد اصلا توی هیچ کلاسی قرار نمیگیره که بخواد static باشه یا نباشه. (البته درستش اینه که اینجا بش بگیم تابع. یه تفاوتای کوچیکی دارن)
    اما توی زبان‌های برنامه‌نویسی شیءگرای کامل مثل Java (و #C) این متد به این صورت تعریف میشه.
    اگر به بهداشت و سلامت حیوانات علاقه دارید، از vetMD.ir دیدن کنید.
    وبلاگ شخصی من: fadavi.net

    اینجا کمتر سر می‌زنم. (تلگرام من)

  3. #3
    کاربر دائمی آواتار cups_of_java
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    تهران
    سن
    40
    پست
    1,544

    نقل قول: تابع Main

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

    کجاست که نمیشه در اون یک شی جدید از این کلاس اصلی ساخت و تابع مین رو فراخوانی کرد؟
    یعنی چی؟

  4. #4
    کاربر دائمی آواتار suraty
    تاریخ عضویت
    خرداد 1389
    محل زندگی
    http://narmafzaria.blogfa.com
    پست
    182

    نقل قول: تابع Main

    منظورم اشاره به خاصیت متد استاتیک است که بدون احتیاج به ساخت شی جدید و با فراخوانی توسط نام کلاس می توان تابع را صدا زد. چرا جاوا در JVM یک شی جدید از کلاس اصلی نمی سازد و بعد متد مین که استاتیک هم نباشد را روی آن فراخوانی کند؟

  5. #5

    نقل قول: تابع Main

    نقل قول نوشته شده توسط suraty مشاهده تاپیک
    منظورم اشاره به خاصیت متد استاتیک است که بدون احتیاج به ساخت شی جدید و با فراخوانی توسط نام کلاس می توان تابع را صدا زد. چرا جاوا در JVM یک شی جدید از کلاس اصلی نمی سازد و بعد متد مین که استاتیک هم نباشد را روی آن فراخوانی کند؟
    اولین مطلب اینه که اینا همه قرارداده! بله میشه در مورد خیلی چیزا سؤال پرسید. چرا اسمش باید main باشه؟ چرا start نباشه؟ اصلا چرا یه متد باشه؟ میتونست سازنده‌ی یه کلاس باشه... بالاخره این روش چیزیه از زمان بوجود اومدن زبان‌های ساخت‌یافته رواج پیدا کرده و در زبان‌های معروفی مثل C، VB6، CSharp و VB.net کمابیش یکسان دیده میشه. جاوا هم قرار نبوده در دنیای برنامه‌نویسی طرحی نو در اندازه! خصوصا که یکی از افتخارات جاوا اینه که بصورت C-like (مشابه زبان C) هست. در مورد Entry Point میتونی اینجا بخونی.

    اما گذشته از این، روشی رو که شما مطرح میکنید، در وهله اول اصلا توجیه پذیر نیست. چون نیازی به شکل گیری این روش نیست. وقتی میشه با اتلاف حافظه و منابع کمتر یه برنامه رو شروع کرد (هرچند این تفاوت زیاد نباشه) چرا باید توی مصرف منابع اسراف کنیم؟
    همونطور که میدونید فرآیندهایی که ما توی برنامه‌نویسی بشون شکل میدیم از یه دیدگاه به دو نوع ثابت-سرعت و متغیر-سرعت تقسیم میشن. ثابت-سرعت به فرآیند‌هایی میگن که مستقل از اینکه چه مقدار داده توی جریان فرآیند قرار میگیره میتونن به سرعت تقریبا یکسانی اجرایی شن و متغیر-سرعت به فرآیند‌هایی که با افزایش میزان داده‌ها (و با ضابطه‌ای معین) احتمالا سرعتشون کاهش پیدا میکنه.
    نمیخوام وارد این بحث بشم... ما همیشه توی برنامه‌نویسی باید سعی کنیم فرآیند‌هامون رو ثابت-سرعت کنیم یا حداقل از شیب تغییرات کم کنیم. پیشنهادی که شما برای تغییر ماشین مجازی جاوا مطرح کردید، فرآیند اجرای برنامه رو متغیر-سرعت میکنه. یعنی هرچی کلاس اجراکننده‌ی برنامه سنگین‌تر باشه، شروع برنامه بیشتر طول میکشه.

    مطلب بعد، همونطور که cups_of_java عزیز گفتن، تابع main درست در اولین نقطه‌ی شروع برنامه فراخوانی میشه. هر شیء در زیان‌های برنامه‌نویسی شیءگرای کامل نیاز به یه بلوک والد داره و حوزه‌ی تعریفش هم از روی همین بلوک تعریف میشه. حالا که برنامه میخواد شروع بشه، اون شیء کذایی که شما میفرمایید باید چه حوزه‌ی تعریفی داشته باشه؟ یادمون باشه تابع main بصورت Native فراخوانی میشه.

    البته پیشنهاد شروع برنامه با یک کلاس توی خیلی از فریمورک‌ها (حتی خود جاوا) دیده میشه. اما معمولا معینیش این نیست که متد/تابع main حذف شده. معنیش اینه که اون فریمورک خودش تابع main رو برای ما نوشته و با اینکار کمی به ما کمک کرده.
    اگر به بهداشت و سلامت حیوانات علاقه دارید، از vetMD.ir دیدن کنید.
    وبلاگ شخصی من: fadavi.net

    اینجا کمتر سر می‌زنم. (تلگرام من)

  6. #6
    کاربر دائمی آواتار cups_of_java
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    تهران
    سن
    40
    پست
    1,544

    نقل قول: تابع Main

    نقل قول نوشته شده توسط suraty مشاهده تاپیک
    چرا جاوا در JVM یک شی جدید از کلاس اصلی نمی سازد و بعد متد مین که استاتیک هم نباشد را روی آن فراخوانی کند؟
    چون اون کلاس اصلی رو شما (برنامه نویس) نوشتی و ممکنه کانستراکتورش رو طوری بنویسی که اون بنده خدا نتونه فراخوانیش کنه... می تونی خصوصی کنی کانستراتور رو... می تونی پارامتر دارش کنی و اون نمیدونه چه اطلاعاتی باید پاس کنه... خلاصه جوور در نمیاد اینطوری.
    کار کامپایلر و محیط اجرا باید از قبل تعریف شده و منظم باشه

  7. #7

    نقل قول: تابع Main

    وقتی در تعریف یک متد کلمه static را بکار میبریم بدین معناست که میتوانیم آن متد را بدون اینکه از کلاس اش نمونه ای ساخته شود، فراخوانی کنیم. و فقط لازم است نام کلاسی که در آن قرار دارد را بدانیم.
    در واقع با هر بار اجرای برنامه اولین متدی که فراخوانی میشود(بصورت خودکار و با کلیک بر روی دکمه استارت نه در قسمت کدنویسی!) متد main است....(چون متد main نطقه آغاز هر برنامه ای است) به همین دلیل بصورت static تعریف میشود که ما بتوانیم بدون نمونه سازی از کلاس اصلی(کلاسی که متد main در آن تعریف شده است.) آن متد را فراخوانی کنیم.


تاپیک های مشابه

  1. آرگومان های تابع main لطفا یه توضیح کوچک بدهید
    نوشته شده توسط siahacker در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 9
    آخرین پست: یک شنبه 22 فروردین 1395, 19:29 عصر
  2. سوال: آرگومان ورودی تابع main
    نوشته شده توسط Sasy360 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 3
    آخرین پست: پنج شنبه 07 خرداد 1388, 13:28 عصر
  3. سوال: در مورد تابع main در vC++‎.net 2008
    نوشته شده توسط jeson_park در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 5
    آخرین پست: سه شنبه 11 فروردین 1388, 02:57 صبح
  4. مشکل در صدا زردن یک تابع از درون تابع main
    نوشته شده توسط shiva_h در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: چهارشنبه 22 خرداد 1387, 16:05 عصر
  5. عوض کردن نام تابع main در TC
    نوشته شده توسط cache_overflow در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 13
    آخرین پست: جمعه 08 دی 1385, 01:24 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •