تبلیغات
پرتال فناوری اطلاعات ایران - مطالب آموزش JaVa
 
پرتال فناوری اطلاعات ایران
SKype:reza.arefan www.facebook.com/reza.arefan
درباره وبلاگ



مدیر وبلاگ : رضا عارفان
موضوعات
مطالب اخیر
پیوندهای روزانه
آمار وبلاگ
  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :

دانلود مجموعه فیلم های آموزشی برنامه نویسی به زبان جاوا (Java) . این مجموعه حاوی ۵۳ قسمت ویدئوی آموزشی به فرمت FLV است . مهمترین بخش های این ویدئو عبارتند از :

  • Installing the JDK
  • Running a Java Program
  • Variables
  • Building a Basic Calculator
  • Math Operators
  • Loops
  • Array Table
  • String
  • Graphical User Interface GUI
  • و . . .
دانلود  دانلود مستقیم : بخش اول   |   بخش دوم   |   بخش سوم 

دانلود    دانلود کمکی : بخش اول   |   بخش دوم   |   بخش سوم 

tag  حجم فایل : 330 مگابایت 




نوع مطلب : آموزش JaVa، 
برچسب ها :
لینک های مرتبط :

       نظرات
دوشنبه 28 شهریور 1390
رضا عارفان
پرانتزها حق تقدم عملیاتی را كه دربرگرفته اند ، افزایش می دهند . اینكار اغلب برای نگهداری نتیجه دلخواهتان ضروری است . بعنوان مثال ، عبارت زیر را در نظر بگیرید :

+ a >> b + 3

این عبارت ابتدا 3 را به b اضافه نموده و سپس a را مطابق آن نتیجه بطرف راست حركت می دهد. این عبارت را می توان با استفاده از پرانتزهای اضافی بصورت زیر دوباره نویسی نمود :

بقیه در ادامه مطلب ...



ادامه مطلب


نوع مطلب : آموزش JaVa، 
برچسب ها :
لینک های مرتبط :

       نظرات
جمعه 23 دی 1384
رضا عارفان
عملگر انتساب علامت تكی تساوی = می باشد . عملگر انتساب در جاوا مشابه سایر زبانهای برنامه نویسی كار می كند . شكل كلی آن بصورت زیر است :

Var = expression;

عبارت متغیر
در اینجا نوع var ( متغیر ) باید با نوع experssion ( عبارت ) سازگار باشد.
عملگر انتساب یك خصلت جالب دارد كه ممكن است با آن آشنایی نداشته باشید :
به شما امكان می دهد تا زنجیره ای از انتسابها بوجود آورید . بعنوان مثال ، این قطعه از یك برنامه را در نظر بگیرید :

+ int x/ y/ z;
+
+ x = y = z = 100; // set x/ y/ and z to 100

این قطعه از برنامه مقدار 100 را با استفاده از یك دستور در متغیرهای x، y، و z قرار می دهد . زیرا = عملگری است كه مقدار عبارت سمت راست را جذب می كند .
بنابراین مقدار Z=100 برابر 100 است كه این مقدار به y منتسب شده و نیز به x منتسب خواهد شد . استفاده از " زنجیره ای از انتسابها " یك راه آسان برای قرار ادن یك مقدار مشترك در گروهی از متغیرهاست .




نوع مطلب : آموزش JaVa، 
برچسب ها :
لینک های مرتبط :

       نظرات
سه شنبه 22 آذر 1384
رضا عارفان
این عملگرها تعیین كننده رابطه ها بین یك عملوند با عملوند دیگر هستند. بطور
مشخص ، آنها تساوی یا ترتیب بندی (ordering) را معین میكنند. عملگرهای رابطه ای
را در زیر نشان داده ایم :
نتیجه آن عملگر

مساوی با ==
نامساوی با !=
>بزرگتر از
<كوچكتر از
بزرگتر از یا مساوی با = >
كوچكتر از یا مساوی با = <

حاصل این عملیات یك مقدار boolean است . از عملگرهای رابطه ای بخصوص در
عباراتی كه دستور if و انواع دستورات حلقه ای را كنترل می كنند ، زیاد استفاده
می شوند .
هر نوعی در جاوا شامل اعداد صحیح ، ارقام اعشاری ، كاراكترها و عبارات بولی
را می توان بوسیله آزمون تساوی == و آزمون عدم تساوی != مقایسه نمود . دقت
نمایید كه در جاوا ( نظیر Cو C++و ) تساوی توسط دو علامت تساوی و نه یك علامت
نشان داده می شود . ( بیاد آورید كه علامت تكی تساوی یك عملگر انتساب است . )
عملگرهای ترتیب بندی فقط برای مقایسه انواع عددی بكار می روند . یعنی فقط
عملوندهای اعداد صحیح ، اعداد اعشاری و كاراكترها را می توان مقایسه نمود و
و تعیین كرد كه كدامیك از دیگری بزرگتر یا كوچكتر است .
گفتیم كه نتیجه تولید شده توسط یك عملگر رابطه ای ، یك مقدار boolean است .
بعنوان مثال ، كد قطعه ای زیر كاملا" معتبر است :

+ int a = 4;
+ int b = 1;
+ boolean c = a < b;

در این حالت ، جواب b اگر سابق برنامه نویسی C++/C دارید ، به نكته زیر توجه نمایید . در C++/C
این نوع از دستورات بسیار رایج است .

+ int done;
+ //...
+ if(!done ... )// Valid in C/C++
+ if(done ... )// but not in Java.

در جاوا ، آن دستورات باید بصورت زیر دوباره نویسی شوند :

+ if(done == 0 ... )// This is Java-style.
+ if(done != 0... )

علت آن است كه در جاوا صحیح و ناصحیح (true and false) مشابه C++/C تعریف
نشده است . در C++/C صحیح هر مقدار غیر صفر و ناصحیح معادل صفر است . در جاوا true
و falseو مقادیر غیرعادی هستند كه ربطی با صفر یا غیرصفر ندارند. بنابراین
برای آزمون صفر و غیر صفر، باید بطور صریح یك یا چند عملگر رابطه ای را استخدام




