1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

برنامه نویسی جاوا – قسمت اول

شروع موضوع توسط minaaa ‏25/10/11 در انجمن Java Script

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    [h=2][/h]
    برنامه نویسی جاوا – قسمت اول



    از امروز با آموزش زبان برنامه نویسی جاوا و آموزش خانم مینا هوشمند در خدمت شما عزیزیان خواهیم بود، امیدوارم که این آموزشها برای شما مفید واقع بشه(کامران)
    چند وقتی بود که تو فکر تهیه یک منبع روان و قابل فهم در مورد زبان برنامه نویسی جاوا بودم. وقتی با این سایت آشنا شدم ؛ تصمیم گرفتم این منبع رو با بقیا شما دوستان شریک بشم.
    از این با بعد درسنامه هایی تحت عنوان آموزش زبان جاوا خواهیم داشت. هر کس هر جا مشکلی داره حتما بپرسه چون جاوا زبان تقریبا مشکلی هست اما اگه خوب راه بیفتیم مثل هر زبان دیگه ای جذابیت های خاص خودشو داره.
    بهتر هست کسانی که قصد مطالعه این درسنامه ها رو دارن با زبان C یا C++ آشنایی داشته باشن یا حداقل مبانی یک زبان رو بدونن.
    اگه کسی باشه که جاوا اولین زبان برای یادگیری اون باشه باید بگم راه سختی رو در پیش داره.
    البته من سعی می کنم هر جا که لازم شد یه flash back به مطالب C++ داشته باشم.قبل از هر چیزی میخوام سرفصلها رو براتون بگم که دقیقا بدونید قرار هست چه مطالبی رو یاد بگیرید :
    Unit1 : تاریخچه و سیر تکاملی جاوا
    Unit2 : اصطلاحات مهم جاوا
    Unit3 :برنامه سازی شیء گرا
    Unit4 : انواع داده هاو متغیر ها و آرایه ها
    Unit5: عملگرها
    Unit6: عبارات کنترلی
    Unit7: معرفی کلاسها-قسمت اول
    Unit 8: معرفی کلاسها-قسمت دوم(متد ها و کلاس ها)
    Unit 9: وراثت
    Unit10: پکیج ها و رابطها
    Unit 11: استثتاها
    Unit 12: multithreaded برنامه سازی
    Unit 13: داده های جانبی- فهرست ثابت ها وautoboxing
    Unit14 : ورودی –خروجی و اپلت ها
    Unit 15 : داده های عمومی
    خوب این هم از درس اول:
    Unit 1

    تاریخچه و سیر تکاملی جاوا
    برای درک کامل جاوا باید دلایل به وجود آمدن آن و نیرو های شکل دهنده آن و میراثی که به ارث برده است رو درک کنیم. زبان برنامه نویسی جاوا هم مثل زبان های برنامه نویسی موفقی که قبل از اون مطرح شده؛ ترکیبی از بهترین عناصر میراث غنی خود است که با مفاهیمی که منحصر به این زبان است ادغام شده است.
    اگر چه جاوا به طور تنگاتنگی با محیط اینترنت ارتباط داره اما لازمه به خاطر داشته باشید که که بیش از هر چیز یک زبان برنامه نویسی است.
    ابداع؛توسعه و تکامل زبانها به دو دلیل رخ می دهد:
    ۱- برای تطبیق با محیط ها و کاربرد های در حال تغییر
    ۲- برای عملی ساختان موارد خاص و پیشرفته هنر برنامه سازی
    پیشینیان زبان جاوا
    زبان جاوا ارتباط تنگاتنگی با C++ دارد که به نوبه خودش؛ به طور مستقیم از زبان C مشتق شده است. بیشتر ویژگی های جاوا از این دو زبان به ارث رسیده است به طور مثال ساختار گرامری جاوا از C مشتق شده است.
    زبان C++ هم بر بسیاری از ویژگی های شیئ گرایی Object Oriented جاوا تاثیر گذاشته است. علاوه بر این شکل گیری زبان جاوا در فرآیند “تصفیه و تطبیق” Refinement and Adaption ریشه داره که عموما در چند دهه اخیر در زبان های جدید رخ داده است.
    دلیل هر یک از این نوآوری های مطرح در طراحی هر زبان؛ نیاز به حل مسائلی بوده که زبان های پیشین قادر به حلشون نبودن.
    تولد زبان برنامه سازی نوین C
    زبان برنامه سازی C دنیای کامپیوتر ها رو متحول کرد و تغییر اساسی در نگرش برنامه نویسی ایجاد کرد. طراحی و پیاده سازی زبان C نتیجه مستقیم نیاز به یک زبان ساختار یافته ؛ کادآمد و سطح بالا بود که بتونه جایگزین زبان اسمبلی در نوشتن برنامه های سیستمی بشه. زبان C هم مثل هر زبان دیگه ای تونست بین موارد زیر توازن نسبی ایجاد کنه:
    سهولت استفاده
    امنیت در مقابل بازدهی
    استحکام در مقابل گسترش
    برنامه سازان معمولا قبل از مطرح شدن C باید زبانی رو از بین زبانهای دیگه انتخاب می کردن که تنها یکی از خصوصیات گفته شده رو داشته باشه .مثلا زبان فرترنFORTRAN امکان نوشتن برنامه های نسبتا کارآمد برای کاربرد های علمی رو به ما میده اما این زبان برای نوشتن برنامه های سیستمی مناسب نیست یا با اینکه یادگیری بیسیکBASIC آسونه اما زبان قدرتمندی نیست و در ساختارش نقص داره. با استفاده از زبان اسمبلیAssembly می تونیم برنامه های بسیار کارآمد تولید کنیم اما یادگیری اون مشکله و به کار بردن اونم خیلی سخته علاوه بر این اشکال زدایی در آن هم دشوار و وقت گیره.
    مشکل دیگه اینه که زبان هایی وثل بیسیک و کوبولCOBOL و فرترن بر اساس اصول ساختار یافته طراحی نشده اند و همه این زبان ها از دستور GOTO برای هدایت کنترل برنامه ها استفاده می کردند و در نتیجه برنامه هایی که با این زبان ها نوشته می شدند منجر به تولید کد اسپاگتی(حجم زیادی از انشعابات شرطی و غیر شرطی که درک برنامه رو سخت میکنه) می شدند.
    گرچه زبانی مثل پاسکالPascal ساختار یافته است اما طراحی اون با هدف بازدهی و کارایی صورت نگرفته و فاقد ویژگی بود که بشه با اون برنامه های گسترده رو نوشت و علاوه بر این به دلیل استاندارد بودن ساختار گرامری اش قادر به نوشتن برنامه های سیستمی نیست.
    در اوایل دهه ۷۰ میلادی انقلاب کامپیوتری فراگیر شده بود و نیاز به رسیدن به نرم افزار های بهتر؛برنامه سازان را به شدت برای تولید سریع اینگونه نرم افزار ها تحت فشار قرار میداد. در محافل آکادمیک هم همه نیروی برنامه سازان برای طراحی و پیاده سازی یک زبان بهتر به کار می رفت.
    برنامه سازان برای اولین بار دستیابی نا محدودی به کامپیوتر ها داشتند و این امر آزادی عمل برای انجام هر آزمایشی رو به اونا میداد.
    زبان برنامه نویسی C توسط دنیس ریچی طراحی و برای اولین بار در یک کامپیوتر PDP-11 تحت سیستم عامل یونیکس اجرا شد. این زبان نیز نتیجه فرآیندی بود که با زبان قدیمی تری به نامBCPLکه توسط مارتین ریچاردز طراحی شده بود؛ آغاز شده بود.
    C++ گام بعدی
    زبان برنامه نویسی C در اواخر دهه ۷۰ و اوایل دهه ۸۰ میلادی با زبان برنامه سازی غالب تبدیل شد و هنوز هم طرفداران مخصوص به خود را دارد. با این وجود سوالی که مطرح است این است که با در نظر گرفتن قابلیت های زیاد این زبان چرا نیاز به تولید یک زبان دیگر با وجود آمد؟ پاسخ این سوال پیچیدگی است.
    در سرتاسر تاریخ برنامه سازی پیچیدگی رو به رشد برنامه ها؛ موجب مطرح شدن ضرورت روشهای بهتر برای مدیریت این پیچیدگی شده است.
    روش برنامه سازی جدیدی به نام برنامه سازی شیئ گرا Object Oriented Program برای حل مشکل پیچیدگی ابداع شد.OOP نوعی متدلوژی برنامه سازی است که امکان سازماندهی برنامه های پیچیده را از طریق وراثت inheritance ؛ نهان سازی encapsulation و پلی مورفیزم فراهم می کند.
    اگر چه C یکی از بزرگترین زبان های برنامه سازی جهان است اما توانایی محدودی جهت مدیریت پیچیدگی دارد. وقتی حجم برنامه ای از ۲۵۰۰۰ تا ۰۰۰/۱۰۰ سطر بیشتر می شود آنقدر پیچیده شده است که تسلط بر تمام آن مشکل است. C++ امکان حل این مشکل رو فراهم کرد.
    BJarne StroustrupPowerPoint در سال ۱۹۷۹ وقتی در آزمایشگاه بل در نیوجرسی مشغول کار بودC++ را ابداع کرد و در ابتدا نام اونو C with classes گذاشت.
    زمینه برای جاوا فراهم می شود
    در اواخر دهه ۸۰ میلادی برنامه سازی شی ئ گرا با C++ فراگیر شد.
    چون C++ بازدهی بالا و عناصر دارای سبک زبان Cرا با سبک شی ئ گرا ترکیب کرده بود؛ زبانی بود که میشد از اون برای ایجاد محدوده گسترده ای از برنامه ها استفاده کرد.
    با این وجود مانند قبل نیرو هایی در حال ترکیب شدن هستند تا یا بار دیگه تکاملی در زبان های برنامه سازی ایجاد کنند.
    ظهور جاوا
    جاوا در سال ۱۹۸۱ توسط جیمز گاسلینگ ؛ پاتریک نوتون ؛ کریس وارث ؛ اد فرانگ و مایک شرایدن در شرکت سان میکرو سیستم ایجاد شد. نخستین نگارش اون پس از ۱۸ ماه کاری تولید شد .اسم این زبان در ابتداOaK بوداما در سال ۱۹۹۵ به جاوا تغییر کرد. در فاصله زمانی بین نخستین پیاده سازی OaK در پاییز سال ۱۹۹۲ و اعلام موجودیت جاوا در بهار سال ۱۹۹۵ افراد زیادی در طراحی و تکامل این زبان مشارکت داشتن.
    جالبه بدونید که محرک اولیه برای آماده سازی جاوا اینترنت نبود بلکه در عوض محرک اصلی ؛ نیاز به یک زبان مستقل از محیطPlatform independent یا معماری خنثی بود که بتوننن از اون برای ایجاد نرم افزار های قابل استفاده در تجهیزات الکترونیکی خانگی مثل ماکرو فر و دستگاه های کنترل از راه دور ؛استفاده کنن.
    می دونید که CPU هایی هستن که به عنوان کنترلر استفاده میشن؛ مشکل CوC++ و اکثر زبانهای دیگه اینه که طراحیشون طوری است که برای یک مقصد خاص کامپایل میشن. هر چند این امکان وجود داره کهبرنامه های C++ رو برای تقریبا هر CPUای کامپایل کرد اما این کار مستلزم داشتن یک کامپایلر خاص برای اون نوعCPU است.
    تولید کنندگان زبان جاوا برای پیدا کردن راه حلی برای این مشکل کار بر روی زبانهای قابل انتقال و مستقل از محیط رو شروع کردن تا بتونن کدی رو تولید کنن تا در CPUهای مختلف تحت محیط های مختلف قابل اجرا باشه و این منجر به تولید جاوا شد.
    همزمان با تولید جاوا عامل دوم و مهمتری نیز ایجاد شد که نقش زیادی در آینده جاوا داشت.این نیرو وب جهانی WW بود.هرچند وب جهانی همزمان با پیاده سازی جاوا شکل نگرفته بود اما این امکان وجود داشت که جاوا زبانی مهم و گمنام برای آماده سازی تجهیزات الکترونیکی باقی بمونه. با ظهور وب جهانی جاوا پیشرفت قابل ملاحظه ای کرد زیرا وب جهانی هم نیاز به برنامه های قابل انتقال داشت.
    گفتیم جاوا شباهت های زیادی به CوC++دارد. طراحان جاوا می دونستن که استفاده از ساختار گرامری C و استفاده از میژگیهای شی ئ گراییC++ به خوبی برنامه نویسان با تجربه این دو زبان رو به جاوا جذب میکنه.
    جاوا زبانی ست که بر ساسا نیازها و تجربیات کسانی که اونو طراحی و پیاده سازی کردن شکل گرفته پس این زبان؛ زبان برنامه سازان هست. جاوا پیوسته و یکپارچه است و کنترل نا محدودی رو در اختیار شما میذاره(به جز وحدودیت هایی که ممکنه اینترنت ایجاد کنه).اگه برنامه خوبی در جاوا بنویسید کامپایلر اونو منتقل میکنه اگه برنامه بدی بنویسید باز هم اونو منتقل میکنه به عبارت دیگه جاوا زبانی صرفا برای آموزش دیدن نیست این زبان برنامه نویسان حرفه ای است.
    به دلیل شباهتهای جاوا باCو C++ اغلب به اشتباه تصور میشه که این زبان صرفا نگارش اینترنتی دو زبان ذکر شده است اما جاوا تفاوتهای فلسفی با آنها دارد.
    ارتباط با C#
    موفقیت جاوا بسیار مهمتر از اونه که نادیده گرفته بشه. شاید مهمترین مثال از تاثیر جاوا ؛ C# باشه. C# ارتباط تنگاتنگی با جاوا داره و توسط شرکت میکرو سافت به منظور پشتیبامی از.NET Framework طراحی و پیاده سازی شده.
    ساختار گرامری مشابه ای بین جاوا و C# وجود داره ؛ هر دو اونا از برنامه سازی توزیع شده Distributed و از مدل شی ئ گرای یکسانی بهره مند هستن.
    خوب این هم یه تاریخچه ای از جاوا.
    تو این دنیای متنوع و رنگارنگ زبان های برنامه نویسی. بر اساس تجربه شخصی ام بهتون پیشنهاد میکنم همیشه برای خوندن هر زبانی به ریشه های اون توجه کنید. شاید بهتر باشه بگم برای یاد گرفتن هر چیزی؛ اول ریشه های اونو بررسی کنید. این طوری نه تنها گیج نمیشید بلکه به راحتی و در کمترین زمان حرفه ای میشید چون دیگه نیازی نیست در حین اموزش مکررا به عقب برگردید.
     
  2. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی جاوا – قسمت اول

    برنامه نویسی جاوا – قسمت دوم



    اینترنت کمک کرد تا جاوا به صدر جدول برنامه سازی پرتاب شود و جاوا هم به نوبه خود تاثیر زیادی بر اینترنت داشته است زیرا جاوا دنیای اشیایی که آزادانه قادر به حرکت در فضای کامپیوتری Cyberspace هستند را تغییر داده است. در هر شبکه دو دسته گسترده از اشیا در بین سرویس دهنده و کامپیوتر های شخصی منتقل می شوند: اطلاعات غیر فعالPassive و برنامه های پویا و فعال. مثلا وقتی E-mail های خود را چک می کنید یا در حال Download یک برنامه هستید صرفا در حال مشاهده یک سری داده های غیر فعال هستید اما نوع دیگری از اشیا به کامپیوترتان قابل انتقال هستند:یک برنامه پویای خود اجراSelf-executing . این چنین برنامه ها یک عامل یا agent فعال در کامپیوتر سرویس گیرنده به شمار می آیند که می بایست توسط سرویس دهنده آغاز شود.
    اگرچه برنامه های شبکه ای باید پویا باشند اما مشکلات زیادی در مورد امنیت و قابلیت انتقال فراهم می سازند. قبل از ایجاد جاوا فضای کامپیوتری به نبمی از موجودیتهایی که اینک وجود دارد دسترسی نداشت اما جاوا این مشکلات را حل کرد و با اپلت هاapplet دنیا را با نوع جدیدی از برنامه ها آشنا کرد.
    اپلت های جاوا
    هر اپلت نوع ویژه ای از برنامه های جاوا است که برای انتقال در اینترنت و اجزای خودکار توسط مرور گرهای سازگار با وب طراحی شده است.به علاوه ا لت ها در صورت نیاز و تقاضا download می شوند درست مانند یک تصویر با این تفاوت که هر اپلت نوعی برنامه هوشمندintelligent program است و نه صرفا یک فایل رسانه ای به عبارت دیگر هر اپلت برنامه ای است که می تواند نسبت به ورودی کاربر عکس العمل انجام دهد و به طور پویا تغییر کند.
    اگر جاوا نمی توانست دو مشکل اساسی مرتبط با این برنامه ها یعنی امنیت و قابلیت انتقال را حل کند اپلت ها فقط در حد یک آرزو باقی می ماندند.
    امنیت
    هر بار که برنامه معمولی را download می کنیم در واقع خطر آلوده شدن به انواع ویروسها را به جان می خریم. قبل از ایجاد جاوا کاربران برنامه های اجرایی را چندان download نمی کردند یا پیش از اجرا آنها را اسکن می کردند اما با این حال نیز هنوز خطر آلوده شدن به ویروس وجود داشت. جاوا با ارائه یا فایروال در بین برنامه تحت شبکه و کامپیوتر کاربر پاسخی برای دو مسئله امنیت و قابلیت انتقال ایجاد کرد.
    وقتی از مرورگر سازگار با جاوا استفاده می کنید می توانید به راحتی و بدون ترس و با امنیت کافی اپلت های جاوا را download کنید.جاوا این کار را با محدود کردن برنامه های خود به محیط اجرای جاوا و جلوگیری از دستیابی به سایر بخش های کامپیوتر انجام می دهد.
    قابلیت انتقال
    برای آنکه برنامه ها به طور پویا به انواع محیط های متصل به اینترنت download شوند روشی برای تولید کد اجرایی قابل انتقال لازم است.همان مکانیزمی که امنیت را تضمین می کند به دست یافتن به قابلیت انتقال نیز کمک می کند.(در Unitهای بعدی به این مسئله می پردازیم)
    کد های بایتی؛ فصل تمایز جاوا
    کلیدی که به جاوا امکان حل کردن مشکل امنیت و قابلیت انتقال را می دهد؛آن است که خروجی کامپایلر آن کد اجرایی نیست بلکه در عوض کد بایتی است.کد بایتی مجموعه ای مفید از دستورالعملهایی است که برای اجرا توسط سیستم”زمان-اجرای”جاوا طراحی شده است.این سیستم ماشین مجازی جاواJVM نام دارد. در حقیقت JVM نوعی مفسرinterpreter برای کد بایتی است.
    بیشتر زبانهای نوین به گونه ای طراحی شده ان که نتیجه کامپایل آنها کد اجرایی باشد و نه کد قابل تفسیر که دلیل این امر هم همان مسائل مربوط به کارایی است اما این حقیقت که برنامه های جاوا توسطJVM تفسیر می شوند به حل مسائل مربوط به download کردن برنامه ها در اینترنت کمک می کند.
    ترجمه برنامه های جاوا به کد بایتی باعث می شود که اجرای آنها در محیط های گوناگون آسانتر باشد.دلیل این امر این است که تنها JVM می بایست برای هر محیط پیاده سازی شود.پس از آماده شدن پکیج”زمان-اجرا” برای یک سیستم خاص هر برنامه جاوایی برای آن قابل اجرا خواهد بود.
    اگرچه جرئیات JVM در محیط های مختلف با هم متفاوت است اما تمام آنها قادر به تفسیر کد بایتی هستند.اگر برنامه های جاوا به کد اصلی جاوا کامپایل شوند در آن صورت نگارشهای مختلف یک برنامه می بایست برای هر یک از انواعCPUهای متصل به اینترنت اماده شوند؛ این امر راه حل قابل قبولی نیست برای همین اجرای کد بایتی توسطJVM آسانترین راه برای ایجاد برنامه های اجرایی حقیقی است.اینکه برنامه های جاوا توسطJVM اجرا می شوند به امنیت آنها نیز کمک می کند زیراJVM کنترل را در دست دارد ؛می تواند در برگیرنده برنامه نیز باشد و از ایجاد تاثیرات جانبی در خارج از سیستم جلوگیری کند.
    اگر چه جاوا از همان ابتدا به عنوان یک زبان مفسردار طراحی شده است اما از نظر فنی مانعی در رابطه با این زبان وجود ندارد که از کامپایل فوری کد بایتی به کد زبان ماشین و در نتیجه افزایش کارایی جلوگیری کند.به همبن دلیل شرکت سان مدت کمی بعد از ارائه جاوا فناوری HotSpot را نیز عرضه کرداین فناوری کامپایلرJIT(just-in-time) را برای کد بایتی ارائه می دهد. وقتی کامپایلر JIT بخشی ازJVM باشد بخشهای منتخب کد بایتی بلافاصله و قسمت به قسمت بر اساس تقاضا به کد زبان ماشین ترجمه می شوند.
    اصطلاحات مهم جاوا
    هیچ بحثی در مورد جاوا بدون بررسی اصطلاحات آن کامل نمی شود پس با هم به بررسی این اصطلاحات می پردازیم:
    ۱- سادگی
    جاوا به گونه ای طراحی شده است که فراگیری آن برای برنامه سازان حرفه ای آسان باشد با کمی تجربه در برنامه سازی تسلط یافتن بر جاوا اصلا مشکل نیست.اگر برنامه سازی شی گرا را فراگرفته باشید مثلا با زبانی مثلC++ آشنا باشید تلاش کمی برای روی آوردن به جاوا باید انجام دهید.
    ۲- شی گرایی
    اگرچه جاوا تحت تاثیر پیشینیان خود است ام به گونه ای طراحی نشده است که از جهت متن برنامه ها به زبانهای دیگر سازگاری داشته باشد.نتیجه این موضوع آزادی عمل برای گروه طراحان جاوا بوده است تا طراحی خود را از صفر شروع کنند. نتیجه این امر رویه ای شفاف ؛قابل استفاده و واقع بینانه نسبت به اشیا بود.مدل شی ها در جاوا ساده و گسترش آن نیز آسان است و در عین حال انواع داده های اصلی و اولیه در آن حفظ شده اند.
    ۳- استحکام
    ایجاد برنامه های با استحکام اولویت بالایی در طراحی جا داشته است. جا برای به دست آوردن مقام قابلیت اطمینان؛ برنامه سازان را در چند زمینه کلیدی محدود کرده تا اشتباهات مراحل اولیه تولید نرم افزارها را سریعا پیدا کند. چون جاوا زبانی است که درستی نوع مقدار داده ها به شدت در آن کنترل می شود؛ کد برنامه ها در زمان کامپایل بررسی می گردد.اما این کار در زمان اجرا نیز انجام می شود. در حقیقت ایجاد بسیاری اشکالاتیbugs که ردگیری آنها دشوار بوده و اغلب خود را در شرایط زمان اجرا نمایان می سازند؛ غیر ممکن است.
    برای آنکه چگونگی استحکام جاوا ره بهتر درک کنید دو مورد از دلایل اصلی عدم موفقیت برنامه ها را در نظر بگیرید: ۱- اشتباهات مدیریت حافظه و ۲- استثناهایی که به درستی مدیریت نشده اند(خطا های زمان اجرا) . مدیریت حافظه در محیط های برنامه سازی قدیمی می تواند به امری دشوار و کسل کننده تبدیل شود. برنامه سازان در C وC++ باید حافظه پویا را به صورت دستی تخصیص دهند و آزاد کنند و این امر به خاطر دلایلی مثل فراموشی یا اشتباه در آزاد سازی حافظه مشکل آفرین است. جاوا عملا این مشکل را با مدیریت تخصیص و آزاد سازی حافظه حذف کرده است.در حقیقیت این عمل در جاوا به صورت خودکار انجام می شود(جاوا ویژگی مدیریت حافظه های بلااستفاده را برای شی های بدون استفاده فراهم ساخته است). استثناهاexception در محیط های قدیمی در شرایطی مانند تقسیم بر صفر یا عدم وجود فایل ایجاد می شوندو باید با ساختارهای گرامری که درک مشکلی دارند مدیریت شوند اما جاوا با فراهم ساختن امکان مدیریت استثناها به برنامه سازان کمک کرده است.
    ۴-Multithreaded
    جاوا برای ایجاد برنامه های محاوره ای و تحت شبکه طراحی شده است و برای رسیدن به این هدف از برنامه سازیMultithreaded پشتیبانی می شود که قادر به نوشتن برنامه هایی است که برای انجام چند عمل در یک زمان است؛ می باشد. سیستم زمان-اجرای جاوا با راه حل ساده و در عین حال پیچیده ای برای همگام سازیSynchronization فرآیند های همزمان ایجاد شده است تا امکان ساخت سیستم های محاوره ای فراهم شود.
    ۵- معماری مستقل
    از جمله مسائل اصلی که برنامه سازان با ان مواجه هستند این است که هیچ تضمینی وجود ندارد که برنامه ای که امروز نوشته اند فردا هم اجرا شود حتی در همان کامپیوتر.ارتقاء سیستم عامل؛ ارتقاء پردازنده و تغییرات منابع سیستمی از جمله دلایل بروز این مشکل هستند ما جاوا با طراحی ویژه اش در پی رسیدن به این هدف بود: یک بار بنویسید ؛ هر وقت و برای همیشه در همه جا اجرا کنید.!
    ۶- مفسر دار و بسیار کارآمد
    جاوا ایجاد برنامه برای محیط های مختلف را فراهم ساخته و برای انجام این کار برنامه ها به نوعی کد میانجی به نام کد بایتی کامپایل می شوند.این کد در هر سیستمی که ماشین مجازی جاواJVM در آن پیاده سازی شده باشد؛ قابل اجرا است. کد بایتی طوری طراحی شده است تا ترجمه مستقیم آن به کد زبان ماشین جهت رسیدن به کارایی بسیار بالا با استفاده از کامپایلر JIT آسان باشد.
    ۷- توزیع شده
    جاوا برای محیط های توزیع شده اینترنت طراحی شده است چرا که پروتکل های TCP/IP را به خوبی مدیریت می کند. جاوا همچنین از RMI(Remote Method Invocation) پشتیبانی می کند که این ویژگی امکان فراخوان متد ها در شبکه را برای برنامه ها فراهم می سازد.
    ۸- پویا
    برنامه های جاوا حجم قابل ملاحظه ای از اطلاعات انواع داده های زمان اجرا را با خود دارند که برای بررسی صحت شی ها در زمان اجرا و دستیابی به آنها مورد استفاده قرار می گیرند. این امر Link کردن پویای برنامه ها را با روش مقتضی و امن ممکن می سازد که انجام این کار برای استحکام اپلت ها حیاتی است
     
  3. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی جاوا – قسمت اول

    [h=2]برنامه نویسی جاوا – قسمت سوم[/h]
    همچون تمام زبانهای کامپیوتری دیگر؛ عناصر جاوا نیز ایزوله نیستند بلکه این عناصر با هم در تعامل هستند تا زبان جاوا را به عنوان یک واحد کلی تشکیل دهند.ا ما این ارتباط داخلی سبب شده تا توصیف هر یک از جنبه های جاوا بدون مطرح ساختن موارد دیگر دشوار شود. اغلب بحث کردن درباره یکی از ویِژگیهای کلیدی جاوا مستلرم داشتن دانش کافی از ویژگیهای دیگر است.
    برنامه سازی شیء گرا
    برنامه سازی شی ءگرا Object Oriented programming هسته مرکزی جاوا را تشکیل می دهد. OOP به گونه ای با جاوا مرتبط شده است که پیش ازآغاز نوشتن حتی ساده ترین برنامه های جاوا بهتر است اصول پایه آنرا درک کنیم.
    جنبه های نظری OOP
    دو مدل اصلی:
    تمام برنامه های کامپیوتری از دو عنصر تشکیل شده اند: دستورالعمل ها و داده ها
    علاوه بر این برنامه را می توان به طور مفهومی بر اساس مجموعه دستورالعمل ها یا داده هایش سازماندهی کرد یعنی برخی برنامه ها بر اساس این که “چه اتفاقاتی رخ می دهد”نوشته می شوند و برخی دیگر بر این اساس که”چه مواردی تحت تاثیر اتفاقات قرار می گیرند” نوشته
    می شوند.دو مدل اصلی برای چگونگی ساخت برنامه ها وجود دارد:
    ۱- مدل فرآیند گراProcess Oriented :در این رویه هر برنامه به صورت یک سری گامهای خطی(دستورالعملها) در نظر گرفته می شود. این مدل را می توان مانند دستورالعمل هایی که بر روی داده ها تاثیر می گذارند در نظر گرفت. زبانهای پروسیجرالی مانندC از این مدل استفاده می کنند.
    ۲- مدل شی ء گرا(OOP) : برنامه ها بر اساس داده ها(شی ء ها) و مجموعه ای از رابطهای مناسب برای آن داده ها سازماندهی می شوند.ویژگی برنامه شی ء گرا این است که داده ها دستیابی به کد را کنترل می کنند.
    انتزاع
    یکی از عناصر مهم برنامه سازی شی ء گرا انتزاعAbstraction است. انسانها پیچیدگی را از طریق انتزاع مدیریت می کنند مثلا هیچ کس یک اتومبیل را مجموعه ای از دهها هزار قطعه نمی بیند بلکه آنرا به صورت یک شیء سازمان یافته تجسم می کند. نوعی روش قدرتمند برای مدیریت انتزاع از طریق طبقه بندی سلسله مراتبیHierarchical است که به ما امکان میدهد مفاهیم سیستم های پیچیده را لایه بندی و آنها را به قطعات قابل مدیریت تری تجزیه کنیم.یک سری از مراحل هر فرآیند را می توان به مجموعه ای از پیامهایی که بین شی ء ها مبادله می شود تبدیل نمود از این رو هر یک از این شی ء ها رفتار منحصر به فرد خودش را توصیف می کند.
    سه اصلOOP
    تمام زبانهای برنامه سازی شی ء گرا مکانیزم هایی فراهم می کنند که ما را در پیاده سازی مدل شی ء گرا یاری کنند. این سه اصل عبارتند از:
    ۱- نهان سازی
    ۲- وراثت
    ۳- پلی مورفیزم
    نهان سازیEncapsulation
    مکانیزمی است که کد ها و داده هایی که توسط آن پردازش و مدیریت می شوند را با یکدیگر مرتبط می سازد و آنها را در مقابل استفاده نادرست و دخالتهای خارجی محافظت می کند. در واقع می توان آن را مانند پوششی محافظ در نظر گرفت که از دستیابی آزادانه به کد و داده ها توسط کد های خارج از پوششWrapper جلوگیری می کند.
    پایه و اساس نهان سازی در جاوا کلاس Class است. هر کلاس ساختار و رفتاری(داده ها و کد) را تعریف می کند که در بین مجموعه ای از شی ء ها به اشتراک گذارده خواهد شد. هر شی ء از یک کلاس معین ؛ متضمن ساختار و رفتاری خواهد بود که توسط کلاس تعریف شده است. به همین دلیل گاهی به شی ء ها نمونه های کلاس گفته می شود از این رو هر کلاس یک ساختار منطقیLogical Construct به شمار می آید.
    کد ها و داده ها با هم اعضاء کلا س نامیده می شوند . به داده هایی که توسط کلاس تعریف می شوند متغیر های عضو یا نمونه متغیر گفته می شود.به کدی که بر روی آن داده ها تاثیر می گذارد متد های عضو یا متد Method می گویند.(در C++ این متد ها را تابع می نامند). متد ها چگونگی استفاده از متغیر های عضو را تعریف می کنند.
    چون هدف هر کلاس نهان سازی پیچیدگی ها ست مکانیزم هایی برای پنهان کردن پیچیدگیهای پیاده سازی در داخل کلاس وجود دارد. هر متد یا متغیر در یک کلاس ممکن است خصوصیPrivate یا عمومیPublic باشد. رابط عمومی هر کلاس نمایانگر تمام چیزهایی است که کاربران خارجی کلاس باید درباره آن بدانند. متد های خصوصی و داده ها تنها توسط کدی که عضو کلاس است قابل استفاده می باشند پس هر کدی که عضو آن کلاس نباشد نمی تواند به متد یا متغیر خصوصی کلاس دستیابی داشته باشد.
    وراثتInheritance
    فرآیندی است که در طی آن هر شی ء خصوصیات شی ء دیگر را کسب می کند. این امر از این جهت مهم است که مفهوم طبقه بندی سلسله مراتبی را پشتیبانی می کند.
    وراثت به خوبی با نهان سازی در تعامل است اگر برخی از خصوصیات کلاس معینی پنهان شود در آن صورت تمام زیر کلاس ها همان خصوصیات را علاوه بر خصوصیات تخصصی تر خواهند داشت.
    پلی مورفیزم
    از زبان یونانی گرفته شده است و به معنایMany forms می باشد و ویژگی است که به رابط ها امکان می دهد تا برای گروهی از عملیات مورد استفاده قرار گیرد.
    به طور کلی مفهوم پلی مورفیزم اغلب به وسیله “یک رابطه و چند متد” بیان می شود. یعنی این امکان وجود دارد که یک رابطه عمومی برای گروهی از فعالیت های مرتبط به هم طراحی شود.
    اطلاعات جامعی در مورد این سه خصیصه برنامه سازی شی ء گرا وجود دارد که من به اختصار در مورد آنها توضیح دادم.برای اطلاعات بیشتر در مورد این ویژگی ها می توانید فصل ۶ کتاب برنامه نویسی به زبانC++ نوشته مهندس جعفر نژاد قمی را مطالعه کنید. در حین برنامه درسنامه اگر نیازی به توضیحات بیشتر بود برایم e-mail بفرستید.
    خوب حالا دیگه می خوایم وارد نوشتن برنامه های ساده به زبان جاوا بشیم .اطلاعاتی که در دو درسنامه گذشته و ابتدای این درسنامه فرا گرفتیم شاید به نظر فقط نوشته های طولانی باشن اما بدون فراگیری پایه ای نمی تونیم به درون یک موضوع اشراف داشته باشیم. برنامه های ساده جاوا هم مثل هر زبان دیگه ای از طریق اصول شرطی؛ حلقه ها و معرفی داده ها ومتغیر ها شروع میشه که ما تو این درسنامه شرط ها و حلقه ها رو بررسی می کنیم.
    پس با تمرکز شروع کنید و من فرض رو بر این می ذارم که شما حداقل کمی C++ رو می شناسید و بلد هستید کامپایلر جاوا رو رویPC هاتون نصب کنید.
    این اولین و ساده ترین نوع برنامه در جاوا است که به بررسی ویژگی هاش می پردازیم:
    /*
    This is a simple Java Program.
    Call this file”Example.java”.
    */
    Class Example{
    //Your program begins with a call to main().
    Public static void main(String[]){
    System.out.Println(“This is a simple Java program.”);
    }
    }
    وارد کردن برنامه
    در بیشتر زبانهای کامپیوتری نام فایل حاوی متن برنامه اهمیتی ندارد اما در مورد جاوا این گونه نیست. اولین چیزی که در مورد جاوا باید یاد بگیریم اینه که نام فایل متن برنامه اهمیت زیادی داره. مثلا در این برنامه نام فایل ماExample.java است. حالا می خوایم ببینیم چرا؟
    در جاوا ؛ فایل متن برنامه رسما یونیت کامپایل نامیده میشه. یونیت کامپایل فایل متنی است که حاوی تعریف یک یا چند کلاس است. از نظر کامپایلر جاوا انشعاب فایل باید.java باشد(انشعاب ۴ کاراکتری است پس سیستم عامل مورد نیاز ما باید بتونه نامهای طولانی رو پشتیبانی کنه از Windows95 به بعد سیستم عامل ها می تونن کامپایلر جاوا رو استفاده کنن.)
    همانطور که دیدید نام کلاسی که توسط برنامه تعریف می شود هم Example است .این نشون میده که کل برنامه در جاوا باید درون یک کلاس باشه. نام کلاس باید با نام فایل حاوی برنامه مطابقت داشته باشه. دلیل این امر Case Sensitive بودن یا تفاوت حروف کوچک و بزرگ در جاوا است.هم نام بودن فایل برنامه و کلاس به حفظ ؛نگهداری و سازماندهی برنامه هاتون کمک میکنه.
    کامپایل کردن برنامه
    برای اینکه برنامهExample رو کامپایل کنیم باید کامپایلر جاواjavac رو اجرا کنیم .نام فایل متن برنامه رو در خط فرمان مشخص می کنیم:
    C:\>javac Example.java
    کامپایلر جاوا فایلی به نام Example.java ایجاد میکند که حاوی کد بایتیbytecode برنامه است.(کد بایتی جاوا شکل میانجی برنامه است که از دستور العمل هایی که تشکیل می شود که JVM اجرا خواهد کرد). از این رو خروجیjavac کدی نیست که مستقیما قابل اجرا باشد.برای قابل اجرا شدن آن بایستی آغازگر برنامه های کاربردی جاوا را اجرا کنید.برای این کار نام کلاسExample را در خط فرمان مشخص می کنیم:
    C:\>java Example
    وقتی برنامه اجرا شود این خروجی نمایش داده خواهد شد:
    This is a simple Java program.
    (توضیح بسیار ساده: شما می تونید کامپایلر جاوا برای windows رو روpc هاتون نصب کنید و مستقیما برنامه هارو در Notepadبنویسید و از طریق روشی که الان گفتیم در محیطcmd در start\Run اونا رو اجرا کنید یا می تونید یک برنامه کاربردی Developing مثل NetBeans یا JBuilder رو رو سیستم هاتون نصب کنید و تمام مراحل برنامه نویسی رو به همون زیبایی که تو محیطvisual studio برنامه می نویسیم ؛ دنبال کنید. حق انتخاب با شماست و اگه سوالی هم داشتید حتما بپرسید).
    وقتی متن برنامه کامپایل می شود هر کلاس در فایل خروجی خودش قرار می گیرد که همنام با خود کلاس و انشعاب آن نیز.class خواهد بود. وقتی جاوا را به صورت گفته شده اجرا کنید در واقع نام کلاسی که باید اجرا شود مشخص می شود بدین ترتیب جستجو برای یافتن فایل با آن نام و انشعاب.class به طور خودکار آغاز می شود.چنانچه فایل پیدا شود کد موجود در کلاس مورد نظر اجرا می گردد.
    شاید برنامه ای که نوشتیم به نظر بسیار ساده باشد اما از روی آن می توان به راحتی ویژگی های مشترک تمامی برنامه های جاوا را یافت.اکنون به بررسی آن ویژگی ها می پردازیم:
    /*
    This is a simple Java program
    Call this file “Example.java”.
    */
    خطوط بالا توضیحات هستند.در جاوا هم مثل هر زبان برنامه سازی دیگری می توانید قبل از شروع برنامه توضیحاتی در خصوص آن برنامه بنویسید. این توضیحات از نظر کامپایلر نادیده گرفته می شود اما برای برنامه نویس می تواند حاوی اطلاعات مفیدی باشد.
    جاوا از سه سبک توضیحات پشتیبانی می کند. توضیح بالای برنامه یک توضیح چند خطی است که با “*/” شروع و به “/*” ختم می شود. کامپایلر هر چیزی که بین دو نماد یاد شده باشد را نادیده می گیرد.
    Class Example{
    در این سطر از کلمه کلیدیClass برای تعریف کلاس جدید استفاده شده است. Example شناسه ایidentifier است که نام کلاس است. کل تعریف کلاس از جمله تمام اعضای آن بین { } قرار می گیرند(Brace نام لاتین دو نماد است.اصرار دارم نام انگلیسی نماد ها رو یاد بگیرید. برنامه نویس نباید از واژه آکولاد باز-بسته استفاده کنه). توجه داشته باشید که تمام فعایت برنامه داخل کلاس انجام می شود . به ابن دلیل همه برنامه های جاوا حتی به اندازه کم هم شی ء گرا هستند.
    Public static Void main(string args[]) {
    این فصل با متد main() آغاز می شود. اجرای برنامه از این سطر شروع می شود. تمام برنامه های کاربردی جاوا اجرا را با فراخوانی main() آغاز می کنند.
    کلمه کلیدی Public نوعی مشخصه دستیابی access specifier است که به برنامه سازان امکان می دهد تا محدوده دستیابی اعضای کلاس را کنترل کنند. وقتی Public پیش از عضوی از کلاس قرار می گیرد در آن صورت آن عضو از خارج از کلاسی که در آن تعریف شده است هم قابل دسترسی است(نقطه مقابل Public ؛private است که از دسترسی جلوگیری می کند)
    کلمه کلیدی Static این امکان را فراهم می کند تا بدون آنکه نیازی به ایجاد نمونه instance خاصی از کلاس باشد main() فراخوانده شود. این کار ضروری است زیرا main() قبل از ایجاد هر شی ء باید توسطJVM فراخوانده شود.
    کلمه کلیدی Void صرفا برای کامپایلر مشخص می کند که main() مقداری را باز نمی گرداند .( گاهی ممکن است متد ها مقداری را باز گردانند).
    تذکر بسیار مهم: حروف کوچک و بزرگ در جاوا یکسان تلقی نمی شوند از این رو main باMain تفاوتهای زیادی دارد. جالب است بدانید جاوا کلاسهای فاقد متدmain() را کامپایل می کند اما هیچ روشی برای اجرای این کلاس ها ندارد پس اگر به جای main ازMain استفاده کنید کامپایلر برنامه تان را کامپایل می کند اما java پیام خطایی می دهد زیرا قادر به یافتن متدmain() نیست.
    اطلاعاتی که می بایست به متد ارسال شوند از طریق متغیر هایی که در بین پرانتزهای پس از نام آن مشخص می شوند؛ دریافت می گردند. این متغیر ها پارامتر نامیده می شوند. اگر متدی فاقد پارانتر باشد باز هم باید پرانتز های خالی را به کار برد. در متد main() تنها یک پارامتر وجود دارد ولی پارامتر پیچیده ای است.
    String args[] پارامتری به نام args را تعریف می کند که آرایه ای از نمونه های کلاسstring است(هر آرایه مجموعه ای از شی ء های مشابه است). شی ء های نوع string برای ذخیره سازی رشته های کاراکتری هستند. در برنامه شماره ۱ ؛args هر پارامتری را که هنگام درخواست اجرای برنامه موجود باشد دریافت می کند. (این برنامه از این اطلاعات استفاده نمی کند اما سایر برنامه هایی که در آینده می نویسیم ار آن استفاده خواهند کرد).
    آخرین کاراکتر خط “}” است که آغاز متن main() را مشخص می کند. کد تشکیل دهنده هر متد در بین دو Brace {} قرار می گیرد.
    تذکر: main() صرفا محل آغاز برنامه تان است. هر برنامه پیچیده ده ها کلاس خواهد داشت اما تنها یکی از آنها برای اجرای برنامه نیاز به main() خواهد داشت. در ایجاد اپلت ها برنامه هایی جاوایی که در مرور گر های وب گنجانده می شوند اصلا نباید از main() استفاده کنند زیرا مرورگر وب از روش دیگری برای شروع اجرای اپلت ها استفاده می کند.
    System.out.println(“This is a simple Java program.”);
    این سطر موجب نمایش رشته “This is a simple Java program” در خروجی می شود. نمایش خروجی به وسیله متد println() است.println() می تواند هر نوعی از خروجی را چاپ کند.
    System.out:
    Systemکلاس از پیش تعریف شده ای است که دستیابی به سیستم را فراهم می کند وout نیز نوعیstream خروجی است که به کنسول متصل است.(حتما می دونید کنسول چیه؟!؟).
    عبارتprintln() به “;” semi colon ختم می شود. تمام عبارات در جاوا به “;” ختم می شوند. اگر سایر سطر ها به “;” ختم نشده اند به این علت است که بقیه سطر ها از نظر فنی عبارت نیستند.
    دومین برنامه کوتاه:
    /*
    Here is another short example.
    Call this file “Example2.java”.
    */
    class Example2{
    public static void main(string args[]) {
    int num;// this declares a variable called num
    num=100;// this assigns num value 100
    System.out.println(“This is num: “ +num);
    num=num*2;
    System.out.print(“ The value of num *2 is”);
    System.out.println(num);
    }
    }
    خروجی:
    This is num :100​
    The value of num* 2 is 200​
    خوب حالا یه کم برنامه رو بررسی می کنیم:​
    نخستین سطر جدید برنامه این بود:
    int num;// this declares a variable called num
    در این سطر متغیری صحیح به نامnum تعریف می شود. اگر خواستید تعداد بیشتری متغیر تعریف کنید کافیه اونا رو با”,” comma از هم جدا کنید.
    num=100;// this assigns num value 100
    مقدار۱۰۰ رو به متغیرnum نسبت می دیم. عملگر تخصیص در جاوا”=” equal است.
    سطر بعدی مقدار اولیه num را بعد از رشته “This is num:” نمایش می دهد.
    System.out.println(“This is num: “ +num);
    علامت”+” در این عبارت مقدارnum را با رشته ای که قبل از آن قرار گرفته ادغام می کند و سپس رشته حاصل را در خروجی نمایش می دهد.(num از نوعint به معادل رشته ای خودش تبدیل می شود و سپس با رشته قبل از خود ادغام می شود)
    System.out.print(“ The value of num *2 is”);
    این عبارت دو برابر مقدارnum را به خودش تخصیص می دهد. در این سطر می بینید که ما به جایprintln ازprint استفاده کردیم.این کار باعث میشه که برنامه به سطر بعدی منتقل نشه و ادامه متن در همون سطر اتفاق بیفته.
    عبارات کنترلی:
    در آینده به تفصیل در مورد عبارات کنترلی صحبت خواهیم کرد اما در اینجا دو عبارت کنترلی مهم رو که به ما کمک می کنن برنامه های ساده اما مهم بنویسیم معرفی می کنیم.این دو عبارت در بلوک های جاوا نقش اساسی دارند.
    عبارت if
    گسترده ترین عبارت کنترلی در زبانهای برنامه سازی عبارتif است که در جاوا به این شکل استفاده می شود:
    If(condition) statement;
    If(شرط) عبارت ;
    (عملگر های رابطه ای زیادی در جاوا داریم که فعلا با ۳ تا از اونا آشنا می شیم: “<” عملگرLess than برای “کوچکتر از” ؛ “>” عملگر grater than برای “بزرگتر از” و “==” عملگر equal equal برای “مساوی با” ).
    در قطعه برنامه زیر با عبارت کنترلی if و کاربردش آشنا می شیم:
    /*
    Demonstrate the if.
    Call this file “Ifsample.java”.
    */
    class Ifsample {
    public static void main(string args[] ) {
    int x,y;
    x=10;
    y=20;
    if (x<y)System.out.println(“x is less than y”);
    x=x*2;
    if(x==y)System.out.println(“x is equal to y now”);
    x=x*2;
    if(x>y)System.out.println(“x is grater than y”);
    //this won’t display anything
    س
    }
    }
    حلقه for
    حلقه ها بخش مهمی از هر زبان برنامه سازی هستند. جاوا حلقه های قدرتمندی دارد که شاید کاربردی ترین آنها همین حلقه for باشد. اگر باC ,C++ ,C# آشنا باشید خوشحال میشید یشنوید که حلقه for در جاوا مثل کاربرد این حلقه در زبانهای یاد شده است.
    ساده ترین شکل حلقه for بدین صورت است:
    For(initialization ; condition; iteration) statement;
    Initialization= مقدار دهی اولیه ؛ condition=شرط و iteration= تکرار
    Condition) یک عبارت Boolean است که متغیر کنترل حلقه رو بررسی میکنه اگر نتیجهtrue باشه حلقه for تکرار میشه و اگه false باشه حلقه به اتمام میرسه)
    /*
    Demonstrate the for loop.
    call this file “ForTest.java”.
    */
    class ForTest{
    public static void main(string args[]) {
    int x;
    for(x=0;x<10; x=x+1)
    System.out.println(“ This is x:” +x);
    }
    }
    Xدر این مثال متغیر کنترل حلقه است. جالب است بدانید در برنامه های حرفه ای جاوا هرگز در قسمتiteration عبارتی به شکل x=x+1; نمی بینید زیرا جاوا عملگر ویژه ای به شکل X++; دارد که این عملگر یک واحد به عملوند خودش می افزاید.
    استفاده از بلوک ها:
    جاوا این امکان را می دهد که ۲ یا بیش از ۲ عبارت را به صورت بلوکی از کد گروه بندی کنید. این کار با نوشتن عبارت میانBrace انجام می شود. پس از ایجاد هر بلوک آن بلوک به یک واحد منطقی مبدل می شود که می توان آن را در هر جایی که یک عبارت واحد قابل استفاده باشد به کار برد.برای مثال قطعه زیر استفاده از بلوک در عبارتif است:
    If(x<y){//begin a block
    x=y;
    y=0;
    }//end of block
    نکته کلیدی این است که هرگاه نیاز به مرتبط کردن منطقی دو یا بیش از دو عبارت منطقی باشد این کار را می توانید با ایجاد یک بلوک انجام دهید.
    واژه های مورد استفاده در جاوا
    برنامه های جاوا مجموعه ای از فاصله هاwhitspace ؛ شناسه ها identifier ؛ لیترال ها literal ؛ توضیحات comment ؛ عملگر ها operator ؛ جداسازها separator و کلمات کلیدی keyword می باشد. به غیر از عملگرها که در آینده مفصل در موردشون بحث می کنیم بقیه واژه ها رو با هم بررسی می کنیم:
    فاصله whitspace
    جاوا یکی از زبانهای فاقد فرم یا free-form است یعنی که نیاز به هیچ کدام از قوانین ویژه ایجاد تو رفتگیindentation را ندارد.(شما می تونید یک برنامه کامل رو در یک سطر تایپ کنید مشروط به اینکه یک فاصله بین هر یک از نشانه هاییtoken که توسط عملگر یا جداساز دیگری از یکذیگر جدا نشده اند ؛ قرار دهید).
    سطر جدید یا کاراکتر جدول بندیtab در جاوا فاصله به شمار می آیند.
    شناسه ها identifier
    از شناسه ها برای نام کلاس ها ؛ نام متد ها و نام متغیر ها استفاده می شود. هر شناسه می تواند رشته گویایی از حروف بزرگ و کوچک و کاراکتر ها باشد فقط نباید شناسه را با اعداد شروع کنیم زیرا ممکن است با لیترالهای عددی اشتباه شوند.
    یادتون باشه که جاوا case sensitive است و حروف بزرگ و کوچک در آن با هم فرق دارند.
    لیترال ها literal
    هر مقدار ثابت در جاوا با استفاده از نمایش”حروفی – عددی” آن ایجاد می شود. برای مثال
    “This is a test” ‘x’ ۹۸٫۶ ۱۰۰ در جدول بالا از چپ به راست نخستین لیترال مشخص کننده یک عدد صحیح است ؛لیترال بعدی نشانگر یک مقدار اعشاری با ممیز شناور است لیترال سوم یک ثابت کاراکتری است و مورد آخر یک رشته است. لیترال ها را می توان در هر جایی که ان نوع مقادیر قابل استفاده هستند به کار برد.
    توضیحات comment
    گفتیم سه نوع توضیح در جاوا وجود دارد. با نوع تک سزری و چند سطری آن آشنا شدید. نوع سوم آن مستندات documentation نام دارد که از ان برای تولید فایلHTML ای که برنامه تان را مستند می کند استفاده می شود. این نوع توضیحات با “/**” آغاز و به “*/” ختم می شوند. (اگه اطلاعات بیشتری خواستید برام e-mail بفرستید).
    جداساز ها separator
    متداولترین کاراکتر جداساز در جاوا”;” است که برای تعین انتهای عبارت از ان استفاده می شود.
    نماد نام مورد استفاده () پرانتز تعیین فهرست پارامتر ها در تعریف متد ها- تعیین تقدم عملگرها در عبارات ؛عبارات کنترلی و انواع تبدیلات {} آکولادBrace مشخص کردن مقادیر آرایه هایی که به طور خودکار مقداردهی می شوند- تعریف بلوکی از کد؛کلاس ؛ متذ ها و محدوده های محلی [] کروشه Bracket تعریف آرایه ها- تعییین مقدار آرایه ها ; Semi colon انتهای عبارت را مشخص می کند , comma جدا کردن شناسه ها هنگام تعریف چند متغیر- مرتبط کردن عبارتها در عبارتfor . dot جداسازی نام پکیج ها از زیر پکیج ها و کلاسها – جداسازی یک متغیر یا متد ار متغیر های نوع reference کلمات کلیدی keyword
    در حال حاضر ۵۰ کلمه کلیدی در زبان جاوا وجود دارد​
     
  4. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی جاوا – قسمت اول

    [h=2]برنامه نویسی جاوا – قسمت چهارم[/h]
    در این قسمت به بحث در مورد داده ها در زبان برنامه سازی جاوا می پردازیم. این نام آشنا که در تمام زبان های برنامه سازی مدرن وجود دارد یکی از عناصر پایه جاوا هست. جاوا از انواع داده ها پشتیبانی می کند که از این داده ها می توانید برای تعیین انواع متغیر ها و ایجاد آرایه ها استفاده کنید.​
    جاوا زبانی است که نوع داده ها به شدت در آن کنترل می شود و در واقع بخشی از امنیت و استحکام جاوا از این امر ناشی می شود. این کار یعنی اینکه: نخست هر متغیر نوعی دارد؛ هر عبارت نوعی دارد و هر یک از انواع داده ها به دقت تعریف شده اند و دوم اینکه هنگام تخصیص تمام مقادیر چه به طور صریح و چه از طریق ارسال پارامتر در حین فراخوانی متد ها سازگاری نوع داده ها بررسی می شود. بر خلاف برخی از زبانها ؛ تبدیل خودکار انواع داده های سازگار در جاوا انجام نمی گیرد. کامپایلر جاوا تمام عبارتها و پارامتر ها را جهت حصول اطمینان از سازگاری انواع داده ها بررسی می کند. عدم نطبیق نوع داده ها ؛ خطاهایی هستند که می بایست پیش از پایان کامپایل شدن هر کلاس تصحیح شوند.​
    انواع داده های پایه
    هشت نوع داده پایهPrimary در جاوا تعریف شده است: byte,short,int,long,char,float,double,Boolean که به آنها داده های ساده نیز گفته می شود.ما در این درسنامه این نوع داده ها را در چهار گروه تقسیم می کنیم:
    ۱- اعداد صحیح: شامل byte,short,int,long که اعداد کامل علامت دار را شامل می شود
    ۲- اعداد اعشاری با ممیز شناور: شاملfloat و double که نمایانگر اعداد اعشاری هستند
    ۳- کاراکترها: شاملchar که نمایانگر انواع داده ها در مجموعه کاراکتر ها است از قبیل حروف و ارقام
    ۴- بولی: شاملboolean که نوع ویژه ای برای نمایشtrue وfalse است
    شما می توانید برای این نوع داده ها دسته بندی مخصوص به خودتان را داشته باشید اما متوجه می شوید که دسته بندی داده ها در جاوا کم اهمیت ترین کار است هر چند خود داده ها و زیر مجموعه های آنها بسیار مهم هستند.
    انواع داده های پایه؛ نمایانگر مقادیر واحد هستند و نه شی های مرکب. گرچه جاوا کاملا شی ء گرا است اما انواع داده های پایه اینگونه نیستند و مشابه انواع داده های پایه ای هستند که در اکثر زبانهای غیر شی ء گرا یافت می شود. دلیل این امر کارایی و بازدهی است. تبدیل انواع داده های پایه به شی ء ها فقط باعث از دست رفتن کارایی می شود. انواع داده های پایه به گونه ای تعریف می شوند تا محدوده و رفتار ریاضی معین داشته باشند. زبانهایی مانندC و C++ امکان تغییر اندازه اعداد صحیح را بر اساس شرایط محیط اجرا دارند اما جاوا اینطور نیست. به دلیل نیاز به داشتن قابلیت انتقال؛ محدوده انواع داده ها ثابت است. شاید این روش کارایی برنامه را تا حدودی کم کند اما برای داشتن قابلیت انتقال ضروری است.
    ۱- اعداد صحیح
    در زبان جاوا ۴ نوع عدد صحیحinteger تعریف شده است: byte,short,int, long . تمام این انواع علامت دار هستند یعنی شامل بازه های اعداد مثبت و منفی می باشند.
    طول اعداد صحیح ؛ مقدار فضای مصرفی آنها در حافظه نیست بلکه رفتار متغیر ها و عبارتهای آن نوع را مشخص می کند. محیط زمان اجرای جاوا می تواند از هر اندازه ای استفاده کند مشروط به این که متغیر ها و عبارتها متناسب با نوع داده تعریف شده رفتار نمایند.
    جدول اعداد صحیح:
    نام طول محدوده مقادیر long 64 -9.233.372.036.854.808 تا-۹٫۲۳۳٫۳۷۲٫۰۳۶٫۸۵۴٫۸۰۷ int 32 -2.147.483.648 تا ۲٫۱۴۷٫۴۸۳٫۶۴۷ short 16 -32.768 تا ۳۲٫۷۶۷ byte 8 -128 تا ۱۲۷ Byte
    کوچکترین نوع اعداد صحیح است. متغیرهای نوع بایت به خصوص هنگام کار با جریانی از داده های یک شبکه یا فایل مفید می باشند .همچنین هنگام کار با داده های باینری خاص که ممکن است مستقیما با سایر انواع داده های تو کار جاوا سازگار نباشند؛ مفید هستند.
    Byte b,c;​
    Short
    این نوع داده ها احتمالا کمترین استفاده را در جاوا دارند زیرا تعریف آنها به گونه ای است که نخستین بایت سمت راست آنها بیشترین ارزش را دارد(فرمتbig-ending ). این نوع داده ها در کامپیوتر های ۱۶ بیتی که در حال کم شدن هستند کاربرد دارند.
    Short s;​
    نکته:
    Endianness واژه ای است که چگونگی ذخیره سازی داده های چند بایتی از قبیل short, int,long در حافظه را توصیف می کند. اگر ۲ بایت برای داده های نوع short لازم باشد بایت با ارزش بیشتر یا بایت با ارزش کمتر در ابتدا قرار می گیرد؟ این که گفته می شود کامپیوتری big-ending است یعنی ابتدا بایت با ارزش بیشتر ذخیره می شود و سپس بایت با ارزش کمتر قرار می گیرد. کامپیوتر هایی مانند SPARC وPowerPC هز این نوع هستند و کامپیوتر های نوع اینتل و سریX86 از نوع little-ending .
    Int
    متغر های نوع int علاوه بر کاربردهای دیگر برای کنترل حلقه ها و به عنوان شاخص آرایه ها نیز به کار برده می شوند. هرگاه با عبارتی متشکل از داده های نوعbyte,short و int و لیترال سروکار داشتید کل عبارت پیش از انجام محاسبات به int ارتقا می یابد.
    Long
    این نوع داده برای شرایطی مفید واقع می شود که int برای نگهداری مقدار مورد نظر به اندازه کافی بزرگ نباشد.
    به قطعه برنامه زیر توجه کنید. این برنامه مسافتی که نور در مدت روزهای مشخص شده طی می کند را نشان میدهد.
    //compute distance light travels using long variables.
    Class Light{
    Public Static Void main(String args[]) {
    Int lightspeed;
    long days;
    long seconds;
    long distance;
    //approximate speed of light in miles per second
    lightspeed=186000;
    days=1000; //specify number of days here
    seconds=days*24*60*60;// convert to seconds
    distance=lightspeed*seconds; // comute distance
    System.out.print(“In” +days);
    System.out.print(“days light will travel about”);
    System.out.println(distance+”miles.”);
    }
    }
    Out put:​
    In 1000 days light will travel about 16070400000000 miles.
    واضح است که خروجی را نمی توان در قالب int نگهداری کرد.
    ۲- انواع داده های اعشاری با ممیز شناور
    این نوع داده ها را real نیز می نامیم و برای ارزیابی عبارتهایی مفید هستند که نگهداری قسمت اعشاری آنها ضروری باشد. مجموعه استاندارد(IEEE-754) عملگر ها و داده های اعشاری با ممیز شناور در جاوا پیاده سازی شده است.


















    رایه ا
    نام طول بر حسب بیت محدوده تقریبی مقادیر double 64 1.8* e308 تا ۴٫۹* e-324 float 32 1.4*e-45 تا ۳٫۴*e38 Float
    Float نمایانگر مقادیر اعشاری با دقت ساده است. دقت ساده sigle-precision در برخی از پردازنده ها سریعتر است و به اندازه نصف دقت مضاعف به فضای ذخیره سازی نیاز دارد اما برای مقادیر خیلی بزرگ یا خیلی کوچک نتایج نادرست میدهد. این نوع برای زمانی مفید است که جزء اعشاری نیاز باشد.
    Float hightemp, lowtemp ;​
    Double
    از این نوع برای دقت مضاعف double-precision استفاده می شود. دقت مضاعف در برخی ار پردازنده های مدرن که برای محاسبات ریاضی با سرعت بالا ؛ بهینه شده اند سریعتر است. از double برای زمانی که نیاز به حفظ دقت محاسبات در محاسبات تکراری است و یا هنگام پردازش و مدیریت اعداد بسیار بزرگ استاده می شود.
    ۳- کاراکتر ها
    در جاوا برای دخیره سازی کاراکتر ها از char استفاده می شود اما برنامه سازان C/C++ باید بدانند که char در C/C++ عدد صحیحی به طول ۸ بیت است اما در جاوا اینطور نیست.
    جاوا از یونی کد برای نمایش کاراکتر ها استفاده می کند. یونی کد مجموعه کاراکتر های کاملا بین المللی است که می تواند نمایانگر تمامی کاراکتر های موجود در تمامی زبانها باشد. یونی کد در واقع شامل کاراکتر های بیشماری مانند لاتین ؛ یونانی ، عربی؛ اسلاو ؛ ژاپنی و … است به همین دلیل به ۱۶ بیت نیاز دارد. محدوده char از صفر تا ۶۵۵۳۶ است و char منفی وجود ندارد. مجموعه کاراکتر های استاندارد اسکی در محدوده صفر تا ۱۲۷ است و مجموعه کاراکتر های ۸ بیتی گسترش یافته (ISO-Latin-1) در محدوده صفر تا ۲۵۵ است.
    می دانیم که جاوا برای فراهم ساختن امکان نوشتن اپلت طراحی شده است پس طبیعی است که از یونی کد برای کاراکتر ها استفاده کند.اگرچه داده های نوع char عدد صحیح نیستند اما در بساری از مواقع می توانید به گونه ای با آنها کار کنید که گویی عدد صحیح هستند مثلا می توانید دو کاراکتر را با هم جمع یا ادغام کنید یا مقدارد یا متغیر کاراکتری را افزایش دهید .مانند مثال زیر:
    //char variables behave like integers.
    class CharDemo2{
    public Static Void main(String args[]) {
    char ch1;
    ch1=’x’;
    System.out.println(“ch contains”+ch1);
    Ch1++; //increment ch1
    System.out.println(“ch1 is now” +ch1);
    }
    }
    Out put: ch1 contains x
    Ch1 is now y
    ابتدا مقدارx به ch1 داده می شود و بعد ch1 افزایش داده می شود که این کار موجب ذخیره شدن y درch1 می شود. یعنی کاراکتر بعد ازx در مجموعه اسکی و کد یونی.
    ۴- داده های بولی
    این نوع داده برای مقادیر منطقی است و تنها یکی از دو مقدار true یا false را میتوان به آنها نسبت داد.
    نگاهی دقیقتر به لیترال
    اگه شما هم مثل من تو تعریف لیترال مشکل دارید این تعریف رو بخونید. من همیشه از لیترالها استفاده می کردم ولی راستشو بخواین کمتر می دونستم لیترال واقعا چیه تا اینکه استاد محترمی به من یه تعریف جدید داد.
    اگه شما از یک نوع مثلint,char یا هر نوع دیگه ای ؛بدون ذکر نوعش استفاده کنید در واقع لیترال اون نوع رو استفاده کردید و برنامه به طور خودکار اون نوع را برای شما در نظر میگیره, مثلا اگه بنویسید
    ‘x’;​
    X++;​
    کامپایلر x رو از نوع char در نطر میگیره و محاسباتو روش انجام میده. پس خیلی طبیعی که به تعداد انواع ؛ لیترال تعریف کنیم پس لیترال صحیح؛ لیترال اعشاری؛ لیترال بولی؛ لیترال کاراکتری و لیترال رشته ای خواهیم داشت که در اینجا به بررسی اونا می پردازیم:
    لیترال های صحیح
    اعداد صحیح متداولترین نوع داده ها در برنامه ها هستند و هر مقدار عددی کامل یک لیترال صحیح به شمار می آید مثل ۱و ۲ یا ۲۴٫
    تمامی این مقادیر دسیمال(مبنای ۱۰) هستند. دو مبنای اکتال(مبنای هشت) و هگزادسیمال(مبنای ۱۶) هم در لیترال های صحیح قابل استفاده هستند. در جاوا رقم صفر در ابتدای اعداد اکتال قرار می گیرد. وجود صفر در ابتدای اعداد دسیمال بی معنی است از این رو مقدار به ظاهر درست۰۹ ایجاد مشکل می کند و کامپایلر خطا می دهد زیرا ۹ در خارج از محدوده صفر تا اکتال قرار دارد.
    هگزا دسیمال به خوبی با word های مضرب ۸ مثل ۸؛۱۶؛۳۲ و ۶۴ بیت مطابقت دارد. مشخصه اعداد هگزا دسیمال وجود۰x در ابتدای آنها است. محدوده این اعداد از صفر تا ۱۵ است بنابراین A تاF (aتاf) جایگزین ۱۰ تا ۱۵ می شوند.
    //توهین به رشته های تحصیلی دیگه نمی کنم این تعریف یک خاطره است. تمام مواردی که در بالا گفته شد بر میگرده به اطلاعات ریاضی. یه استاد محترم در طول دوران تحصیل داشتیم که می گفت این مبنا ها رو در سوم دبستان یاد گرفتیم و می فرمودن که اگه اینارو بلد نیستید برید تغییر رشته بدید و برید رشته کتابداری که براش کار باشه. من که یادم نمی یاد اینارو تو پایه سوم برامون گفته باشن و تازه اگه هم گفته باشن با این سطح بالای آلزایمر که یادم نمی مونه اما یه جورایی بهتره پایه ریاضیمونو قوی کنیم. امیدوارم تمام استادا و معلم ها زنده باشن و سلامت.//
    متن بالا همون طور که می بینید یه comment بود و ربطی به مطالب درس نداره.
    لیترال ها ی صحیح موجب ایجاد مقادیر int می شوند که در جاوا ۳۲ بیتی هستند . چون نوع مقدار متغیر ها به شدت در جاوا کنترل میشه ممکن هست این سوال پیش بیاد که چطور ممکن است یک لیترال صحیح را بدون بروز خطای عدم تطبیق به سایر داده های نوع صحیح مثلbyte یا long تخصیص داد؟ وقتی یک مقدار صحیح به یک متغیر byte یا short نسبت داده میشه اگر لیترال در محدوده نوع مقصد باشه هیچ خطایی پیش نمیاد همچنین یک متغیر صحیح رو همیشه می تونیم به یه متغیرlong نسبت بدیم اما برای استفاده از یک لیترال long باید صراحتا برای کامپایلر مشخص کنید که از نوع long است.این کار با اضافه کردن یک L یا lبه انتهای سمت راست مقدار لیترال انجام میشه. بزرگتریم مقدار لیترال long است.
    لیترالهای اعشاری
    اعداد اعشاری با ممیز شناور نمایانگر اعداد دسیمال با بخش اعشاری هستند. این اعداد را می توان به صورت استاندارد یا با نماد علمی نمایش داد. در حالت استاندارد یک عدد اعشاری با ممبز شناور را اینطور می نویسیم: مثلا ۲٫۵ در نماد علمی از مقدار استاندارد؛ عدد اعشاری با ممیز شناور و پسوندی که نمایانگر توانی از ۱۰ است استفاده می شود. توان به صورت E یا e و یک عدد دسیمال نمایش داده می شود که یا مثبت است یا منفی: ۶۰۰۲۲e23 . در جاوا به طور پیش فرض از دقت مضاعف برای لیترال های اعشاری با ممیز شناور استفاده می شود و برای مشخص کردن لیترال های float باید یکF یاf به انتهای آنها بیفزاییم. البته می توانید با افزودنD(d) لیترالdouble بسازید اما این کار ضرورتی ندارد چون گفتیم که به طور پیش فرض لیترالهای اعشاری با ممیز شناورdouble فرض می شوند.
    لیترالهای بولی
    این لیترالها تنها دو مقدار منطقی true یا false را می پذیرند که به هیچ وجه به نمایش عددی تیدیل نمی شوند. لیترالtrue در جاوا برابر۱ نیست و false هم برابر ۰ نیست این مقادیر در جاوا تنها؛ متغیر های بولی قابل تخصیص هستند و یا در عبارتهای بولی همراه با عملگر های بولی قابل استفاده هستند.
    لیترالهای کاراکتری
    کاراکتر ها در جاوا ایندکس های مجموعه کاراکتر های یونی کد به شمار می آیند. کاراکتر ها مقادیر ۱۶ بیتی هستند که قابل تبدیل به اعداد صحیح بوده و با عملگرهایی مانند”+” و “-” قابل پردازش و مدیریت هستند. هر لیترال کاراکتری در بین علامت double quote یا(” “) نمایش داده می شوند. تمام کاراکتر های اسکی قابل رویت را می توان به این صورت نوشت و آنهایی را هم که مستقیما قابل نوشتن نیستند می توان از”escape sequence” استفاده نمود که امکان وارد کردن کاراکتر های مورد نیاز را فراهم می کند. مثلا’\” به جای کاراکتر علامت نقل قول تکی و’\n\ به جای کاراکتر نمایانگر سطر جدید.
    برای وارد کردن کاراکتر به صورت اکتال یا هگزا دسیمال هم مکانیزمی وجود دارد: برای کاراکتر های اکتال از’\’ و سپس عدد سه رقمی مانند ‘\۱۴۱’ نمایانگر حرف ‘a’ است.برای هگزا دسیمال هم ‘\u’ و سپس چهار رقم هگزا دسیمال مانند ‘\u0061’ حرف ‘a’ در مجموعه کاراکترهایISO-Latin-1 است زیرا بایت اول ۰ است.
    فهرست این کاراکتر ها را به عنوان یه homework در بیارید.
    لیترال های رشته ای
    لیترال های رشته ایstring هم چون زبانهای دیگر اینطور نوشته می شوند:
    “Hello World”​
    “I Like computer programming”​
    تمامی قراردادهایی که در مورد لیترالهای کاراکتری گفتیم برای لیترالهای رشته ای هم صدق می کند. نکته مهم درباره رشته ها در جاوا این است که رشته ها باید در یک سطر آغاز و خاتمه بیابند و هیچ گونه کاراکتر ادامه خط وجود ندارد.
    نکته:
    رشته ها در زبانهایی مانند C\C++ به صورت آرایه ای از کاراکتر ها هستند اما در جاوا این گونه نیست. رشته ها در واقع شی ء هستند و چون جاوا رشته ها را به صورت شی ء پیاده سازی می کند قابلیت های زیادی برای مدیریت آن دارد که هم قدرتمند هستند و هم آسان.
    کاراکتر های Escape Sequence
    Escape Sequence شرح \ddd Octal Character(ddd) \uxxxx Hexadecimal Unicode character(xxxx) \’ Single quote \” Double quote \\ Backslash \r Carriage return \n New Line(also known as line feed) \f From feed \t Tab \b Backspace خوب اینم از Unit4 . درسنامه های جاوا درسنامه های طولانی هستند​
     
  5. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی جاوا – قسمت اول

    برنامه نویسی جاوا – قسمت پنجم


    متغیر ها
    متغیر ها واحد پایه ذخیره سازی در برنامه های جاوا هستند .هر متغیری به وسیله ترکیبی از یک شناسه ؛ نوع و مقدار اولیه تعریف می شود به علاوه همه متغیر ها دارای محدودهScope و زمان حیات Life-Time هستند. محدوده هر متغیر مشخص می کند که آن متغیر در چه قسمتهایی قابل استفاده است.
    شیوه تعریف کردن متغیر ها
    شکل کلی تعریف کردن متغیر ها در جاوا اینگونه است:
    Type identifier [=value][, identifier[=value]…];​
    Type یکی از انواع تجزیه ناپذیر جاوا ؛ نام یک کلاس یا رابط است identifier نام متغیر است متغیر ها را می توان از طریق مشخص کردن یک علامت تساوی و یک مقدار مقداردهی نمود. حاصل عبارت مقداردهی باید مقداری از همان نوع مشخص شده برای متغیر باشد. کاما هم علامتی برای جدا کردن بیش از یک متغیر برای یک نوع است.
    Int a,b,c; //declares three ints, a,b and c.​
    Int d=3,e,f=5; //declares three more ints, initializing d and f.​
    Byte z=22;​
    Double pi =3.14159;​
    Char x=’x’;​
    مقدار دهی اولیه پویا
    در مثالهای بالا از ثابتها به عنوان مقدار اولیه استفاده شد اما جاوا امکان مقداردهی پویای متغیر ها را به وسیله عبارتهای معتبر در زمان تعریف آنها نیز فراهم کرده است.برنامه زیر طول وتر یک مثلث قائم الزاویه را با داشتن دو ضلع دیگر محاسبه می کند.
    //demonstrate dynamic initialization.​
    Class DynInit{​
    Public static void main(string args[]) {​
    Double a=3.0 ,b=4.0;​
    //c is dynamically initialized​
    Double c= math.sqrt(a*a+b*b);​
    System.out.println(“ hypoyenuse is”+c);​
    } }​
    C به طور پویا با طول وتر مقداردهی می شود.sqrt() یکی دیگر از متدهای توکار جاوا است که عضوی از کلاسmath است و جذر آرگومان خودش را محاسبه می کند. نکته کلیدی این نوع مقدار دهی این است که در عبارت مقداردهی می توان از هر عنصری که در زمان مقداردهی معتبر است استفاده نمود از جمله متدها ؛متغیر های دیگر یا حتی لیترال ها.
    محدوده دستیابی و دوره حیات متغیر ها
    تا به حال تمامی متغیر های مورد استفاده ؛در ابتدای متد main() تعریف شده اند اما جاوا امکان تعریف متغیر ها را در هر بلوکی فراهم کرده است. هر بلوک محدوده ای را تعیین می کند پس هر بار که بلوک جدیدی را آغاز می کنید محدوده جدیدی ایجاد می شود و هر محدوده تعیین می کند که کدام شی ء ها برای سایر بخش ها قابل رویت است. دوره حیات آن شی ء ها نیز مشخص می شود.
    زبانها ی کامپیوتری دیگر دو دسته عمومی از محدوده ها را تعیین می کنند : عمومیglobal و محلی local اما این محدوده های قدیمی به خوبی با مدل شی ء گرای جاوا مطابقت ندارد . اگر چه امکان ایجاد متغیر هایی وجود دارد که در نهایت به داشتن یک محدوده عمومی منجر شود اما انجام این کار عموما یک استثنا به شمار می آید و نه یک قاعده کلی.
    در زبان جاوا دو محدوده اصلی ؛ محدوده هایی هستند که توسط یک کلاس تعریف می شوند و نیز محدوده هایی که توسط یک متد تعریف می شوند.حتی این تمایز نیز قدری مصنوعی است اما چون محدوده کلاس چندید ویژگی و خصوصیت منحصر به فرد دارد که به محدوده تعریف شده توسط یک متد اعمال نمی شوند؛ این تمایز معقول به نظر می رسد. در حال حاضر تنها به بررسی محدوده هایی می پردازیم که توسط و یا درون یک متد تعریف می شوند.
    محدوده ای که توسط هر متد تعریف می شود ؛ با آکولاد Brace باز آغاز می شود اما اگر آن متد پارامتر هایی داشته باشد؛ آنها نیز در محدوده آن متد قرار می گیرند. اگر چه در این درسنامه پارامتر ها را در آینده بررسی خواهیم کرد اما فعلا به خاطر این مبحث فرض می شود که آنها نیز همچون سایر متغیر ها کار می کنند.
    به طور کلی؛ متغیر هایی که در یک محدوده تعریف می شوند؛ برای قسمت های خارج از آن محدوده قابل دسترسی نیستند از این رو وقتی متغیری را درون یک محدوده تعریف می کنیم؛ در واقع آن را محلی می سازیم و آن را در مقابل دستیابی و یا تغییرات غیر مجاز محافظت می کنیم. در حقیقت ؛ قوانین محدوده؛پایه و اساس لازم برای نهان سازیencapsulation را فراهم می سازیم.
    محدوده ها ممکن است تودر توnested باشند. هر بار که بلوکی ایجاد می کنیم در واقع محدوده جدید تودر تویی را ایجاد کرده ایم و با این عمل محدوده بیرونی؛ محدوده درونی را در بر می گیرد. این بدان معناست که شی ء های تعریف شده در محدوده بیرونی؛ برای دستورالعمل های محدوده درونی قابل رویت خواهند بود که البته عکس آن صادق نیست. برنامه زیر را در نظر بگیرید:
    //demonstrate block scope.​
    Class Scope{​
    Public static void main(string args{}) {​
    Int x; // know to all code within main​
    X=10;​
    If(x==10) {//start new scope​
    Int y=20; //know only to this block​
    //x and y both know here.​
    System.out.println(“ x and y :” +x+” “ +y);​
    X=y*2;}​
    //y=100;//error! Y not know here​
    //x is still know here​
    System.out.println(“x is” +x);​
    }​
    }​
    فکر می کنم برنامه خیلی گویا باشه در هر صورت اگه سوالی بود در خدمتم!
    در هر بلوک می توان متغیر ها را تعریف کرد اما متغیر ها تنها پس از تعریف شدن قابل استفاده خواهند بود از این رو اگر متغیری را در ابتدای یک متد تعریف کنید؛ در آن صورت در کل متد قابل رویت خواهد بود اما اگر متغیری را در انتهای بلوکی تعریف کنید در آن صورت عملا بی فایده خواهد بود چرا که هیچ دستورالعملی به آن دستیابی نخواهد داشت. به عنوان مثال به عبارت زیر توجه کنید:
    //this fragment is wrong!​
    Vount=100; //oops!cannot use count before it is declared!​
    Int count,​
    همانطور که می بینید این عبارت اشتباه است چون متغیرcount پیش ار تعریف شدن قابل استفاده نیست.
    به این نکته هم باید توجه کنید که متغیر ها هنگام ورود به محدوده شان ایجاد می شوند و هنگام خروج از محدوده شان نیز از بین می روند. این بدان معناست که هیچ متغیری مقدارش را پس از خروج از محدوده اش نخواهد داشت بنابراین متغیر هایی که درون یک متد تعریف می شوند ؛ مقدارشان را در فواصل زمانی بین فراخوانی متد نخواهند داشت همچنین متغیری که در یک بلوک تعریف می شود مقدار را پس از خروج از بلوک از دست خواهد داد از این رو life-time هر متغیر به محدوده اش وابسته است.
    اگر متغیری در حین تعریف مقداردهی شود ؛ در آن صورت هر بار به هنگام ورود به بلوک؛ از نو مقداردهی می شود:
    //demonstrate lifetime of a variable.​
    Class LifeTime{​
    Public static void main(string args[]) {​
    Int x;​
    For (x=0;x<3;x++){​
    Int y=-1; //y is initialized each time block is entered​
    System.out.printl(“y is: “ +y); //this always -1​
    Y=100;​
    System.out.printl(“y is now:” +y);​
    }​
    }​
    }​
    Out put:​
    Y is:-1​
    Y is now:100​
    Y is:-1​
    Y is now:100​
    Y is:-1​
    Y is now :100​
    همانگونه که می بینید هر بار به هنگام ورود به حلقه for متغیر y با ۱- مقداردهی می شود .با وجود آنکه مقدار۱۰۰ به آن اختصاص می یابد اما مقدار جدید را از دست می دهد.
    و آخرین نکته: اگر چه بلوک ها می توانند تو در تو باشند اما نمی توان متغیری همنام با یکی از متغیر های محدوده بیرونی تعریف کرد:
    //this program will not compile​
    Class ScopeErr{​
    Public static void main(string args[]) {​
    Int bar=1;​
    { //creates a new scope​
    Int bar=2; //compile time error—bar already defined!​
    }​
    }​
    }​
    تبدیل و Casting
    اگر تجربه برنامه سازی داشته باشید( که دارید) حتما می دونید که تخصیص یک نوع مقدار به متغیری از نوع دیگر نسبتا متداول است. اگر آن دو نوع سازگار باشند در آن صورت جاوا عمل تبدیل را به صورت خودکار انجام خواهد داد اما همیشه تمام داده های مختلف سازگار نیستند و از این رو همه تبدیلات به طور ضمنی ممکن نیست. به عنوان نمونه هیچ تبدیلی برای double به byte تعریف نشده است.
    خوشبختانه باز هم امکان کسب رویه های تبدبل برای انواع داده های ناسازگار وجود دارد برای انجام این کار باید از Casting استفاده کنید. تبدیل صریح بین انواع داده های ناسازگار.
    تبدیل خودکار جاوا
    وقتی یک نوع داده به متغیری از نوع دیگر تخصیص می یابد؛ چنانچه شرایط ذیل مهیا باشد عمل تبدیل خودکار انجام می شود:

    • آن دو نوع سازگار باشند
    • نوع مقصد بزرگتر از نوع مبدا باشد
    هرگاه این دو شرط برقرار باشد نوعی “تبدیل همراه با بزرگ سازی” widening conversion انجام می شود. مثلا نوع int همیشه برای نگهداری مقادیر byte به اندازه کافی بزرگ است بنابراین استفاده از عبارتcasting به صورت صریح ضرورت ندارد.
    برای تبدیلات همراه با بزرگ سازی؛ انواع داده های عددی از جمله اعداد صحیح و اعشاری با ممیز شناور با یکدیگر سازگار هستند اما انواع داده های عددی با char یا Boolean سازگار نیستند. همچنین char و Boolean با هم نیز سازگار نیستند.
    انجام Casting برای انواع داده های ناسازگار
    گفتیم که برای نوع هایی که با هم سازگار نیستند نمی توانیم از تبدیلات خودکار(با وجود مفید بودنشان) استفاده کنیم. مثلا اگر بخواهیم یک مقدارint را به مقدارbyte تخصیص بدهیم؛ این تبدیل به طور خودکار انجام نمی شود زیرا byte از int کوچکتر است . این نوع تبدیل گاهی “تبدیل همراه با کوچک سازی” نامیده می شود ؛چرا که مقدار int به طور صریح کوچکتر می شود تا در مقصد قابل ذخیره باشد. برای آنکه تبدیل دو نوع ناسازگار را انجام دهید باید ازcasting استفاده کنید ؛ یعنی نبدیل صریح انواع داده ها. به صورت زیر:
    (target-type) value​
    Target-type مشخص کننده نوع داده ای است که مقدار مورد نظر باید به آن تبدیل شود. مثال زیر را مرور می کنیم:​
    Int a;​
    Byte b;​
    //…​
    B=(byte) a;​
    در عبارت بالاcasting از int به byte انجام می شود. چنانچه مقدار صحیح بزرگتر از محدوده byte باشد؛ مقدارش از طریق تقسیم بر محدوده byte و به دست آوردن باقیمانده تقسیم؛ کوچک می شود.
    به برنامه زیر توجه کنید:
    //demonstrate casts.​
    Class Conversion {​
    Public static void main(string args[] ) {​
    Byte b;​
    Int i=257;​
    Double d=323.142;​
    System.out.println(“\nConversion of int to byte.”);​
    B=(byte) I;​
    System.out.println( “i and b”+i+ “ “ +b);​
    System.out.println(“\nConversion of double to int.”);​
    I=(int)d;​
    System.out.println(“d and I “+ “ “ +i);​
    System.out.println(“\nConversion of double to byte.”);​
    B=(byte)d;​
    System.out.println(“d and b”+d+” “+b);​
    }​
    }​
    Out put:​
    Conversion of int to byte.​
    1 and b 257 ۱​
    Conversion of double to int.​
    D and I 323.142 ۳۲۳​
    Conversion of double to byte.​
    D and b 323.142 ۶۷​
    دوست دارد برام بنویسید که در این قطعه برنامه casting ها به چه نوعی انجام شده. کار سختی نیست هم برنامه رو دارید و هم خروجی اون رو.
    ارتقاء خودکار انواع داده ها در عبارتها
    علاوه بر عملیات تخصیص؛ تبدیل نوع داده ها در شرایط دیگر هم محتمل است: در عبارتها.
    برای درک دلیل این امر مثال زیر را در نطر بگیرید. در برخی از عبارات دقت مورد نیاز برای یک مقدار میانجی گاهی اوقات از محدوده یکی از عملوند ها ***** می کند:
    Byte a=40;​
    Byte b=50;​
    Byte c=100;​
    Int d=a*b/c;​
    نتیجه جمله میانجیa*b از محدوده عملوند ها ***** می کند. برای مدیریت این گونه مسائل؛ جاوا در حین ارزیابی عبارتها؛ عملوند های نوعbyte یا short را به طور خودکار به int ارتقا promote می دهد. یعنی جمله میانجیa*b ؛ با int انجام می شود نه byte. پس نتیجه جمله(۵۰*۴۰=۲۰۰۰) حتی با وجود اینکهa وb هر دو byte هستند؛ معتبر خواهد بود.
    نکته: گرچه عمل ارتقاء خودکار مفید است اما ممکن است موجب بروز خطای زمان کامپایل نیز بشود.
    نکته: در مواقعی که از عواقب مسئله سر ریزoverflow آگاهی دارید باید از عمل Casting صریح استفاده کنید.
    قوانین ارتقاء انواع داده ها
    ۱- تمام مقادیرbyte و short به گونه ای که گفته شد به int ارتقاء می یابند
    ۲- اگر یکی از عملوند ها از نوع long باشد کل عبارت به long ارتقاء می یابد.
    ۳- اگر یکی از عملوندها از نوعfloat باشد در آن صورت کل عبارت به float ارتقاء می یابد.
    ۴- و اگر یکی از عملوندها double باشد نتیجه همdouble خواهد بود.
     
  6. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی جاوا – قسمت اول

    [h=2]برنامه نویسی جاوا –قسمت ششم[/h]
    آرایه ها : هر آرایهarray گروهی از متغیر های هم نوع است که ارجاع به آنها از طریق یک نام مشترک صورت می گیرد.در جاوا آرایه هایی از انواع مختلف را به صورت تک یا چند بعدی می توان ایجاد کرد.هریک از عناصر آرایه از طریق ایندکس خودشان قابل دسترسی هستند.آرایه ها روش بسیار مفیدی برای گروه بندی اطلاعات مرتبط به هم هستند.
    نکته: عملکرد آرایه ها در جاوا با عملکردشان در زبانهای دیگر مانندC/C++ کاملا متفاوت است.
    آرایه های تک بعدی
    هر آرایه تک بعدیone-dimensional فهرستی از متغیر های هم نوع است. برای ایجاد یک آرایه باید یک متغیر آرایه ای از نوع مورد نظر ایجاد کنید.فرم کلی به این صورت است:
    Type var-name[ ];
    Type در اینجا نوع آرایه است.نوع آرایه؛ نوع داده یکایک عناصر تشکیل دهنده آرایه را مشخص می کند.از این رو نوع آرایه مشخص می کند که چه نوع داده هایی در آرایه ذخیره خواهد شد.
    Int month_day[ ];
    تعریف بالا گرچه موجب تثبیت متغیر آرایه ایmonth_day می شود اما در واقع هنوز هیچ آرایه ای وجود ندارد و در حقیقت این آرایه که با null مقداردهی می شود نمایانگر یک آرایه بدون مقدار است.برای اینکه این آرایه را با آرایه ای فیزیکی از مقادیر صحیح مرتبط سازید؛لازم است آرایه را با استفاده ازnew ایجاد و آنرا به month_dayتخصیص دهید.newعملگر ویژه ای برای تخصیص حافظه است.(درC++ هم newداریم که دقیقا این کارو انجام میده)
    فرم کلی newبرای آرایه های تک بعدی به این صورت است:
    Array-var=new type[size];
    Typeمشخص کننده نوع داده ها؛sizeمشخص کننده تعداد عناصر آرایه وarray-varمتغیر آرایه ای است که با آن مرتبط می شود. یعنی برای اینکه از new برای تخصیص آرایه استفاده کنید؛باید نوع و تعداد عناصری که باید تخصیص داده شوند را مشخص نمایید. عناصری که به وسیلهnew به آرایه تخصیص می یابند به طور خودکار با صفر مقداردهی می شوند:
    Month_day=new int[12];
    Month_day به آرایه ای از۱۲ عدد صحیح اشاره خواهد داشت به علاوه تمام عناعر آرایه با صفر مقداردهی خواهند شد.
    نکته:دوستان عزیز توجه کنید آرایه ها جز مواردی هستند که برای فهم بیشتر بهتره شکل فرضی اونا رو رسم کنید؛باز هم از این موارد در برنامه سازی داریم.نگران نباشید که کسی شما رو مورد تمسخر قرار بده؛قراره یاد بگیریم و بهترین شیوه یادگیری آرایه ها کشیدن شکل اوناست.مثلtrace کردنstackها.
    حالا یه دور مطالبی که گفتیم رو مرور می کنیم: ایجاد هر آرایه نوعی فرآیند دو مرحله ای است.نخست اینکه باید متغیری از آرایه مورد نظرتعریف کنیم و دوم اینکه باید حافظه محل آرایه را با استفاده از new تخصیص دهید و آنرا به متغیر آرایه نسبت دهیم. از این رو تمام آرایه ها در جاوا به صورت پویا تخصیص می یابند(اگه در مورد تخصیص حافظه پویا چیزی نمی دونید نگران نباشید؛در آینده در موردش صحبت می کنیم اما اگه دوست دارید مطالعه داشته باشید باید بگم تخصیص حافظه پویا در جاوا نسبتا مشابه این مبحث درC++ است).
    Month_day[1]=28;
    سطر زیر سبب نمایش مقدار ذخیره شده در ایندکس شماره ۳(عنصر چهارم)می شود.
    System.out.println(month_day[3]);
    و این هم کل برنامه؛آرایه ای متشکل از تعداد روزهای هر ماه:
    //demonstrate a one-dimensional array.
    Class Array{
    Public static void main(string args[]){
    Int month_day[];
    Month_day=new int[12];
    Month_day[0]=31;
    Month_day[1]=28;
    Month_day[2]=31;
    Month_day[3]=30;
    Month_day[4]=31;
    Month_day[5]=30;
    Month_day[6]=31;
    Month_day[7]=31;
    Month_day[8]=30;
    Month_day[9]=31;
    Month_day[10]=30;
    Month_day[11]=31;
    System.out.println(“April has”+month_day[3]+”days.”);
    }
    }
    وقتی این برنامه را اجرا می کنید تعداد روزهای ماه آوریل را نمایش می دهد.ایندکس آرایه های جاوا از صفر آغاز می شود بنابراین تعداد روزهای ماه آوریلmonth_day[3] یا ۳۰ است.
    Int month_day[ ]=new int [12];
    روش بالا روشی است که عموما در برنامه های حرفه ای جاوا خواهید دید.
    آرایه ها را می توان هنگام تعریف کردن؛مقداردهی کرد.فرآیند انجام این کار شباهت زیادی به روند انجام آن برای انواع داده های پایه و ساده دارد.برای این کار؛مقادیر بین دو آکولادbrace نوشته شده و با کاما از یکدیگر جدا می شوند. کاما ها مقادیر عناصر آرایه را از یکدیگر جدا می کنند. آرایه به طور خودکار به گونه ای ایجاد می شود تا فضای کافی برای عناصری که برای مقداردهی اولیه مشخص می کنید؛وجود داشته باشد.نیازی به استفاده ازnew نیست. به عنوان مثال برای آنکه تعداد روزها را برای هر ماه مشخص کنید ؛مثال زیر آرایه ای از نوع اعداد صحیح ایجاد و با تعداد روزها مقداردهی می کند:
    //an improved version of the previous program.
    Class AutoArray{
    Public static void main(string args[]){
    Int month_day[ ]= {31,28,31,30,31,30,31,31,30,31,30,31};
    System.out.println(“April has”+month_day[3]+”days.”);
    }
    }
    جاوا به شدت کنترل می کند که تصادفا اقدام به ذخیره مقادیر در خارج از محدوده آرایه نکنید و یا به آنها ارجاع نداشته باشید. سیستم زمان اجرای جاوا کنترل می کند تا اطمینان حاصل شود که تمام ایندکس های آرایه در محدوده آن قرار دارند. مثلا سیستم زمان اجرای جاوا مقدار هر یک از ایندکس هایmonth_day را کنترل می کند تا اطمینان یابد که تمام آنها در بازه بسته صفر و ۱۱ قرار دارند. اگر بخواهید به عناصر خارج از محدوده آرایه دستیابی داشته باشید(اعداد منفی یا اعداد بزرگتر از طول آرایه) ؛ با خطای زمان اجرا مواجه خواهید شد.
    این برنامه میانگین مجموعه ای از اعداد را محاسبه می کند:
    //average an array of value
    Class Average{
    Public static void main(string args[]){
    Double nums[]={10.1,11.2,12.3,13.4,14.5};
    Double result=0;
    Int i;
    For(i=0;i<5;i++)
    Result=result+nums;
    System.out.println(“Average is”+result/5);
    }
    }
    آرایه های چند بعدی
    آرایه های چند بعدی multidimensional در جاوا آرایه ای از آرایه ها است.این آرایه ها همچون آرایه های چند بعدی معمولی به
    نظر می رسند اما همانگونه که در ادامه می بینید؛چند تفاوت جزیی خواهند داشت.برای آنکه متغیر آرایه چند بعدی را تعریف کنیم ؛ هر یک از ایندکس ها را بین دو کروشه می نویسیم:​
    Int twoD[ ] [ ]=new int[4] [۵];
    یک آرایه دو بعدی به نام two .ماتریس ۵*۴ بالا به ضورت آرایه ای از آرایه های نوع int پیاده سازی می شود.
    یک آرایه دو بعدی به نام two .ماتریس ۵*۴ بالا به ضورت آرایه ای از آرایه های نوع int پیاده سازی می شود.
    [​IMG]
    نمایی از یک آرایه دوبعدی۵*۴- ایندکس های سمت راست مشخص کننده ستون و ایندکس های سمت چپ مشخص کننده سطر هستند.
    برنامه زیر هر یک از عناصر این آرایه را ازچپ به راست و از بالا به پایین شماره گذاری نمدره و سپس مقادیر آن را نمایش می دهد:
    //demonstrate a two-dimensional array.
    Class TwoDArray{
    Public static void main(string args[]){
    Int towD [ ] [ ] =new int [4] [5];
    Int i,j,k=0;
    For (i=0 ; i<4 ; i++)
    For (j=0 ; j<5 ; j++) {
    twoD [j] =k;
    k++;
    }
    For (i=0 ; i<4 ; i++) {
    For(j=0 ; j<5 ;j++)
    System.out.print(twoD [j]+” “);
    System.out.println();
    }
    }
    }
    Out put:
    0 ۱ ۲ ۳ ۴
    ۵ ۶ ۷ ۸ ۹
    ۱۰ ۱۱ ۱۲ ۱۳ ۱۴
    ۱۵ ۱۶ ۱۷ ۱۸ ۱۹
    وقتی حافظه ای را به یک آرایه چند بعدی تخصیص دهید؛ کافی است تنها حافظه بعد اول(سمت چپ ترین) را مشخص کنید. بعدی دیگر را می توانید به طور جداگانه تخصیص دهید.
    هر چند که در این مثال تخصیص جداگانه بعد دوم آرایه هیچ مزیتی ندارد اما انجام این کار در شرایط دیگر ممکن است سودمند باشد؛ مثلا وقتی ابعاد آرایه ها را به طور دستی تخصیص می دهید؛ نیاز به تخصیص همان تعداد عنصر برای هر یک از ابعاد نخواهید داشت. از آنجایی که آرایه های چند بعدی در واقع آرایه هایی از آرایه ها هستند؛طول هر آرایه تحت کنترل ماست.
    در برنامه زیر یک ارایه دو بعدی ایجاد می کنیم که در آن اندازه های بعد دوم مساوی نیستند:​
    //manually allocate differing size second dimension.
    Class TwoDgain{
    Public static void main(string args[]){
    Int twoD[ ] [ ] =new int [4] [ ];
    twoD[0]=new int[1];
    twoD[1]=new int[2];
    twoD[2]=new int[3];
    twoD[3]=new int[4];
    int i,j,k=0;
    for (i=0 ;i<4 ; i++)
    for (j=0 ; j
    twoD[j]=k;
    k++;
    }
    For (i=0 ; i<4 ; i++){
    For(j=0 ;j
    System.out.print(twoD [j] +” “);
    System.out.println( );
    }
    }
    }
    استفاده از آرایه های چند بعدی غیر معمول(نا منظم)ممکن است برای بسیاری از برنامه های کاربردی مناسب نباشد؛ چرا که وجود آرایه های چند بعدی در برنامه ها خلاف انتظار کاربران خواهد بود. با این وجود؛ آرایه های نامنظم ممکن است در برخی از شرایط به طور کارآمدی مورد استفاده قرار گیرند.مثلا اگر نیاز به آرایه دو بعدی بسیار بزرگی داشته باشیم که تنها برخی از عناصر آنها مقدار داشته باشند(آرایه ای که تمام عناصرش مورد استفاده نباشند) ؛ در آن صورت آرایه های نا منظم راه حل کاملی به شمار می آیند.
    مقدار دهی اولیه آرایه های چند بعدی هم میسر است. برای انجام این کار کافی است مقادیر اولیه هر یک از ابعاد را بین دو آکولاد بنویسید.
    برنامه زیر ماتریسی را ایجاد می کند که مقدار هر عنصر؛ حاصل ضرب ایندکس های سطر و ستون است. توجه کنید که علاوه بر مقادیر لیترال؛ از جملات جبری هم برای مقداردهی می توان استفاده کرد:
    //initialize a two-dimensionL array.
    Class Natrix{
    Public static void main(string args[ ] ){
    Double m [ ] [ ] = {
    {0*0,1*0,2*0,3*0},
    {0*1,1*1,2*1,3*1},
    {0*2,1*2,2*2,3*2},
    {0*3,1*3,2*3,3*3}
    };
    Int I,j;
    For(i=0 ; i<4 ;i++){
    For(j=0 ;j<4 ; j++)
    System.out.print(m [ i] [j] +” “);
    Sytem.out.println();
    }
    }
    }
    برنامه را اجرا کنید و خروجی را مشاهده کنید.​
    روش دیگری برای تعریف کردن آرایه ها
    Type [ ] var-name;
    در این روش؛کروشه ها پس از مشخصه نوع آرایه قرار می گیرند و نه نام متغیر آرایه.
    تعاریف زیر معادل هستند:
    Char twod1 [ ] [ ] =new char[3] [4];
    Char [ ] [ ] twod2=new char [3] [4];
    این روش برای مواقعی مفید است که همزمان چندین آرایه همنوع تعریف می شوند.به عنوان مثال:​
    Int [ ] nums,nums2,nums3 ; //creat three arrays
    عبارت بالا سه متغیر آرایه ای از نوع int تعریف میکند.نتیجه مثال بالا همچون عبارت زیر است:
    Int name [ ] ,name2[ ],name3[ ] ; //creat three arrays
    این روش همچنان برای مشخص کردن یک آرایه به عنوان مقدار حاصل از یک متد مفید است.​

    چند نکته در مورد رشته ها
    همانطور که متوجه شدید در مباحث مربوط به انواع داده ها و آرایه ها هیچ اشاره ای به رشته ها یا داده های نوع string نداشتیم. دلیل این امر آن است که جاوا از چنین نوعی پشتیبانی نمی کند-البته نه به شکل معمول.
    داده های رشته ای جاوا که string نامیده می شوند؛ یکی از انواع داده های پایه و ساده به شمار نمی آیند و آرایه ای از کاراکتر ها( مانند C++ ) هم نیستند بلکه در عوض شی ء می باشند و ارائه شرح کاملی از این نوع داده ها؛ مستلزم آشنایی با برخی از ویژگی های اشیا است که در آینده در مورد آنها بحث خواهیم کرد.
    با این وجود؛ برای آنکه بتوانید در برنامه های نمونه از رشته های ساده استفاده کنید شرح خلاصه ای را ارائه کرده ایم:
    از string برای تعریف کردن متغیر های رشته ای استفاده می شود. همچنین می توانید آرایه های رشته ای تعریف کنید. ثابتهای رشته ای که بین دو علامت نقل قول colon نوشته می شوند را می توان به متغیر های نوع string تخصیص داد. متغیر های نوع string را می توان به سایر متغیر های نوعstring تخصیص داد. شی ء های نوع string را هم می توان به عنوان آرگومان در println() به کار برد.
    نکاتی در مورد اشاره گر ها برای برنامه سازان C/C++
    اگر از برنامه سازانC/C++ هستید می دانید که این زبان از اشاره گرهاpointer پشتیبانی می کند اما در این فصل ما هیچ اشاره ای به آنها نداشتیم.دلیلش این است که جاوا از اشاره گرها پشتیبانی نمی کند و استفاده از آنها مجاز نیست(به عبارت درست تر جاوا از اشاره گرهایی که توسط برنامه سازان قابل دستیابی یا تغییر باشند ؛ پشتیبانی نمی کند).
    دلیل این عدم پشتیبانی این است که انجام این کار به برنامه های جاوا امکان می دهد تا شکافی بین محیط اجرای جاوا و کامپیوتر میزبان ایجاد نمایند(اشاره گر ها می توانند به هر آدرسی از حافظه ارجاع داشته باشند؛حتی آدرس هایی که ممکن است خارج از سیستم زمان اجرای جاوا باشد). جاوا به گونه ای طراحی شده است که تا وقتی در محدوده محیط اجرا بمانید ؛ هیچگاه نیاز به اشاره گر نخواهید داشت و کاربرد آنها هم سودی نخواهد داشت.
     
  7. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی جاوا – قسمت اول

    [h=2][​IMG] برنامه نویسی جاوا –قسمت هفتم[/h]

    عملگر ها
    جاوا عملگرهای operator غنی زیادی دارد و بیشتر این عملگر ها رو می تونیم تو ۴ دسته تقسیم کنیم: ۱- عملگرهای حسابیarithmetic ۲- عملگرهای بیتی bitwise 3- عملگرهای منطقی logical و ۴- عملگرهای رابطه ای relational . جاوا همچنین چند عملگر اضافی دارد که شرایط ویژه را مدیریت می کند. ما در این بخش تمامی عملگرها به جز عملگر instanceof رو که در بخش های آینده مطالعه میشه؛ عنوان خواهیم کرد.
    نکته: اگر با زبانهای C/C++ آشنا هستید خوشحال باشید چون اکثر عملگرهای این زبانها مانند جاوا هستند البته با تفاوتهای اندک اما به طور خاص خواندن دقیق این فصل رو به شما توصیه میکنیم.
    عملگرهای حسابی
    این عملگرها به همان صورت که در جبر به کار می روند در جملات حسابی به کار برده خواهند شد. فهرست این عملگرها رو با هم می بینیم:
    عملگر نتیجه + جمع - تفریق * ضرب / تقسیم % باقیمانده تقسیم ++ افزایش =+ جمع و تخصیص =- تفریق و تخصیص =* ضرب و تخصیص =/ تقسیم و تخصیص =% باقیمانده تقسیم و تخصیص – کاهش عملوندهای operand عملگرهای حسابی باید از نوع عددی باشند.آنها را نمی توانید همراه با داده های نوع Boolean به کار ببرید اما می توان آنها را برای داده های نوع char به کار ببرید چون char در جاوا اساسا زیرمجموعه ای ازint است.
    عملگرهای حسابی پایه
    عملیات حسابی پایه basic –جمع ؛تفریق ؛ ضرب ؛تقسیم- همانگونه ای عمل می کنند که برای داده های عددی انتظار دارید. عملگر “-” یک فرم یگانگی دارد که فقط عملوندش را منفی می کند. به خاطر داشته باشید که وقتی عملگر تقسیم(/) با داده های صحیح به کار برده می شود ؛ حاصل تقسیم فاقد بخش اعشاری خواهد بود.قطعه برنامه زیر عملکرد عملگرهای حسابی را نشان می دهدو تفاوت بین تقسیم اعداد صحیح و تقسیم اعداد اعشاری را بیان می کند:
    view sourceprint?

    01//demonstrate the basic arithmetic operators.
    02Class BasicMath{
    03Public static void main(string args[] )
    04//arithmetic using integers
    05System.out.println(“integer Arithmetic”);
    06Int a=1+1;
    07Int b=a*3;
    08Int c=b/4;
    09Int d=c-a;
    10Int e=-d;
    11System.out.println(“a=”+a);
    12System.out.println(“b=”+b);
    13System.out.println(“c=”+c);
    14System.out.println(“d=”+d);
    15System.out.println(“e=”+e);
    16//arithmetic using doubles
    17System.out .prinln(“\nFloating point Arithmetic”);
    18Double da=1+1;
    19Double db=da*3;
    20Double dc=db/4;
    21Double dd=dc-a;
    22Double de=-dd;
    23System.out.println(“da=”+da);
    24System.out.println(“db=”+db);
    25System.out.println(“dc=”+dc);
    26System.out.println(“dd=”+dd);
    27System.out.println(“de=”+de);
    28}
    29}


    Out put:
    Integer Arithmetic
    A=2
    B=6
    C=1
    D=-1
    E=1
    Floating point Arithmetic
    Da=2.0
    Db=6.0
    Dc=1.5
    Dd= -0.5
    De=0.5
    عملگر باقیمانده تقسیم
    عملگر باقیمانده تقسیم؛ % باقیمانده تقسیم را بر می گرداند. این عملگر را می توان هم برای اعداد اعشاری با ممیز شناور و هم برای انواع داده های صحیح به کار برد. این قطعه برنامه عملکرد این برنامه را نشان می دهد:
    view sourceprint?

    1//demonstrate the % operator
    2Class modulus{
    3Public static void main(string args[]){
    4Int x=42;
    5Double y=42.25;
    6System.out.println(“x mod 10 =”+x%10);
    7System.out.println(“y mod 10=” +y%10);
    8}
    9}


    Out put:
    X mod 10 =2
    Y mod 10 =2.25

    عملگر های تخصیص
    جاوا عملگرهای ویژه ای دارد که با استفاده از آنها می توان یک عمل حسابی را با عمل تخصیص ترکیب نمود. عباراتی چون عبارت زیر در برنامه سازی متداولند:
    view sourceprint?

    1A=a+4;
    2A +=4 ;


    در عبارت بالا از عملگر”=+” استفاده شده است. عملکرد هر دو عبارت یکسان است: مقدارa را به اندازه ۴ واحد افزایش می دهند.
    عملگرهای تخصیص برای تمام عملگرهای حسابی باینری موجودند. از این رو هر عبارت به شکل زیر
    view sourceprint?

    1Var = var op expression;


    را می توان به این صورت بازنویسی کرد:
    view sourceprint?

    1Var op=expression;


    عملگرهای تخصیص دو فایده دارند.نخست اینکه در حجم کار تایپ قدری صرفه جویی می شود؛ چرا که “فرم کوتاه” معادل خود هستند. دوم اینکه پیاده سازی آنها در سیستم زمان اجرای جاوا ؛ کارآمدتر از معادلشان است. به خاطر این دلایل اغلب این عملگرها را برنامه های حرفه ای جاوا خواهید دید.
    افزایش و کاهش
    “++” و”- -” عملگرهای افزایش و کاهش جاوا هستند.این عملگرها چند خصوصیت ویژه دارند که آنها را کاملا جذاب کرده اند.. بحث خود را با مرور دقیق عملکرد این دو عملگر آغاز می کنیم:
    عملگر افزایش ؛ یک واحد به عملوند خود می افزاید و عملگر کاهش نیز یک واحد از عملوند خود می کاهد برای مثال:
    view sourceprint?

    1X=x+1 ;


    این عبارت را می توان به این صورت نیز نوشت:
    view sourceprint?

    1X ++ ;


    برای کاهش نیز دقیقا می توان از عبارت x- -; به جای x=x – ۱; استفاده کرد.این عملگرها از این جهت می توانند به صورتpostfix (عملگر پس از عملوند قرار گیرد) و همینطور prefix(عملگر پیش از عملوند قرار گیرد) باشند؛ منحصر به فرد است. در جملاتی که دکر شد هیچ فرقی بین جملات postfix و prefix وجود ندارد اما وقتی از این عملگرها در بخشی از یک عبارت جبری استفاده کنیم؛ تفاوتهایی جزیی ولی بسیار تاثیر گذار به وجود می آید.
    در جملات جبری در فرم postfix پیش از آنکه از مقدار متغیر در جمله استفاده شود عملوند افزایش یا کاهش می یابد و در فرم prefix مقدار در جملات جبری به کار می رود و پس از آن عمل افزایش یا کاهش روی آن انجام می شود.
    مسئله خیلی ساده ای است ولی اگر به آن بی توجه ای شود نتیجه جمله جبری شما با ۱۸۰ درجه اختلاف نمایان می شود.
    (راستش خودم هم از عنوان این بحث ها خسته شدم چون توC++ هم دقیقا همین مطالب رو داشتیم اما وظیفه حکم میکند برای دوستانی که جاوا زبان اول آنها برای آموزش است ؛ مطالب رو دقیق عنوان کنم)

    عملگرهای بیتی
    جاوا چندین عملگر بیتی دارد که می توان با انواع داده های صحیحlong,int,short,char و byte به کار برد. این عملگرها بر روی یکایک بیت های عملوند خود عمل می کنند. فهرست این عملگرها را در جدول خواهیم دید:
    عملگر نتیجه - Not یکانی بیتی & And بیتی | Or بیتی ^ Xor بیتی >> شیفت به راست >>> شیفت به راست با صفر اضافی << شیفت به چپ &= And بیتی و تخصیص != Or بیتی و تخصیص ^= Xor بیتی و تخصیص >>= شیفت به راست و تخصیص >>>= شیفت به راست و تخصیص با صفر اضافی <<= شیفت به چپ و تخصیص از آنجایی که عملگرهای بیتی ؛ بیت های اعداد صحیح را پردازش و مدیریت می کنند؛ مهم است که با تاثیر این چنین پردازشها بر روی مقادیر آشنا باشیم.
    بخصوص اینکه دانستن اینکه جاوا چطور مقادیر صحیح را ذخیره می کند و چکونه اعداد منفی را نمایش می دهد؛ مفید خواهد بود بنابراین این دو موضوع را شرح خواهیم داد.
    تمام اعداد صحیح به وسیله اعداد باینری به طول متغیر نمایش داده می شوند. مثلا مقدار ۸۴ نوع byte ؛۰۰۱۰۱۰۱۰ است که ارزش مکانی هر رقم؛ توانی از ۲ است. ارزش مکانی سمت راست ترین بیت؛ ۲۰ است. ارزش مکانی بیت سمت چپ آن ۲۱ یا ۲ است و این عملیات به همین صورت ادامه خواهد یافت پس برای مثال در مورد عدد صفر و یک بالا این عملیات را برای تبدیل آن از حالت باینری به دسیمال انجام خواهیم داد:
    ۰*۲۰+۰*۲۱+۱*۲۲+۰*۲۳+۱*۲۴+۰*۲۵+۱ *۲۶+۰*۲۷=۰+۰+۴+۰+۱۶+۰+۶۴=۸۴​
    انواع داده های صحیح ؛ (به غیر از char ) اعداد صحیح علامت دار هستند یعنی نمایانگر مقادیر مثبت و منفی هستند. جاوا از نوعی روش رمز گذاری به نام”مکمل ۲ ” استفاده می کند که در آن اعداد منفی از طریق معکوس کردن تمام بیت ها( تبدیل یک ها به صفر و بالعکس) و سپس افزودن یک واحد به حاصل ؛ نمایش داده می شوند. برای مثال ۸۴- با معکوس کردن تمام بیت های عدد ۸۴ (یا ۰۰۱۰۱۰۱۰) که نتیجه اش ۱۱۰۱۰۱۰۱ است و سپس افزودن یک واحد به آن نمایش داده می شود(یعنی ۱۱۰۱۰۱۱۰). برای رمزگشایی هر عدد منفی نخست تمام بیت ها را معکوس کنید و سپس یک واحد به نتیجه آن بیفزایید.
    چنانچه مسئله “zero crossing” را در نظر بگیرید درک دلیل استفاده جاوا(و اکثر زبانهای دیگر)از مکمل ۲ آسان می شود. با فرض اینکه صفر از نوع byte است؛ نمایش باینری آن به صورت۰۰۰۰۰۰۰۰ می شود . در روش مکمل ۱ نتیجه معکوس کردن بیت ها؛ ۱۱۱۱۱۱۱۱است که نمایانگر صر منفی است. مشکل اینجاست که صفر منفی در ریاضیات بی مفهوم است. این مشکل با استفاده از مکمل ۲ برای نمایش مقادیر منفی حل می شود. وقتی از مکمل ۲ استفاده می کنید یک واحد به نتیجه معکوس شده اضافه می گردد که نتیجه آن۱۰۰۰۰۰۰۰۰ می شود. این کار سبس یک شدن بیت منتهی الیه سمت چپ می شود که در داده های نوع بایت جایی نخواهد داشت و بنابراین رفتار مورد نظر حاصل شده و ۰- همان ۰ استو ۱۱۱۱۱۱۱۱ مقدار رمزگذاری شده ۱- خواهد بود.

    عملگرهای منطقی بیتی
    این عملگرها را در جدول زیر خواهید دید:
    -A​
    A^B​
    A&B​
    A|B​
    B​
    A​
    1​
    0​
    0​
    0​
    0​
    0​
    0​
    1​
    0​
    1​
    0​
    1​
    1​
    1​
    0​
    1​
    1​
    0​
    0​
    0​
    1​
    1​
    1​
    1​
    NOT بیتی
    عملگر یگانی (~)NOT1 که مکمل بیتیbitwise complement نیز نامیده می شود؛تمام بیت های عملوند خود را معکوس می کند.
    AND بیتی
    چنانچه هر دو طرف عملوند عملگر AND(&) یک باشد؛ حاصل نیز یک خواهد بود در غیر این صورت در تمام حالات دیگر؛ صفر است.
    OR بیتی
    عملگر OR(|) اگر تنها یکی از عملوند هایش یک باشد؛ حاصل یک خواهد داشت در غیر این صورت صفر است.
    XOR بیتی
    عملگر XOR(^) در صورتی که عملوند هایش هر دو مشابه باشند مثلا هر دو صفر یا هر دو یک باشند حاصل صفر را نمایش می دهد و اگر متفاوت باشند حاصل یک را نمایش خواهد داد.
    شیفت به چپ
    عملگر شیفت به چپ(<<) تمام بیت های عملوندش را به اندازه تعداد دفعات مشخص شده به سمت چپ انتقال می دهد. برای درک بهتر با یک مثال توضیح می دهم:
    عدد مورد نظر: ۶۴
    تبدیل عدد از حالت دسیمال به باینری: ۰۰۰۰۰۰۰۱
    ۰۰۰۰۰۰۰۱<<2​
    یعنی می خواهیم حالت باینری عدد ۶۴ را۲ بار به چپ shift یا انتقال بدهیم:
    ۰۱۰۰۰۰۰۰​
    ۱۰۰۰۰۰۰۰​
    وقتی مقادیر نوع byte وshort را شیفت می دهید؛ عمل ارتقاء خودکار جاوا منجر به تولید نتایج غیر منتظره می شود. همانگونه که می دانید؛ وقتی یک جمله جبری ارزیابی می شود؛ مقادیر نوع byte و short به نوعint ارتقاء می یابند.علاوه بر آن نتیجه یک چنین جمله ای نیزint خواهد شد. این بدین معناست که نتیجه شیفت به چپ در مقادیر byteو short ؛int می شودو بیت های شیفت شده هم تازمانی که از موقعیت ۳۱ ام نگذرند؛ از دست نمی روند.چون نتیجه هر شیفت چپ؛ دو برابر شدن مقدار اولیه است .برنامه سازان از این امر به عنوان یک جایگزین کارآمدتر برای ضرب در ۲ استفاده می کنند.
    شیفت به راست
    عملگر شیفت به راست(>>) تمام بیت های عملوندش را به اندازه تعداد دفعات مشخص شده به راست انتقال می دهد.وقتی مقداری را به راست شیفت می دهیم؛ آن مقدار بر ۲ تقسیم می شود و باقیمانده نادیده انگاشته می شود.
    عملگر بیتی و تخصیص
    تمام عملگرهای بیتی باینری فرم کوتاهی دارند که مشابه عملگرهای جبری است که عمل تخصیص را با عمل بیتی ترکیب می کنند. برای مثال چند عملگر بیتی و تخصیص آنها را می بینیم:
    A=a>>4 ;
    a>>= 4 ;
    a=a|b ;
    a|=b ;
    عملگر های رابطه ای
    عملگر های رابطه ای relational رابطه یک عملوند را نسبت به یک عملوند دیگرش مشخص می کند. این عملگرها تساوی و ترتیب عملوند ها را تعیین می کند:
    عملگر نتیجه == مساوی است با =! مخالف است با > بزرگتر از < کوچکتر از >= بزرگتر یا مساوی با <= کوچکتر یا مساوی با نتیجه این عملیات یک مقدار بولی است. عملگر های رابطه ای بیشتر در جملات جبری که عبارت if را کنترل می کنند و همین طور در حلقه های گوناگون به کار برده می شود.
    اگر تجربه کار با C/C++ را دارید؛ لطفا به نکته زیر دقت کنید. انواع عبارات زیر در C/C++ بسیار متداولند:
    view sourceprint?

    1Int done;
    2//…
    3If(!done) … //valid in C/C++
    4If(done) … // but not in java.


    عبارت بالا در جاوا اینگونه نوشته می شود:
    view sourceprint?

    1If(done==0)… //this is java style.
    2If(done != 0) … //


    دلیل این امر آن است که تعریفtrue و false در جاوا همچون C/C++ نیست.true در C/C++ ؛ هر مقدار مخالف صفر است و false نشانگر مقدار صفر. True و false در جاوا مقادیر غیر عددی هستند که ارتباطی با صفر و غیر صفر ندارند. بنابراین برای مقایسه با صفر و غیر صفر؛ باید از یک یا چند عملگر رابطه ای استفاده کنید.

    عملگرهای منطقی بیتی
    این عملوند ها تنها برای نوع Boolean قابل استفاده هستند. تمام عملگرهای منطقی بولی دو مفدار نوع Boolean را با هم ترکیب می کنند تا نتیجه یک مقدار نوعboolean شود.
    عملگر نتیجه & ANDمنطقی | OR منطقی ^ XOR منطقی || OR اتصال کوتاه && AND اتصال کوتاه ! NOT یگانی منطقی &= AND و تخصیص |= OR و تخصیص ^= XOR و تخصیص == مساوی است با != مخالف است با ?: If-then-else سه تایی عملکرد عملگرهای بولی منطقی(&,|,^) بر روی مقادیر بولی همچون عملکردشان بر روی بیت های یک عدد صحیح است. عملگر منطقی “!” وضعیت بولی را معکوس می کند: !true=false و !false=true نتایج را در جدول زیر می بینیم:
    !A​
    A^B​
    A&B​
    A|B​
    B​
    A​
    true​
    false​
    false​
    false​
    false​
    False​
    false​
    true​
    false​
    true​
    false​
    True​
    true​
    true​
    false​
    true​
    true​
    False​
    false​
    false​
    true​
    true​
    true​
    true​
    عملگرهای منطقی اتصال کوتاه
    جاوا دو عملگر بولی جالب دارد که در بسیاری از زبانهای کامپیوتری دیگر وجود ندارد. این عملگر ها؛ نگارشهای ثانویه دو عملگر AND و OR بولی هستند و تحت عنوان عملگرهای منطقی”اتصال کوتاه” short-circuit شناخته شده اند. همانگونه که از جدول قسمت قبل مشخص است؛ نتیجه عملگر OR زمانی true است کهA مقدارشtrue باشد؛ صرفنظراز مقدارB .همین طور حاصل عملگر AND زمانیfalse است کهA مقدارش false باشد؛ صرفنظر از مقدارB .اگر به جای فرم های | و & این عملگرها از دو فرم || و&& استفاده کنید؛ در آن صورت چنانچه جاوا بتواند نتیجه جمله شرطی را تنها به وسیله عملوند سمت چپ تعیین کنید؛ در آن صورت دیگر عملوند سمت راست را ارزیابی نخواهد کرد. این امر برای مواقعی که عملوند سمت راستtrue یا false بودن عملوند سمت چپ وابسته باشد؛ بسیار مفید است. در مثال زیر نشان می دهیم چگونه با استفاده از ارزیابی منطقی اتصال کوتاه می توانید پیش از یک عمل تقسیم اطمینان حاصل کنید که حاصل آن درست خواهد بود یا خیر:
    view sourceprint?

    1If (denom != 0 && num/ denom >10)


    چون از فرم اتصال کوتاه AND (&&) استفاده شده است؛ احتمال بروز استثنایexception “زمان-اجر” به دلیل صفر بودن denom از بین می رود. اگر این سطر با استفاده از نگارش & عملگر AND نوشته شود؛ می بایست هر دو طرف عملگر منطقی ارزیابی می شد و در نتیجه استثنای”زمان –اجرا” در صورت صفر بودن denom پیش می آمد.
    خوب است در مواقعی که با منطق بولی سروکار دارید از فرم های اتصال کوتاهAND وOR استفاده کنید و نگارشهای تک نمادی را صرفا برای عملیات بیتی باقی بگذارید. اما این قانون استثنا هم دارد. عبارت زیر را در نظر بگیرید:
    view sourceprint?

    1If (c==1 & e++ <100) d=100;


    استفاده از& در اینجا تضمین می کند که افزایش مقدار e صرفنظر از یک بودن مقدارc انجام می شود.
    عملگر تخصیص
    عملگر تخصیص با علامت “=” نشان داده می شود. عملکرد عملگر تخصیص در جاوا همچون سایر زبانهای کامپیوتری است.
    view sourceprint?

    1Var = expression ;


    نوع داده var باید به نوع expression سازگار باشد.
    عملگر تخصیص ویژگی جالبی دارد که شاید با آن آشنا نباشید. امکان ایجاد زنجیره ای از عملیات تخصیص را فراهم می سازد. به عبارت زیر توجه کنید:
    view sourceprint?

    1Int x,y,z ;
    2X=y=z=100; // set x,y,z to 100


    دلیل میسر بودن اید ویژگی آن است که “=” عملگری است که نتیجه آن ؛ سمت راست عبارت است. از این رو مقدار z=100 ؛ ۱۰۰ است که به y تخصیص می یابد و آن نیز به نوبه خود به x تخصیص می یابد. استفاده از زنجیره تخصیص روش آسانی برای نسبت دادن یک مقدار مشترک به گروهی از متغیر ها ست.
    عملگر ?
    جاوا نوعی عملگر سه تایی ternary ویژه دارد که می تواند جانشین برخی از انواع خاص عبارتهای if-then-else شود. این عملگر؛ “?” است. ممکن است در نگاه اول این عملگر گیج کننده به نطر بیاید اما پس از تسلط یافتن بر آن می توانید به شکل موثری از آن استفاده کنیدو شکل کلی این عملگر به این صورت است:
    view sourceprint?

    1Expression 1 ? expression2: expression 3


    Expression1 میتواند هر جمله ای با حاصل نوعboolean باشد. اگر حاصل آن true باشد در آن صورت expression2 ارزیابی می شود در غیر این صورت expression3 ارزیابس می شود. نتیجه عملگر ? همان نتیجه ارزیابی جملات آن است. حاصل هر دو جملهexpression2 وexpression3 باید از یک نوع باشذ و نمی تواند void باشد. قطعه برنامه زیر کاربرد عملگر”?” را نشان می دهد.برنامه از این عملگر برای به دست آوردن قدر مطلق یک متغیر استفاده می کند:
    view sourceprint?

    01//demonstrate ?.
    02 Class Ternary{
    03Public static void main(string args[]) {
    04Int I,k ;
    05I=10;
    06K=i<0 ? –I : I ; //get absolute value of I
    07System.out.print(“Absolute value of “ );
    08System.out.println(i+”is”+k);
    09I=-10;
    10K=i<0?-i:I //get absolute value of i
    11System.out.print(“Absolute value of”);
    12System.out.println(i+”is”+k);
    13}
    14}


    Out put:
    Absolute value of 10 is 10
    Absolute value of-10 is 10
    تقدم عملگرها
    جدول زیر ترتیب اولویت ها را نشان می دهد. سطر اول شامل عملگرهایی است که عموما به آنها توجه نمی کنیم. عملگرهایی مانند (),[],(.) این موارد را جداساز می نامیم اما عملکرد آنها در جملات جبری همچون عملگرهاست. پرانتز ها برای تغیر تقدم یک عمل به کار برده می شود.[] برای امکان مشخص کردن ایندکس آرایه به کار می رود و (.) برای
    ارجاع به شی ء ها استفاده می شود.
    بالاترین


    () []

    ++ – ~ ~ * / %
    + -

    >> >>> <<
    > => < <= == !=

    &


    ^


    |


    &&


    ||


    ?:


    = Op=

    پایین ترین


    کاربرد پرانتز ها
    پرانتز ها ؛ تقدم عملیات مندرج در بین خود را افزایش می دهد. این کار اغلب برای به دست آوردن نتیجه مورد نظر ضروری است.
    a>>b+3
    در جمله بالا ابتدا ۳ واحد به b افزوده می شود و سپسa به اندازه نتیجه حاصل به سمت راست شیفت داده می شود. این جمله را می توان با استفاده از پرانتزهای اضافی به صورت زیر بازنویسی کرد:
    a>>(b+3)
    اما اگر می خواهید ابتدا a را به اندازه طولb مرتبه شیفت دهید و سپس ۳ واحد به نتیجه آن بیفزایید اینگونه عمل کنید:
    (a>>b)+3
    پرانتز ها علاوه بر تغییر تقدم معمول یک عبارت؛ گاهی برای کمک به شفاف کردن مفهوم جملات جبری به کار برده می شوند.
    یک نکته دیگر: پرانتز ها در کل موجب کاهش کارایی برنامه تان نمی شوند بنابراین افزودن پرانتز ها برای کاهش ابهام برنامه ها؛ تاثیر منفی بر آنها نخواهد داشت.
    خوب این unit هم تموم شد. از unit آینده وارد مسائل جدی تر زبان جاوا می شیم و این مسائل را با عبارات کنترلی شروع می کنیم.