نوع مطلب : آموزش JaVa، 
برچسب ها :
لینک های مرتبط :

       نظرات
سه شنبه 22 آذر 1384
رضا عارفان
جاوا یك محیط عملگر غنی را فراهم كرده است . اكثر عملگرهای آن را می توان
در چهار گروه طبقه بندی نمود : حسابی arithmetic رفتار بیتی bitwise رابطه ای ralational
و منطقی logical جاوا همچنین برخی عملگرهای اضافی برای اداره
حالتهای خاص و مشخص تعریف كرده است .
نكته : اگر با C++/C آشنایی دارید ، حتما" خوشحال می شوید كه بدانید كاركرد
عملگرها در جاوا دقیقا"مشابه با C++/C است . اما همچنان تفاوتهای ظریفی
وجود دارد .

عملگرهای حسابی Arithmetic operators
عملگرهای حسابی در عبارات ریاضی استفاده می شوند و طریقه استفاده از آنها
بهمان روش جبری است . جدول بعدی فهرست عملگرهای حسابی را نشان می دهد :
|
نتیجه آن | عملگر |
|
اضافه نمودن | + | |
تفریق نمودن ( همچنین منهای یكانی ) | - | |
ضرب | * | |
تقسیم | / | |
تعیین باقیمانده | % | |
افزایش | ++ | |
انتساب اضافه نمودن | += | |
انتساب تفرق نمودن | =- | |
انتساب ضرب نمودن | *= | |
انتساب تقسیم نمودن | /= | |
انتساب تعیین باقیمانده | %= | |
كاهش | - - |

عملوندهای مربوط به عملگرهای حسابی باید از نوع عددی باشند . نمی توانید از
این عملگرها روی نوع boolean استفاده كنید ، اما روی انواع char قابل استفاده
هستند ، زیرا نوع char در جاوا بطور ضروری زیر مجموعه ای از int است .




ادامه مطلب


نوع مطلب : آموزش JaVa، 
برچسب ها :
لینک های مرتبط :

       نظرات
سه شنبه 22 آذر 1384
رضا عارفان
اكنون كه اصول اساسی شی ئ گرایی جاوا مورد بررسی قرار گرفته ، به برخی از
برنامه های واقعی جاوا نگاه خواهیم كرد. كار را با كامپایل كردن و اجرای برنامه
كوتاه زیر شروع می كنیم . خواهیم دید كه این برنامه بیشتر از حد تصور شما كار
لازم دارد .

+ /*
+ This is a simple Java program.
+ Call this file "Example.java".
+ /*
+ class Exaample {
+ // Your program begins with a call to main.)(
+ public static void main( String args [] ){
+ System.out.println( "This is a simple Java program.");
+ }
+ }

نكته : در توصیف زیرین از JDK(JAVA Developer's Kit() استاندارد استفاده شده
است كه توسط خود شركت Sun Microsystems عرضه شده است . اگر از یك محیط
توسعه یافته دیگر برای جاوا استفاده می كنید ، آنگاه باید از رویه
متفاوتی برای كامپایل كردن و اجرای برنامه استفاده كنید . در این مورد
به راهنمای كاربران كامپایلر خود مراجعه نمایید


ادامه مطلب


نوع مطلب : آموزش JaVa، 
برچسب ها :
لینک های مرتبط :

       نظرات
جمعه 8 مهر 1384
رضا عارفان
یك آرایه گروهی از متغیرهای یك نوع است كه با یك نام مشترك به آنها ارجاع
می شود . می توان آرایه ها را برای هر یك از انواع ایجاد نمود و ممكن است این
آرایه ها دارای یك یا چندین بعد باشند . برای دسترسی به یك عضو آرایه از نمایه
(index) آن آرایه استفاده می شود . آرایه ها یك وسیله مناسب برای گروه بندی
اطلاعات مرتبط با هم هستند .
نكته : اگر با Cو C++و آشنایی دارید ، آگاه باشید . آرایه ها در جاوا بطور
متفاوتی نسبت به زبانهای دیگر كار می كنند .

آرایه های یك بعدی
آرایه یك بعدی بطور ضروری فهرستی از متغیرهای یكنوع است . برای ایجاد یك
آرایه ، باید یك متغیر آرایه از نوع مورد نظرتان ایجاد كنید . فرم عمومی اعلان
یك آرایه یك بعدی بقرار زیر است :

type var-name [];

نام متغیر نوع
در اینجا type اعلان كننده نوع اصلی آرایه است . نوع اصلی تعیین كننده نوع
داده برای هر یك از اعضائ داخل در آرایه است . بنابراین ، نوع اصلی آرایه تعیین
می كند كه آرایه چه نوعی از داده را نگهداری می كند . بعنوان مثال ، در زیر
یك آرایه با نام month-days با نوع آرایه ای از عدد صحیح اعلان شده است .

+ int month_days[];

اگر چه این اعلان تثبیت می كند كه month-days یك متغیر آرایه است ، اما بطور
واقعی آرایه ای وجود ندارد . در حقیقت ، مقدار month-days برابر تهی (null)
می باشد كه یك آرایه بدون مقدار را معرفی می كند . برای پیوند دادن month-days
با یك آرایه واقعی و فیزیكی از اعداد صحیح ، باید از یك عملگر new استفاده
نموده و به month-days منتسب كنید. new یك عملگراست كه حافظه را اختصاص میدهد.
بعداnew " را با دقت بیشتری بررسی می كنیم ، اما لازم است كه هم اكنون از آن
استفاده نموده و حافظه را برای آرایه ها تخصیص دهید . فرم عمومی new آنگونه كه
برای آرایه های یك بعدی بكار می رود بقرار زیر ظاهر خواهد شد :

array-var=new type [size];

اندازه نوع متغیر آرایه
در اینجا type مشخص كننده نوع داده ای است كه تخصیص داده می شود، size مشخص
كننده تعداد اعضائ آرایه است و array-var متغیر آرایه است كه به آرایه پیوند
می یابد . یعنی برای استفاده از new در تخصیص یك آرایه ، باید نوع و تعداد
اعضایی كه تخصیص می یابند را مشخص نمایید . اعضائ آرایه كه توسط new تخصیص
می یابند بطور خودكار با مقدار صفر مقدار دهی اولیه می شوند . این مثال یك
آرایه 12 عضوی از اعداد صحیح را تخصیص داده و آنها را به month-days پیوند
می دهد .

+ month_days = new int[12];



ادامه مطلب


نوع مطلب : آموزش JaVa، 
برچسب ها :
لینک های مرتبط :

       نظرات
جمعه 8 مهر 1384
رضا عارفان
در یك برنامه جاوا ، متغیر ، اساسی ترین واحد ذخیره سازی است . یك متغیر به
وسیله تركیبی از یك شناسه ، یك نوع و یك مقدار ده اولیه اختیاری تعریف خواهد
شد . علاوه بر این ، كلیه متغیرها دارای یك قلمرو هستند كه رویت پذیری آنها را
تعریف می كند و یك زمان حیات نیز دارند. متعاقبا" این اجزائ را مورد بررسی
قرار می دهیم .

اعلان یك متغیر Declaring a variable
در جاوا كلیه متغیرها قبل از استفاده باید اعلان شوند . شكل اصلی اعلان متغیر
بقرار زیر می باشد : type identifier [=value] [/identifier[=value]...];

مقدار شناسه مقدار شناسه نوع
نوع (type) یكی از انواع اتمی جاوا یا نام یك كلاس یا رابط است . ( انواع
كلاس و رابط بعدا" بررسی خواهد شد . ) شناسه نام متغیر است . می توانید با
گذاشتن یك علامت تساوی و یك مقدار ، متغیر را مقدار دهی اولیه نمایید . در ذهن
بسپارید كه عبارت مقدار دهی اولیه باید منتج به یك مقدار از همان نوعی ( یا
سازگار با آن نوع ) كه برای متغیر مشخص شده ، گردد . برای اعلان بیش از یك نوع
مشخص شده ، از فهرست كاماهای (') جدا كننده استفاده نمایید .
در زیر مثالهایی از اعلان متغیر از انواع گوناگون را مشاهده می كنید . دقت
كنید كه برخی از آنها شامل یك مقدار دهی اولیه هستند .

+ 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; // initializes z.
+ double pi = 3.14159; // declares an approximation of pi.
+ char x = 'x'; // the variable x has the value 'x'.

شناسه هایی كه انتخاب می كنید هیچ عامل ذاتی در نام خود ندارند كه نوع آنها
را مشخص نماید . بسیاری از خوانندگان بیاد می آورند زمانی را كه FORTRAN كلیه
شناسه های از Iتا Nا را پیش تعریف نمود تا از نوع INTEGER باشند ، در حالیكه
سایر شناسه ها از نوع REAL بودند . جاوا به هر یك از شناسه های متناسب شكل گرفته
امكان اختیار هر نوع اعلان شده را داده است .

مقدار دهی اولیه پویا Dynamic intialization
اگر چه مثالهای قبلی از ثابت ها بعنوان مقدار ده اولیه استفاده كرده اند
اما جاوا امكان مقداردهی اولیه بصورت پویا را نیز فراهم آورده است . این موضوع
با استفاده از هر عبارتی كه در زمان اعلان متغیر باشد ، انجام می گیرد .
بعنوان مثال ، در زیر برنامه كوتاهی را مشاهده می كنید كه طول ضلع یك مثلث
قائم الزاویه را با داشتن طول دو ضلع مقابل محاسبه می كند :

+ // 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("Hypotenuse is " + c);
+ }
+ }

در اینجا سه متغیر محلی a، b،، c، اعلان شده اند . دو تای اولی توسط
ثابت ها مقدار دهی اولیه شده اند . اما متغیر C بصورت پویا و بر حسب طول اضلاع
مثلث قائم الزاویه ( بنابر قانون فیثاغورث ) مقدار دهی اولیه می شود . این
برنامه از یكی از روشهای توكار جاوا یعنی ()sqrt كه عضوی از كلاس Math بوده و
ریشه دوم آرگومانهای خود را محاسبه میكند استفاده كرده است . نكته كلیدی اینجا
است كه عبارت مقدار دهی اولیه ممكن است از هر یك از اجزائ معتبر در زمان مقدار
دهی اولیه ، شامل فراخوانی روشها ، سایر متغیرها یا الفاظ استفاده نماید .

قلمرو زمان حیات متغیرها
تابحال كلیه متغیرهای استفاده شده ، در زمان شروع روش ()main اعلان می شدند.
اما جاوا همچنین به متغیرها امكان می دهد تا درون یك بلوك نیز اعلام شوند .
همانطوریكه قبلا" توضیح دادیم ، یك بلوك با یك ابرو باز و یك ابرو بسته محصور
می شود : یك بلوك تعریف كننده یك قلمرو است . بدین ترتیب هر بار كه یك بلوك
جدید را شروع میكنید ، یك قلمرو جدید نیز بوجود می آورید . همانطوریكه احتمالا"
از تجربیات برنامه نویسی قبلی بیاد دارید ، یك قلمرو (scope) تعیین كننده آن
است كه چه اشیائی برای سایر بخشهای برنامه قابل رویت هستند . این قلمرو همچنین
زمان حیات (lifetime) آن اشیائ را تعیین می كند .
اكثر زبانهای كامپیوتری دو طبقه بندی از قلمروها را تعریف می كنند : سراسری
(global) و محلی (local) . اما این قلمروهای سنتی بخوبی با مدل موكد شی ئ گرایی
جاوا مطابقت ندارند . اگر چه در جاوا هم می توان مقادیری را بعنوان قلمرو
سراسری ایجاد نمود ، اما این فقط یك نوع استثنائ است و عمومیت ندارد . در جاوا
قلمرو اصلی همانهایی هستند كه توسط یك كلاس یا یك روش تعریف می شوند . حتی همین
تمایز نیز تا حدی ساختگی و مصنوعی است . اما از آنجاییكه قلمرو كلاس دارای
مشخصات و خصلتهای منحصر بفردی است كه قابل استفاده در قلمرو تعریف شده توسط
روش نیست ، این تمایز تا حدی محسوس خواهد بود . بخاطر تفاوتهای موجود ، بحث
قلمرو كلاس ( و متغیرهای اعلان شده داخل آن ) این مبحث بتعوق افتاده است . در حال
حاضر فقط قلمروهای تعریف شده توسط یك روش یا داخل یك روش را بررسی می كنیم .
قلمرو تعریف شده توسط یك روش با یك ابروی باز شروع می شود. اما اگر آن روش
دارای پارامترهایی باشد ، آنها نیز داخل قلمرو روش گنجانده خواهند شد . بعدا"
نگاه دقیقتری به پارامترها خواهیم داشت و فعلا" كافی است بدانیم كه پارامترها
مشابه هر متغیر دیگری در یك روش كار می كنند .
بعنوان یك قانون عمومی ، متغیرهای اعلان شده داخل یك قلمرو برای كدهایی كه
خارج از قلمرو تعریف می شوند ، قابل رویت نخواهند بود ( قابل دسترسی نیستند ).
بدین ترتیب ، هنگامیكه یك متغیر را درون یك قلمرو اعلان می كنید ، در حقیقت آن
متغیر را محلی دانسته و آن را در مقابل دستیابیها و تغییرات غیر مجاز محافظت
می كنید . در حقیقت ، قوانین قلمرو اساس كپسول سازی را فراهم می كنند .
قلمروها را می توان بصورت تودرتو (nesting) محفوظ داشت . بعنوان مثال ، هر
زمان یك بلوك كد ایجاد كنید ، یك قلمرو جدید تودرتو ایجاد نموده اید . هنگامیكه
این واقعه روی می دهد ، قلمرو بیرونی ، قلمرو درونی را دربرمی گیرد . این بدان
معنی است كه اشیائ اعلان شده در قلمرو بیرونی برای كدهای داخل قلمرو درونی قابل
رویت هستند اما عكس این قضیه صادق نیست . اشیائاعلان شده داخل قلمرو درونی برای
بیرون قلمرو قابل رویت نخواهند بود .
برای درك تاثیر قلمروهای تودرتو ، برناه ریز را در نظر بگیرید :

+ // Demonstrate block scope.
+ class Scope {
+ public static void main(String args[] ){
+ int x; // known to all code within main
+
+ x = 10;
+ if(x == 10 ){ // start new scope
+ int y = 20; // known only to this bock
+
+ // x and y both known here.
+ System.out.println("x and y :" + x + " " + y);
+ x = y * 2;
+ }
+ // y = 100 :// Error! y not known here
+
+ // x is still known here.
+ System.out.println("x is " + x);
+ }
+ }

همانطوریكه توضیحات نشان می دهند ، متغیر x در ابتدای قلمروی ()main اعلان
شده و برای كلیه كدهای متعاقب داخل ()main قابل دسترسی می باشد . داخل بلوك if
متغیر y اعلان شده است . از آنجاییكه یك بلوك معرف یك قلمرو است ، y فقط برای
سایر كدهای داخل بلوك خود قابل رویت است . این دلیل آن است كه خارج بلوك
مربوطه ، خط y=100 در خارج توضیح داده شده است . اگر نشانه توضیح راهنمایی را
تغییر مكان دهید ، یك خطای زمان كامپایل (compile-time error) اتفاق می افتد
چون y برای بیرون از بلوك خود قابل رویت نیست . داخل بلوك if متغیر x قابل
استفاده است زیرا كدهای داخل یك بلوك ( منظور یك قلمرو تودرتو شده است ) به
متغیرهای اعلان شده در یك قلمرو دربرگیرنده دسترسی دارند .
داخل یك بلوك ، در هر لحظه ای می توان متغیرها را اعلان نمود ، اما فقط زمانی
معتبر می شوند كه اعلان شده باشند . بدین ترتیب اگر یك متغیر را در ابتدای یك
روش اعلان می كنید، برای كلیه كدهای داخل آن روش قابل دسترس خواهد بود. بالعكس
اگر یك متغیر را در انتهای یك بلوك اعلان كنید ، هیچ فایده ای ندارد چون هیچیك
از كدها به آن دسترسی ندارند . بعنوان مثال این قطعه از برنامه غیر معتبر است
چون نمی توان از count قبل از اعلان آن استفاده نمود :

+ // This fragment is wrong!
+ count = 100; // oops! cannot use count before it is declared!
+ int count;

یك نكته مهم دیگر در اینجا وجود دارد كه باید بخاطر بسپارید: متغیرها زمانی
ایجاد می شوند كه قلمرو آن ها وارد شده باشد ، و زمانی خراب می شوند كه قلمرو
آنها ترك شده باشد . یعنی یك متغیر هربار كه خارج از قلمروش برود ، دیگر مقدار
خود را نگهداری نخواهد كرد . بنابراین ، متغیرهای اعلان شده داخل یك روش مقادیر
خود را بین فراخوانی های آن روش نگهداری نمی كنند . همچنین یك متغیر اعلان شده
داخل یك بلوك ، وقتی كه بلوك ترك شده باشد ، مقدار خود را از دست خواهد داد .
بنابراین ، زمان حیات (lifetime) یك متغیر محدود به قلمرو آن می باشد .
اگر اعلان یك متغیر شامل مقدار دهی اولیه آن باشد ، آنگاه هر زمان كه به
بلوك مربوطه وارد شویم ، آن متغیر مجددا" مقدار دهی اولیه خواهد شد . بعنوان
مثال برنامه زیر را در نظر بگیرید :

+ // 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.println("y is :" + y); // this always prints- 1
+ y = 100;
+ System.out.println("y is now :" + y);
+ }
+ }
+ }

خروجی تولید شده توسط این برنامه بقرار زیر است :

y is- :1
y is now:100
y is- :1
y is now:100
y is- :1
y is now:100

همانطوریكه مشاهده می كنید ، هر بار كه به حلقه for داخلی وارد می شویم ، y
همواره بطور مكرر مقدار اولیه 1- را اختیار می كند . اگر چه بلافاصله به این
متغیر مقدار 100 نسبت داده می شود، اما هر بار نیز مقدار خود را از دست میدهد.
و بالاخره آخرین نكته : اگر چه میتوان بلوكها را تودرتو نمود، اما نمیتوانید
متغیری را اعلان كنید كه اسم آن مشابه اسم متغیری در قلمرو بیرونی باشد. از این
نظر جاوا با زبانهای Cو C++و متفاوت است . در زیر مثالی را مشاهده می كنید كه
در آن تلاش شده تا دو متغیر جدا از هم با اسم اعلان شوند . در جاوا اینكار مجاز
نیست . در Cو C++و این امر مجاز بوده و دو bar كاملا" جدا خواهند ماند .

+ // 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!
+ }
+ }
+ }


تبدیل خودكار و تبدیل غیر خودكار انواع
اگر تجربه قبلی برنامه نویسی داشته اید ، پس می دانید كه كاملا" طبیعی است كه
مقداری از یك نوع را به متغیری از نوع دیگر نسبت دهیم . اگر این دو نوع سازگار
باشند ، آنگاه جاوا بطور خودكار این تبدیل (conversion) را انجام می دهد .
بعنوان مثال ، همواره امكان دارد كه مقدار int را به یك متغیر long نسبت داد .
اما همه انواع با یكدیگر سازگاری ندارند ، بنابراین هر گونه تبدیل انواع مجاز
نخواهد بود . بعنوان نمونه ، هیچ تبدیلی از doubleبه byte تعریف نشده است .
خوشبختانه ، امكان انجام تبدیلات بین انواع غیر سازگار هم وجود دارد . برای
انجام اینكار ، باید از تبدیل cast استفاده كنید كه امكان یك تبدیل صریح بین
انواع غیر سازگار را بوجود می آورد . اجازه دهید تا نگاه دقیقتری به تبدیل
خودكار انواع و تبدیل cast داشته باشیم .

تبدیل خودكار در جاوا Java's Automatic conyersions
هنگامیكه یك نوع داده به یك متغیر از نوع دیگر نسبت داده می شود ، اگر دو
شرط زیر فراهم باشد ، یك تبدیل خودكار نوع انجام خواهد شد :
ؤ دو نوع با یكدیگر سازگار باشند .
ؤ نوع مقصد بزرگتر از نوع منبع باشد .
هنگامیكه این دو شرط برقرار باشد ، یك تبدیل پهن كننده (widening) اتفاق
می افتد . برای مثال نوع int همواره باندازه كافی بزرگ است تا كلیه مقادیر
معتبر byte را دربرگیرد، بنابراین نیازی به دستور صریح تبدیل cast وجود ندارد.
در تبدیلات پهن كننده ، انواع رقمی شامل انواع عدد صحیح و عدد اعشاری با هر
یك از انواع سازگاری دارند . اما انواع رقمی با انواع charو booleanو سازگار
نیستند . همچنین انواع charو booleanو با یكدیگر سازگار نیستند .
همانطوریكه قبلا" ذكر شد ، جاوا هنگام ذخیره سازی یك ثابت عدد صحیح لفظی
(Literal integer constant) به متغیرهای از انواع byte، short،و longو ، یك
تبدیل خودكار نوع را انجام می دهد .

تبدیل غیر خودكار انواع ناسازگار
اگر چه تبدیلات خودكار انواع بسیار سودمند هستند ، اما جوابگوی همه نیازها
نیستند . بعنوان مثال ، ممكن است بخواهید یك مقدار int را به یك متغیر byte
نسبت دهید. این تبدیل بطور خودكار انجام نمی گیرد، زیرا یك byteاز intز كوچكتر
است .این نوع خاص از تبدیلات را گاهی تبدیل باریك كننده (narrowing conversions)
می نامند ، زیرا بطور صریح مقدار را آنقدر باریك تر و كم عرض تر می كنید تا با
نوع هدف سازگاری یابد .
برای ایجاد یك تبدیل بین دو نوع ناسازگار ، باید از cast استفاده نمایید . cast
یك تبدیل نوع كاملا" صریح است . شكل عمومی آن بقرار زیر می باشد : ( target - type )value

نوع نوع مقصد یا هدف
در اینجا نوع هدف ، همان نوعی است كه مایلیم مقدار مشخص شده را به آن تبدیل
كنیم . بعنوان مثال ، قطعه زیر از یك برنامه تبدیل غیر خودكار از intبه byte
را اجرا می كند . اگر مقدار integer بزرگتر از دامنه یك byte باشد ، این مقدار
به مدول ( باقیمانده تقسیم یك integer بر دامنه ) byte كاهش خواهد یافت . + int a;
+ byte b;
+ //...
+ b =( byte )a;

هر گاه كه یك مقدار اعشاری به یك عدد صحیح نسبت داده شود ، شكل دیگری از
تبدیل اتفاق می افتد : بریدن ، truncation . همانطوریكه می دانید ، اعداد صحیح
دارای قسمت اعشاری نیستند . بنابراین هنگامیكه یك مقدار اعشاری به یك نوع عدد
صحیح نسبت داده می شود ، جزئ اعشاری از بین خواهد رفت ( بریده خواهد شد ) .
بعنوان مثال ، اگر مقدار 1.23 را به یك عدد صحیح نسبت دهیم ، مقدار حاصله فقط
عدد 1 می باشد . مقدار 0.23 بریده (truncated) خواهد شد . البته اگر اندازه
اجزائ عدد كلی آنچنان بزرگ باشد كه در نوع عدد صحیح مقصد نگنجد ، آنگاه مقدار
فوق به مدول دامنه نوع هدف كاهش خواهد یافت .
برنامه زیر نشان دهنده برخی از تبدیلات انواع است كه مستلزم تبدیل cast
می باشند :

+ // Demonstrate casts.
+ class Conversion {
+ public static void main(String args[] ){
+ bytt 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 " + d + " " + i);
+
+ System.out.println("\nConversion of double to byte.");
+ b =( byte )d;
+ System.out/println("d and b " + d + " " + b);
+ }
+ }

خروجی این برنامه بقرار زیر می باشد :

Conversion of int to byte.
i and b 257 1

Conversion of double to int.
d and i 323.142 323

Conversion of double to byte.
d and b 323.142 67





نوع مطلب : آموزش JaVa، 
برچسب ها :
لینک های مرتبط :

       نظرات
چهارشنبه 6 مهر 1384
رضا عارفان

اعداد اعشاری یا همان اعداد حقیقی برای ارزش گذاری عبارتهایی كه نیازمند
دقت بیشتری هستند ، استفاده می شوند . بعنوان نمونه ، محاسباتی نظیر ریشه دوم
و محاسبات مثلثاتی نظیر سینوس و كسینوس منجربه جوابهایی می شوند كه برای تعیین
دقت آن نیاز به نوع عدد اعشاری می باشد . جاوا یك مجموعه استاندارد (
IEEE-754
)
از انواع عدد اعشاری و عملگرها را پیاده سازی می كند. دو نوع عدد اعشاری تعریف
شده یعنی
floatو doubleو هستند كه بترتیب معرف دقت معمولی و مضاعف می باشند .
پهنا و دامنه آنها را در زیر نشان داده ایم :
دامنه پهنا بر حسب تعداد بیت نام
double 64 1.7e-308 to 1.7e+308

float 32 3.4e-038 to 3.4e+038

هر یك از انواع اعشاری را متعاقبا" مورد بررسی قرار می دهیم .
float

این نوع مشخص كننده یك مقدار با دقت معمولی بوده كه از 32 بایت حافظه
استفاده می كند . دقت معمول روی بعضی پردازنده ها سریعتر بوده و نسبت به دقت
مضاعف نیمی از فضا را اشغال می كند ، اما هنگامیكه مقادیر خیلی بزرگ یا خیلی
كوچك باشند ، دقت خود را از دست میدهد . متغیرهای نوع
float برای زمانی مناسب
هستند كه از یك عضو كسری استفاده می كنید اما نیازی به دقت خیلی زیاد ندارید .
بعنوان مثال ، نوع
float برای معرفی دلار و سنت بسیار مناسب است . + float hightemp/ lowtemp;

double

دقت مضاعف كه با واژه كلیدی
double معین می شود برای ذخیره كردن یك مقدار 64
بیت فضا را اشغال می كند . دقت مضاعف روی برخی پردازنده های جدید كه برای
محاسبات ریاضی با سرعت زیاد بهینه شده اند ، واقعا" سریعتر از دقت معمولی عمل
می كند . كلیه توابع مثلثاتی نظیر ()
sin ، ()cos و ()sqrt مقادیر مضاعف را
برمی گردانند . هنگام اجرای محاسبات مكرر كه نیاز به حفظ دقت دارید و یا هنگام
كار با ارقام خیلی بزرگ
double بهترین انتخاب است .
در زیر برنامه ای را مشاهده می كنید كه از
double استفاده نمود تا محیط یك
دایره را محاسبه كند :

+ // Compute the area of a circle.
+ class Area {
+ public static void main(String args[] ){
+ double pi/ r/ a;
+
+ r = 10.8; // radius of circle
+ pi = 3.1416; // pi/ approximately
+ a = pi * r * r; // compute area
+
+ System.out.println("Area of circle is " + a);
+ }
+ }

كاراكترها
در جاوا از نوع داده
char
برای ذخیره كردن كاراكترها استفاده می شود . اما
برنامه نویسان
Cو C++و آگاه باشند كه char در جاوا مشابه char در زبانهای C و C++
نیست . در زبانهای
Cو C++و ، نوع char یك نوع عدد صحیح با پهنای 8 بیت
است . اما جاوا متفاوت عمل می كند . جاوا از كدهای جهانی (
unicode) برای معرفی
كاراكترها استفاده می كند . كدهای جهانی یك مجموعه كاملا" جهانی از كاراكترها
هستند كه می توانند همه كاراكترها را معرفی نمایند . این مجموعه شامل دهها
مجموعه كوچك تر كاراكتری نظیر
Latin، Greek،، Arabic،، Cyrillic،، Hebrew، Katakana
،
Hangul، و امثال آن است .
برای این منظور ، 16 بیت مورد نیاز است . بنابراین
char در جاوا یك نوع 16
بیتی است . دامنه
charاز 0ز تا 65/536 می باشد . در نوع char مقدار منفی وجود
ندارد . مجموعه استاندارد كاراكترها موسوم به
ASCII همچون گذشته دارای دامنه
از 0 تا 127 و مجموعه كاراكترهای 8 بیتی توسعه یافته موسوم به
lso-Latin-1
دارای دامنه از 0 تا 255 می باشند .
چون در جاوا امكان نوشتن ریز برنامه ها برای كاربری جهانی وجود دارد ، بنظر
می رسد كه بهتر است جاوا از كدهای جهانی برای معرفی كاراكترها استفاده نماید .
البته بكار بردن كدهای جهانی درمورد زبانهایی نظیر انگلیسی ،آلمانی ،اسپانیایی
یا فرانسوی كه كاراكترهای آنها را می توان براحتی داخل 8 بیت جای داد ، تا حدی
سبب نزول كارآیی خواهد شد . اما این بهایی است كه برای رسیدن به قابلیت حمل
جهانی در برنامه ها باید پرداخت .
نكته : اطلاعات بیشتر درباره كدهای جهانی را در آدرسهای وب زیر پیدا خواهید
نمود :
http://www .unicode .org
http://www .stonehand .com/unicode .html


در زیر برنامه ای را مشاهده می كنید كه متغیرهای
char را نشان می دهد :

+ // Demonstrate char data type.
+ class CharDemo {
+ public static void main(String args[] ){
+ char ch1/ ch2;
+
+ ch1 = 88; // code for X
+ ch2 = 'Y';
+
+ System.out.print("ch1 and ch2 :");
+ System.out.println(ch1 + " " + ch2);
+ }
+ }

این برنامه خروجی زیر را نشان خواهد داد : ch1 and ch2 :xy

دقت كنید كه مقدار 88به
ch1 نسبت داده شده ، كه مقدار متناظر با حرف x در
كد
ASCII ( و كد جهانی ) است . قبلا" هم گفتیم كه مجموعه كاراكتری ASCII َ127
مقدار اولیه در مجموعه كاراكتری كدهای جهانی را اشغال كرده است . بهمین دلیل
كلیه فوت و فنهای قدیمی كه قبلا" با كاراكترها پیاده كرده اید ، در جاوا نیز به
خوبی جواب می دهند .
اگر چه انواع
char عدد صحیح محسوب نمی شوند ، اما در بسیاری از شرایط
می توانید مشابه عدد صحیح با آنها رفتار كنید . بدین ترتیب قادرید دو كاراكتر
را با هم جمع نموده و یا اینكه مقدار یك متغیر كاركتری را كاهش دهید . بعنوان
مثال ، برنامه زیر را در نظر بگیرید :

+ // char variables behave like integers.
+ class CharDemo2 {
+ public static void main(String args[] ){
+ char ch1;
+
+ ch1 = 'X';
+ System.out.println("ch1 contains " + ch1);
+
+ ch1++; // increment ch1
+ System.out.println("ch1 is now " + ch1);
+ }
+ }

خروجی این برنامه بشرح زیر خواهد بود : ch1 contains x
ch1 is now y

در برنامه ابتدا مقدار xبه ch1 داده میشود . سپس ch1 افزایش می یابد . این
روال باعث می شود تا ch1 حرف y را اختیار كند، كه كاراكتر بعدی در ترتیب ASCII
(
و كدهای جهانی ) می باشد .
Boolean

جاوا یك نوع ساده موسوم به boolean برای مقادیر منطقی دارد . این نوع فقط
یكی از مقادیر ممكن trueیا falseا را اختیار می كند . این نوعی است كه توسط
كلیه عملگرهای رابطه ای نظیر b
شرطی كه دستورهای كنترلی نظیر ifو forو را مدیریت می كنند ، استفاده می شود .
در زیر برنامه ای مشاهده می كنید كه نوع boolean را نشان می دهد :

+ // Demonstrate boolean values.
+ class BoolTest {
+ public static void main(String args[] ){
+ boolean b;
+
+ b = false;
+ System.out.println("b is " + b);
+ b = true;
+ System.out.println("b is " + b);
+
+ // a boolean value can control the if statement
+ if(b )System.out.println("This is executed.");
+
+ b = false;
+ if(b )System.out.println("This is not executed.");
+
+ // outcome of a relational operator is a boolean value
+ System.out.println("10 > 9 is " +( 10 > 9));
+ }
+ }

خروجی برنامه فوق بقرار زیر خواهد بود :

b is false
b is true
This is executed.
10>9 is true

درباره این برنامه سه نكته جالب توجه وجود دارد . اول اینكه وقتی كه مقدار boolean
توسط ()println خارج می شود ، می بینید كه "true"یا "false"ا بنمایش
درمی آید . دوم اینكه یك متغیر boolean بتنهایی برای كنترل دستور if كفایت
می كند . دیگر نیازی به نوشتن یك دستور if بقرار زیر نخواهد بود : + if(b == true... )

سوم اینكه ، پی آمد یك عملگر رابطه ای نظیربولین یک مقدار است .





نوع مطلب : آموزش JaVa، 
برچسب ها :
لینک های مرتبط :

       نظرات
چهارشنبه 6 مهر 1384
رضا عارفان
جاوا چهار نوع عدد صحیح تعریف می كند : byte، short،، int،، long، . كلیه
این اعداد دارای علامات مثبت و منفی هستند . جاوا از اعداد صحیح غیر علامت دار و
فقط مثبت پشتیبانی نمی كند . بسیاری از زبانهای برنامه نویسی شامل Cو C++و هم
از اعداد صحیح علامت دار و هم از اعداد صحیح فاقد علامت پشتیبانی می كنند . اما
طراحان جاوا احساس می كردند كه اعداد صحیح فاقد علامت غیر ضروری است . بویژه
آنها احساس كردند كه مفهوم فاقد علامت (unsigned) بیشتر برای مشخص كردن رفتار
بیت بالاتر از حد مجاز (high-order bit) استفاده می شود كه علامت یك int را
هنگامیكه بعنوان یك رقم عنوان می شود ، مشخص می كند . بعدا" خواهید دید كه
جاوا مفهوم بیت بالاتر از حد مجاز (high-order bit) را بگونه ای متفاوت مدیریت
می كند ، یعنی با اضافه كردن یك عملگر ویژه حركت به راست فاقد علامت unsigned)
(right shift . بدین ترتیب نیاز به یك نوع عدد صحیح فاقد علامت منتفی شده است .
پهنای (widit) یك نوع عدد صحیح را نباید با میزان حافظه ای كه مصرف می كند
اشتباه گرفت ، بلكه نشانه رفتاری است كه برای متغیرها و عبارات آن نوع تعریف
می شود . محیط حین اجرای جاوا از هر اندازه ای كه نیاز داشته باشد ، استفاده
می كند ، البته تا آن اندازه ای كه انواع براساس اعلام قبلی شما رفتار كنند . در
حقیقت ، حداقل یك پیاده سازی byte وجود دارد كه ، short را بعنوان مقادیر 32
بیتی ذخیره می كند تا عملكرد را توسعه دهد. زیرا آنچه درحال حاضر مورد استفاده
قرار می گیرد ، اندازه كلمه (word size) اكثر كامپیوترهاست .
پهنا و دامنه این انواع اعداد صحیح همانطوریكه در جدول زیر مشاهده می كنید
طیف وسیعی دارند :
دامنه پهنا نام
long 64- 9/ 223/ 372/ 036/ 845/ 775/ 808 to 9/ 223/ 372
/036/ 854/ 775/ 807
int 32- 2/ 147/ 483/ 648 to 2/ 147/ 483/ 647
short 16- 32/ 768 to 32/ 767
byte 8- 128 to 127

اكنون نگاه دقیقتری به هر یك از انواع عدد صحیح خواهیم داشت .
byte

كوچكترین نوع عدد صحیح byte است . این یك نوع علامت دار 8 بیتی است كه دامنه
آن از 128- تا 127 می باشد . متغیرهای نوع byte بویژه هنگامیكه با یك جریان
داده از یك شبكه یا یك فایل كار میكنید ، سودمند خواهند بود . همچنین هنگامیكه
با داده دودویی ( باینری ) خام مشغول كار هستید كه ممكن است بطور مستقیم با
سایر انواع توكار جاوا سازگاری نداشته باشند ، بسیار سودمند هستند .
متغیرهای byte را با استفاده از واژه كلیدی byte اعلام می كنیم . بعنوان
مثال ، در زیر دو متغیر byte با اسامی bو cو را اعلام كرده ایم : + byte b/ c;

short

یك نوع 16 بیتی علامت داراست . دامنه آن از 768 32/- تا 767 32/ است . short
در اصل كم استفاده ترین نوع در جاوا می باشد ، چون طوری تعریف شده كه بایت بالای
آن اول می آید ( آن را big-endian format میگویند ). این نوع برای كامپیوترهای 16
بیتی كه بسرعت از رده خارج شده اند ، كاربری دارد .
در زیر مثالهایی از چگونگی اعلان متغیرهای short را مشاهده می كنید : + short s;
+ short t;

نكته : Endiannes توصیف كننده چگونگی ذخیره شدن انواع داده چند بایتی short int
و longو در حافظه است . اگر 2 بایت برای معرفی یك نوع short استفاده
شود ، آن بایتی كه ابتدا قرار می گیرد ( مهمترین یا كم اهمیت ترین ? )
می گوید كه یك ماشین big-endian است ، بدان معنی كه مهمترین بایت اول
آمده و بعد از آن بایت كم اهمیت تر قرار دارد . ماشینهایی نظیر SPARC و power pc
از نوع big-endian و ماشینهای سری lntelx86نوع little-endianع
هستند .
int

رایجترین نوع عدد صحیح int است . این یك نوع 32 بیتی علامت دار است كه دامنه
آن از 2/147/483/648- تا 2/147/483/647 گسترده است . علاوه بر كاربردهای دیگر
متغیرهای از نوع int برای كنترل حلقه ها و نمایه سازی آرایه ها مورد استفاده قرار
می گیرند . هر بار كه یك عبارت عدد صحیح شامل byte، short،و intو و ارقام لفظی
(literal) داشته باشید، كل عبارت قبل از انجام محاسبات به int ارتقائ می یابد.
نوع int روان ترین و كاراترین نوع است و اكثر اوقات هنگامیكه میخواهید رقمی
را برای شمارش یا نمایه سازی آرایه ها یا انجام محاسبات عدد صحیح بوجود آورید
باید از آن استفاده نمایید . شاید بنظر آید كه استفاده از انواع shortو byteو
سبب صرفه جویی در فضا شود ، اما هیچ تضمینی وجود ندارد كه جاوا این انواع را
بطرق داخلی به int ارتقائ ندهد . همواره بیاد داشته باشید كه نوع ، مشخص كننده
رفتار است نه اندازه . ( تنها استثنائ در این مورد، آرایه است كه در آنجا byte
بصورت تضمینی برای هر عضو آرایه فقط یك بایت ، short دو بایت و int از چهار
بایت استفاده می كند . )
long

یك نوع 64 بیتی علامت دار است و برای مواردی مفید است كه یك نوع int طول
كافی برای دربرگرفتن مقدار مورد نظر نداشته باشد. دامنه long كاملا" وسیع است .
این نوع ، برای كار با اعداد خیلی بزرگ مناسب است . بعنوان مثال ، در زیر
برنامه ای را مشاهده می كنید كه مسافت طی شده توسط نور در تعداد مشخص روز را بر
حسب مایل محاسبه می كند .

+ // 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 = 86000;
+
+ days = 1000; // specify number of days here
+
+ seconds = days * 24 * 60 * 60; // convert to seconds
+
+ distance = lightspeed * seconds; // compute distance
+
+ System.out.print("In " + days);
+ System.out.print(" days light will travel about ");
+ System.out.println(distance + " miles .");
+ }
+ }

خروجی این برنامه بقرار زیر خواهد بود : ln 1000 days light will travel about 4730400000000 miles.




نوع مطلب : آموزش JaVa، 
برچسب ها :
لینک های مرتبط :

       نظرات
شنبه 2 مهر 1384
رضا عارفان


( کل صفحات : 2 )    1   2