آموزش جاوا
کتابی که براتون لینکشو می گذارم آموزش برنامه نویس جاوا می باشد که این کتاب فارسی بوده و راهنمای بسیار خوبی برای یادگیری جاوا هست.دانلود کنید و لذت ببرید.
لینک دانلود: آموزش جاوا
جاوا و تعامل مستقیم
حتما تا بحال از سایت ها و مقالات آموزشی متعدد تاریخچه ی جاوا رو میدانید برای همین به تاریخچه و دیگر موضوعات نمی پردازم و فقط به این موضوع اشاره میکنم که خالق زبان برنامه نویسی جاوا جیمز گوسلینگ بوده و این پروژه به صورت مجانی و آپن سورس تحت لیسانس شرکت سان در میاد توسط افراد مختلف در سراسر دنیا توسعه پیدا میکنه و به شکل امروزی میرسد .
اما خود جاوا فقط زبان برنامه نویسی و سینتکس نیست (بر خلاف مفهوم زبان های برنامه نویسی مایکروسافتی که در آن ها زبان بهانه بود ولی اصل چیزی که ارائه میشد 32 بیت بود) بلکه یک پلتفورمه که اوین کاری که میکنه اینه که بستری بر روی سستم عامل اجرا میکنه که شما را دیگه وابسته به یک سیستم عامل خاص نمیکنه. شما فکر کنید یک برنامه در محیط ویندوز مینویسید و میتونید حتنی در محیط یونیکس و سولاریس هم اجراش کنید. این اولین لذت کار با جاوا میباسد . (که شاید اکثر افراد بدونن)
اما ویژگی بعدی جاوا پیاده سازی شی گرایی خالص بدون پیچیدگی و د گی شدن با مفاهیم خاص میباشد. زبان برنامه نویسی جاوا به شکلی ساخته شده که در صورتی که شما ذهنیت شی گر نداشته باشید نمیتوانید حتی یک برنامه کوچک ماشین حساب هم بنویسید .
اما مفاهیم جاوا و کد نویسی در زمره این عظیم تکنولوژی به سه بخش عمده تقسیم میشه که عبارتند از :
1-برنامه نویسی Desktop Application : در این بخش که ممکنه بیشتر از هر بخش دیگه ای با هاش آشنا باشید شما میتوانید برنامه های ویندوزی و گرافیکی بنویسید . در این بخش شما به یک کتابخانه وسیع با بیش از هزاران ای پی آی دسترسی خواهید داشت و توانایی نوشتن هر گونه نرم افزار برای اجرا بر روی پی سی خانگی را خواهید داشت و از نوشتن بازی های گرافیکی دو بعدی گرفته تا برنامه های دیتا بیسی همگی در ویژگ این برنامه ها نهفته می باشد. این بخش از برنامه نویسی برای جاوا رو J2SE یا Java 2 Platform Standard Edition مینامند . که شامل کتا بخانه هایی چون Swing,AWT,J2D,JNI,.... میباشد.
2-برنامه نویسی تحت سرور : در این بخش که پر کراربرد ترین و گران ترین و جالب ترین بخش های برنامه نویسی جاوا ست شما توانایی نوشتن برنامه برای یک شبکه و کلا یک سرور را خواهید داشت. این بخش جاوا صرفا شامل برنامه نویسی تحت وب و HTTP نمیباشد بلکه مخصوص برنامه نویسی برای شبکه های بزرگ نیز میباشد. اکثر پروژه های بزرگ مثل اتوماسیون ها وزرات خانه های دولتی ، ارتش ، وزارت اطلاعات و یا کتابخانه ملی و ... را با این بخش از جاوا مینویسند. مفاهیم بخش های مختلف این قسم برنامه نویسی جاوا به قدری زیاد و گسترده است که شاید شما را به قدری گیج کنه که از کلا هر چی برنامه نویسی سیر بشید ولی اگه وقت بذارید و از چند نفر کار بلد هم کمک بگیرید متوجه خواهید شد که گنج واقعه ای همین کنار دستتون بوده و شما تو ماکروسافت دنبالش میگشتید.
همین قدر بگم که این بخش از جاوا تنها میان افزاری هست که بطور کامل استاندارد ها برنامه نویسی تحت شبکه و سرور رو در خودش جای داده و اصولا برای پروژه هاییی ک توسط اون انجام میشه بودجه های میلیاردی در نظر گرفته میشه. و فقط همین ق در بدونید بزرگترین تولد کننده نرم افزار جهان و پول دار ترین آن ها (یعنی اوراکل) داره از روی کار بر همین بخش جاوا پول در میاره و بهتره بدونید که سرمایه ای که برای یکی از پروژه های کوچک گرفته بودند چیزی حدود به نصف بودجه جمهوری اسلامی ایران بوده.
(منظورم از اورکل دیتا بیس اون نیست بلکه منظورم Application Server اون و بخش توسعه اپلیکیشن سرورشه).
این بخش از برنامه نویسی جاوا رو J2EE یا Java 2 Enterprise Edition مینامند که در این بخش بیشتر راجع بهش حرف میزنیم.
3- برنامه نویسی موبایل : در این بخش شما میتونید برای موبایل و دیگر سخت افزار های مشابه اون برنامه بنویسید (هادی جان در باره این بخش جاوا اطلاعات زیادی دارند.) . این بخش از برنامه نویسی جاوا دارای کتابخانه های مختلف برای گرافیک در جاوا ابزار و کنترل های جاوا و ابزار جانبی چون بلوتوس و یا انفرارد و ..... را داراست .
جاوا (به انگلیسی: Java) یک زبان برنامهنویسی شئگراست که برای اولین بار توسط جیمز گوسلینگ در شرکت سان مایکروسیستمز ایجاد شد و در سال ۱۹۹۵ به عنوان بخشی از سکوی جاوا منتشر شد. زبان جاوا شبیه به ++C است اما مدل شیءگرایی آسانتری دارد و از قابلیتهای سطح پایین کمتری پشتیبانی میکند. یکی از قابلیتهای اصلی جاوا این است که مدیریت حافظه را بطور خودکار انجام میدهد. ضریب اطمینان عملکرد برنامههای نوشتهشده به این زبان بالا است و وابسته به سیستمعامل خاصی نیست، به عبارت دیگر میتوان آن را روی هر رایانه با هر نوع سیستمعاملی اجرا کرد. برنامههای جاوا به صورت کدهای بیتی همگردانی (کامپایل) میشوند. که مانند کد ماشین هستند و به ویژه وابسته به سیستمعامل خاصی نیستند.
در مقایسه با زبانهای دیگر، همچون ++C یا بیسیک یا فورترن، جاوا زبان نسبتاً جدیدتری است. شرکت (sun Microsystems)سان مایکروسیستمز در سال ۱۹۹۱ یک پروژه تحقیقاتی به نام گرین (Green) را آغاز کرد. هدف این پروژه ایجاد زبانی جدید شبیه به ++C بود که نویسنده اصلی آن، جیمز گاسلینگ، آن را بلوط (Oak) نامید. اما بعدها به دلیل برخی مشکلات حقوقی[نیازمند منبع] از میان لیستی از کلمات تصادفی[۱] نام آن به جاوا تغییر کرد.
پروژه گرین به دلیل مشکلات بازاریابی در شرف لغو شدن بود تا اینکه گسترش وب در سال ۱۹۹۳ باعث نمایش تواناییهای وافر جاوا در این عرصه گشت. اینگونه بود که شرکت سان مایکروسیستمز در مه ۱۹۹۵ جاوا را رسماً به بازار عرضه کرد.
جاوا یک زبان برنامهنویسی است که در آغاز توسط شرکت سان مایکروسیستمز ایجاد شدهاست و در سال ۱۹۹۵ به عنوان بخش اصلی سکوی جاوا منتشر شد. این زبان قسمتهای بسیاری از گرامر خود را از C و ++C گرفته اما دارای مدل شیگرایی سادهای است و امکانات سطح پایین کمی دارد. کاربرد جاوا در کامپایل به صورت بایت کد است که قابلیت اجرا روی تمامی ماشینهای شبیهسازی جاوا را داشته باشد صرف نظر از معماری و خصوصیات آن کامپیوتر. اجرای اصلی کامپایلرهای جاوا، ماشینهای پیادهسازی و کتابخانههای آن توسط این شرکت از سال ۱۹۹۵ منتشر شد. در 1997 may این شرکت، نرمافزار رایگان این زبان را فراهم کرد. دیگران هم کاربردهای دیگری از این زبان را منتشر کردند مثل کامپایلر GNU برای جاوا.
مرورگرهای اصلی وب، به هم پیوستند تا به طور مطمئن جاوا اپلت را بدون صفحات وب اجرا کنند و به این صورت جاوا خیلی زود معروف و محبوب شد. با پیدایش java2، نسخهٔ جدید توانست ترکیبهای جدیدی را برای نوعهای مختلف پلت فرمها ایجاد کند. به عنوان مثال J2EE، باهدف کاربرد برای تشکیلات اقتصادی، و نسخهٔ سکوی جاوا، نسخه میکرو برای موبایل منتشر شد. در سال 199۶ با هدف بازاریابی، این شرکت نسخهٔ جدید J2 را با نامهای سکوی جاوا، نسخه سازمانی، سکوی جاوا، نسخه میکرو و سکوی جاوا، نسخه استاندارد منتشر کرد. در سال ۱۹۹۷ شرکت سان میکروسیستمز،ISO/IEC JTC1 standards body و Ecma International را به فرمول جاوا تغییر داد. شرکت sun بسیاری از کاربردهای جاوایش را بدون هیچ هزینهای فراهم آورد. شرکت sun با فروش مجوز برای بعضی از کاربردهای خاصش مثل Java Enterprise System درآمدی را بدست آورد. اولین تمایزی که بین SDK و سکوی جاوا داد شامل فقدان کامپایلر برای JRE و سرفایلها بود. در ۱۳ نوامبر 199۶ شرکت sun نرمافزار جاوا را به صورت رایگان و با مجوز عمومی برای همه منتشر کرد. جاوا یک پلتفرم نرمافزاری است.
جاوا برای نوشتن انواع برنامههای کاربردی مناسب است. با جاوا میتوان انواع برنامههای زیر را نوشت:
برنامههای تحت وب
برنامهنویسی سیستمهای کوچک مانند موبایل، پاکت پیسی و...
برنامههای کاربردی بزرگ (Enterprise)
برنامههای رومیزی (Desktop)
و غیره.
قابلیت خاصی در جاوا وجود دارد بنام اپلت. اپلتها امکانات فراوانی برای نوشتن برنامههای تحت وب در اختیار برنامهنویسان قرار میدهند که دیگر زبانهای برنامهنویسی فاقد آن هستند.[نیازمند منبع] البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است. اپلتها نظیر فناوری اکتیوایکس شرکت مایکروسافت هستند که برنامهنویسان را قادر میسازد تا امکاناتی را به مرورگر کاربر بیافزایند. البته تفاوت این دو در امنیت میباشد به گونهای که اپلتها بدلیل اینکه در محیطی به نام جعبه شنی اجرا میشوند امن هستند ولی Activexها فاقد چنین امنیتی هستند.
سیستمعامل: هر چقدر زبانهای.net قوی باشند تنها بر روی پلت فرم ویندوز اجرا میشوند و برخی ویندوز را سیستمعامل غیر قابل اعتمادی در برنامه نویسی Enterprise میدانند.[نیازمند منبع] ولی جاوا از این نظر انتخابی خوب است.
قابلیت حمل: جاوا بر روی پلتفرمهای گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 cpu برای پردازش.
جاوا بیشتر از یک زبان است: جاوا فقط یک زبان نیست و انجمنهایی متشکل از بزرگان صنایع و برنامهنویسان زیادی مشغول به توسعه و ایجاد استانداردهای جدید و به روز هستند.
خط مشی جاوا
یکی از ویژگیهای جاوا قابل حمل بودن آن است. یعنی برنامهٔ نوشته شده به زبان جاوا باید به طور مشابهی در کامپیوترهای مختلف با سختافزارهای متفاوت اجرا شود. و باید این توانایی را داشته باشد که برنامه یک بار نوشته شود، یک بار کامپایل شود و در همه کامپیوترها اجرا گردد. به این صورت که کد کامپایل شدهٔ جاوا را ذخیره میکند، اما نه بهصورت کد ماشین بلکه بهصورت بایت کد جاوا. دستورالعملها شبیه کد ماشین هستند، اما با ماشینهای مجازی که به طور خاص برای سختافزارهای مختلف نوشته شدهاند، اجرا میشوند. در نهایت کاربر از سکوی جاوا نصب شده روی ماشین خود یا مرورگر وب استفاده میکند. کتابخانههای استاندارد یک راه عمومی برای دسترسی به ویژگیهای خاص فراهم میکنند. مانند گرافیک، نخکشی و شبکه. در بعضی از نسخههای ماشین مجازی جاوا بایت کدها میتوانند قبل و در زمان اجرای برنامه به کدهای محلی کامپایل شوند. فایدهٔ اصلی استفاده از بایت کد، قسمت کردن است. اما ترجمهٔ کلی یعنی برنامههای ترجمه شده تقریباً همیشه کندتر از برنامههای کامپایل شدهٔ محلی اجرا میشوند. این شکاف میتواند با چند تکنیک خوشبینانه که در کاربردهای JVM قبلی معرفی شد، کم شود. یکی از این تکنیکها JIT است که بایت کد جاوا را به کد محلی ترجمه کرده و سپس آن را پنهان میکند. در نتیجه برنامه خیلی سریعتر نسبت به کدهای ترجمه شدهٔ خالص شروع و اجرا میشود. بیشتر VMهای پیشرفته، بهصورت کامپایل مجدد پویا، در آنالیز VM، رفتار برنامهٔ اجرا شده و کامپایل مجدد انتخاب شده و بهینهسازی قسمتهای برنامه، استفاده میشوند. کامپایل مجدد پویا میتواند کامپایل ایستا را بهینهسازی کند. زیرا میتواند قسمت hot spot برنامه و گاهی حلقههای داخلی که ممکن است زمان اجرای برنامه را افزایش دهند را تشخیص دهد. کامپایل JIT و کامپایل مجدد پویا به برنامههای جاوا اجازه میدهد که سرعت اجرای کدهای محلی بدون از دست دادن قابلیت انتقال افزایش پیدا کند.
تکنیک بعدی به عنوان کامپایل ایستا شناخته شدهاست. که کامپایل مستقیم به کدهای محلی است مانند بسیاری از کامپایلرهای قدیمی. کامپایلر ایستای جاوا، بایت کدها را به کدهای شی محلی ترجمه میکند.
کارایی جاوا نسبت به نسخههای اولیه بیشتر شد. در تعدادی از تستها نشان داده شد که کارایی کامپایلرJIT کاملاََ مشابه کامپایلر محلی شد. عملکرد کامپایلرها لزوماَ کارایی کدهای کامپایل شده را نشان نمیدهند. یکی از پیشرفتهای بی نظیر در در زمان اجرای ماشین این بود که خطاها ماشین را دچار اشکال نمیکردند. علاوه بر این در زمان اجرای ماشینی مانند جاوا وسایلی وجود دارد که به زمان اجرای ماشین متصل شده و هر زمانی که یک استثنا رخ میدهد، اطلاعات اشکال زدایی که در حافظه وجود دارد، ثبت میکنند.
پیاده سازی
شرکت سان میکروسیستم مجوز رسمی برای پلت فرم استاندارد جاوا را به مایکروسافت ویندوز, لینوکس، و Solaris. دادهاست. همچنین محیطهای دیگری برای دیگر پلت فرمها فراهم آوردهاست. علامت تجاری مجوز شرکت سان میکروسیستم طوری بود که با همهٔ پیاده سازیها سازگار باشد. به علت اختلاف قانونی که با ماکروسافت پیدا کرد، زمانی که شرکت سان ادعا کرد که پیاده سازی ماکروسافت از RMI یا JNI پشتیبانی نکرده و ویژگیهای خاصی را برای خودش اضافه کردهاست. شرکت سان در سال ۱۹۹۷ پیگیری قانونی کرد و در سال ۲۰۰۱ در توافقی ۲۰ میلیون دلاری برنده شد. در نتیجه کمی بعدماکروسافت جاوا را به ویندوز فرستاد. در نسخهٔ اخیر ویندوز، مرورگر اینترنت نمیتواند از جاوا پلت فرم پشتیبانی کند. شرکت سان و دیگران یک سیستم اجرای جاوای رایگان برای آنها و نسخههای دیگر ویندوز فراهم آوردند.
اداره خودکار حافظه
جاوا از حافظهٔ بازیافتی خودکار برای ادارهٔ حافظه در چرخهٔ زندگی یک شی استفاده میکند. برنامهنویس زمانی که اشیا به وجود میآیند، این حافظه را تعیین میکند. و در زمان اجرا نیز، زمانی که این اشیا در استفادهٔ زیاد طولانی نباشند، برنامه نویس مسئول بازگرداندن این حافظهاست. زمانی که مرجعی برای شیهای باقیمانده نیست، شیهای غیر قابل دسترس برای آزاد شدن به صورت خودکار توسط بازیافت حافظه، انتخاب میشوند. اگر برنامهنویس مقداری از حافظه را برای شیهایی که زیاد طولانی نیستند، نگه دارد، چیزهایی شبیه سوراخ حافظه اتفاق میافتند.
یکی از عقایدی که پشت سر مدل ادارهٔ حافظهٔ خودکار جاوا وجود دارد، این است که برنامهنویس هزینهٔ اجرای ادارهٔ دستی حافظه را نادیده میگیرد. در بعضی از زبانها حافظه لازم برای ایجاد یک شی، به صورت ضمنی و بدون شرط، به پشته تخصیص داده میشود. و یا بهطور صریح اختصاص داده شده و از heap بازگردانده میشود. در هر کدام از این راهها، مسئولیت ادارهٔ اقامت حافظه با برنامهنویس است. اگر برنامه شی را برنگرداند، سوراخ حافظه اتفاق میافتد. اگر برنامه تلاش کند به حافظهای را که هماکنون بازگردانده شده، دستیابی پیدا کند یا برگرداند، نتیجه تعریف شده نیست و ممکن است برنامه بیثبات شده و یا تخریب شود. این ممکن است با استفاده از اشارهگر مدتی باقی بماند، اما سرباری و پیچیدگی برنامه زیاد میشود. بازیافت حافظه اجازه دارد در هر زمانی اتفاق بیفتد. بهطوری که این زمانی اتفاق میافتد که برنامه بیکار باشد. اگر حافظهٔ خالی کافی برای تخصیص شی جدید در heap وجود نداشته باشد، ممکن است برنامه برای چند دقیقه متوقف شود. در جایی که زمان پاسخ یا اجرا مهم باشد، ادارهٔ حافظه و منابع اشیا استفاده میشوند.
جاوا از نوع اشارهگر ریاضی C و ++C پشتیبانی نمیکند. در جایی که آدرس اشیا و اعداد صحیح میتوانند به جای هم استفاده شوند. همانند ++C و بعضی زبانهای شیگرای دیگر، متغیرهای نوعهای اولیهٔ جاوا شیگرا نبودند. مقدار نوعهای اولیه، مستقیماً در فیلدها ذخیره میشوند. در فیلدها (برای اشیا) و در پشته (برای توابع)، بیشتر از heap استفاده میشود. این یک تصمیم هوشیارانه توسط طراح جاوا برای اجرا است. به همین دلیل جاوا یک زبان شیگرای خالص به حساب نمیآید.
گرامر
گرامر جاوا خیلی بزرگتر از ++C است. مثل ++C که ترکیب ساختارها و برنامههای شیگرا میباشد، نیست. بلکه زبان جاوا یک زبان شیگرای خالص است. همهٔ کدهایی که داخل کلاس نوشته میشود و همهٔ چیزهایی که داخل شی است، با استثنائات نوع دادهٔ اصلی، که به صورت کلاس نیستند، برای اجرا. جاوا بسیاری از ویژگیها را پشتیبانی میکند. از کلاسها برای سادهتر کردن زبان و جلوگیری از رخداد خطا.
نمونههایی از برنامههای جاوا
در زیر نمونهای از برنامهای که در جاوا نوشته شدهاست آورده شدهاست. البته برای کامپایل کردن این برنامه بایستی کیت توسعه جاوا بر روی سیستم مورد نظر نصب شده باشد.
public class Test{
public static void main(String[] args) {
System.out.println("HelloWorld!");
}
}
برای اجرای برنامه بالا، ابتدا باید یک فایل به نام Test.java ساخته شود و سپس کامپایل شود:
$ javac Test.java
سپس یک فایل خروجی به نام Test.class دریافت میشود. بعد با استفاده از دستور زیر برنامه قابل اجرا است:
$ java Test
مثالها
برنامه Hello world به این صورت در زبان جاوا میتواند نوشته شود:
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
بر طبق قرارداد فایل هل بعد از کلاسهای عمومی نام گذاری میشوند. سپس باید پسوند java را به این صورت اضافه کرد: Hello world.java. این فایل اول باید با استفاده از کامپایلر جاوا به بایت کد کامپایل شود. در نتیجه فایل Hello world.class ایجاد میشود. این فایل قابل اجرا است. فایل جاوا ممکن است فقط یک کلاس عمومی داشته باشد. اما میتواند شامل چندین کلاس با دستیابی عمومی کمتر باشد.
کلاسی که به صورت خصوصی تعریف میشود ممکن است در فایل.java ذخیره شود. کامپایلر برای هر کلاسی که در فایل اصلی تعریف میشود یک کلاس فایل تولید میکند. که نام این کلاس فایل همنام کلاس است با پسوند.class
کلمه کلیدی public (عمومی) برای قسمتهایی که میتوانند از کدهای کلاسهای دیگر صدا زده بشوند، به کار برده میشود. کلمهٔ کلیدی static (ایستا) در جلوی یک تابع، یک تابع ایستا را که فقط وابسته به کلاس است و نه قابل استفاده برای نمونههایی از کلاس، نشان میدهد. فقط تابعهای ایستا میتوانند توسط اشیا بدون مرجع صدا زده شوند. دادههای ایستا به متغیرهایی که ایستا نیستند، نمیتوانند دسترسی داشته باشند.
کلمهٔ کلیدی void (تهی) نشان میدهد که تابع main هیچ مقداری را بر نمیگرداند. اگر برنامهٔ جاوا بخواهد با خطا از برنامه خارج شود، باید system.exit() صدا زده شود. کلمهٔ main یک کلمهٔ کلیدی در زبان جاوا نیست. این نام واقعی تابعی است که جاوا برای فرستادن کنترل به برنامه، صدا میزند. برنامه جاوا ممکن است شامل چندین کلاس باشد که هر کدام دارای تابع main هستند.
تابع main باید آرایهای از اشیا رشتهای را بپذیرد. تابع main میتواند از آرگومانهای متغیر به شکل public static void main(string…args) استفاده کند که به تابع main اجازه میدهد اعدادی دلخواه از اشیا رشتهای را فراخوانی کند. پارامترstring[]args آرایهای از اشیا رشته ایست که شامل تمام آرگومانهایی که به کلاس فرستاده میشود، است.
چاپ کردن، قسمتی از کتابخانهٔ استاندارد جاوا است. کلاس سیستم یک فیلد استاتیک عمومی به نام out تعریف کردهاست. شی out یک نمونه از کلاس printstream است و شامل تعداد زیادی تابع برای چاپ کردن اطلاعات در خروجی استاندارد است. همچنین شامل println(string) برای اضافه کردن یک خط جدید برای رشتهٔ فرستاده شده اضافه میکند.
توزیعهای جاوا
منظور از توزیع جاوا پیادهسازیهای مختلفی است که برای کامپایلر جاوا و همچنین مجموعه کتابخانههای استاندارد زبان جاوا (JDK) وجود دارد. در حال حاضر چهار توزیعکنندهٔ عمده جاوا وجود دارند:
سان میکروسیستمز: توزیع کننده اصلی جاوا و مبدع آن میباشد. در اکثر موارد هنگامی که گفته میشود جاوا منظور توزیع سان میباشد.
GNU Classpath: این توزیع از سوی موسسه نرمافزارهای آزاد منتشر شده و تقریبا تمامی کتابخانه استاندارد زبان جاوا در آن بدون بهرهگیری از توزیع شرکت سان از اول پیادهسازی شدهاست. یک کامپایلر به نام GNU Compiler for Java نیز برای کامپایل کردن کدهای جاوا توسط این موسسه ایجاد شدهاست. فلسفه انتخاب نام Classpath برای این پروژه رها کردن تکنولوژی جاوا از وابستگی به علامت تجاری جاوا است بطوریکه هیچ وابستگی یا محدودیتی برای استفاده آن از لحاظ قوانین حقوقی ایجاد نشود و از طرفی به خاطر وجود متغیر محیطی classpath در تمامی محیطهای احرایی برنامههای جاوا، این نام به نوعی تکنولوژی جاوا را برای خواننده القا میکند. کامپایلر GNU توانایی ایجاد کد اجرایی (در مقابل بایت کد توزیع سان) را داراست. لازم به ذکر است که در حال حاضر شرکت سان تقریبا تمامی کدهای JDK را تحت مجوز نرمافزارهای آزاد به صورت متن باز منتشر کردهاست و قول انتشار قسمت بسیار کوچکی از این مجموعه را که بهدلیل استفاده از کدهای شرکتهای ثانویه نتوانسته به صورت متن باز منتشر نماید در آینده نزدیک با بازنویسی این کدها دادهاست.
مایکروسافت #J: این در حقیقت یک توزیع جاوا نیست. بلکه زبانی مشابه میباشد که توسط مایکروسافت و در چارچوب.net ارائه شدهاست. انتظار اینکه در سیستمعاملی غیر از ویندوز هم اجرا شود را نداشته باشید.
AspectJ: این نیز یک زبان مجزا نیست. بلکه یک برنامه الحاقی میباشد که امکان برنامه نویسی Aspect Oriented را به جاوا میافزاید. این برنامه توسط بنیاد برنامهنویسی جلوهگرا و به صورت کدباز ارائه شدهاست.
کلاسهای خاص
برنامک (برنامههای کاربردی کوچک)
اپلت جاواها برنامههایی هستند که برای کاربردهایی نظیر نمایش در صفحات وب، ایجاد شدهاند. واژهٔ import باعث میشود کامپایلر جاوا کلاسهای javaapplet.Applet وjava.awt.Graphics را به کامپایل برنامه اضافه کند. کلاس Hello کلاس Applet را توسعه میدهد. کلاس اپلت چارچوبی برای کاربردهای گروهی برای نمایش و کنترل چرخهٔ زندگی اپلت، درست میکند. کلاس اپلت یک تابع پنجرهای مجرد است که برنامههای کوچکی با قابلیت نشان دادن واسط گرافیکی برای کاربر را فراهم میکند. کلاس Hello تابع موروثی print(Graphics) را از سوپر کلاس container باطل میکند، برای اینکه کدی که اپلت را نمایش میدهد، فراهم کند. تابع paint شیهای گرافیکی را که شامل زمینههای گرافیکی هستند را میفرستد تا برای نمایش اپلتها استفاده شوند. تابع paint برای نمایش "Hello world!" تابع drawstring(string,int,int) را صدا میزند.
جاوا سرولت
تکنولوژی servlet جاوا گسترس وب را به آسانی فراهم میکند. و شامل مکانیزمهایی برای توسعهٔ تابعی سرور وب و برایدسترسی به سیستمهای تجاری موجود است.servlet قسمتی از javaEE است که به درخواستهای مشتری پاسخ میدهد.
// Hello.java
import java.io. *;
import javax.servlet. *;
public class Hello extends GenericServlet {
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
final PrintWriter pw = response.getWriter();
pw.println("Hello, world!");
pw.close();
}
}
واژهٔ import کامپایلر جاوا را هدایت میکند که تمام کلاسهای عمومی و واسطها را از بستههای java.io وjava.servlet را در کامپایل وارد کند.
کلاس Hello کلاس Genericservlet را توسعه میدهد. کلاس Genericservlet واسطی برای سرور فراهم میکند تا درخواست را به servlet بفرستد و چرخهٔ زندگی servlet را کنترل کند.
JSP
صفحهٔ سرور جاوا قسمتی از سرور javaEE است که پاسخ تولید میکند. نوعاَ صفحات HTML به درخواستهای HTTP از مشتری.JSPها کد جاوا در صفحهٔ HTML را با استفاده از حائل <%and%> اضافه میکنند.JSP به javaservlet کامپایل میشود.
سوینگ
Swing کتابخانهٔ واسط گرافیکی کاربر است برای پلت فرم javaSE. ابزاری مشابه پنجره، GTK و motif توسط شرکت sun فراهم شدهاند. این مثال کاربرد swing یک پنجرهٔ واحد همراه با Hello world را ایجاد میکند.
// Hello.java (Java SE 5)
import java.awt.BorderLayout;
import javax.swing. *;
public class Hello extends JFrame {
public Hello() {
super("hello");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(new JLabel("Hello, world!"));
pack();
}
public static void main(String[] args) {
new Hello().setVisible(true);
}
}
اولین جملهٔ import کامپایلر جاوا را هدایت میکندتا کلاس Borderlayout را از بستهٔ java.awt در جاوا به کامپایل اضافه کند. و import دوم همهٔ کلاسهای عمومی و واسط آنها را از بستهٔ javax.swing اضافه میکند. کلاس Hello کلاس Jframe را توسعه میدهد. کلاس Jframe یک پنجره با میلهٔ عنوان و کنترل بستن است.
زمانی که برنامه آغاز میشود، تابع main با JVM صدا زده میشود. این یک نمونهٔ جدید از کلاس Hello را ایجاد کرده و با صدا زدن تابع setvisible(boolean) با مقدار true نمایش داده میشود.
Generics
قبل از کلاسهای عمومی برای هر متغیر باید یک نوع خاص تعریف میکردیم. به عنوان مثال برای کلاسهای ظرف این امر مشکل بود زیرا را آسانی برای ایجاد یک container وجود نداشت که نوعهای خاصی از اشیا را بپذیرد. کلاسهای عمومی اجازه میدهند نوع زمان کامپایل، بدون نیاز به ایجاد تعداد زیادی از container، چک شود. همه آنها کدهای مشابهی دارند.
کتابخانههای کلاس
کتابخانههای جاوا که به صورت بایت کد از کد اصلی کامپایل شدهاند، برای پشتیبانی از بعضی از کاربردهای جاوا، توسطJRE منتشر شدهاست. مثالهایی از این کتابخانهها عبارتند از:
کتابخانههای مرکزی که شامل:
کتابخانههایی که برای ساختار داده کاربرد دارند. مثل لیستها، درختها، مجموعهها، مترجمها.
کتابخانهٔ پرداز XML (تجزیه، تغییر شکل، اعتبار)
کتابخانههای موضعی و بینالمللی
کتابخانههای انتگرال گیری که امکان تایپ کردن توسط سیستمهای بیرونی را میدهند.
JDBC برای دستیابی به دادهها
JNDI برای مراجعه و کشف کردن
CORBA & RMI برای توسعهٔ کاربرد توزیع کردن
کتابخانههای واسط کاربر
AWT (توابع پنجرهای مجرد)که قسمتهایی از GUI را فراهم میکنند.
کتابخانههای swing که در AWT ساخته شدهاند اما کاربردهایی از AWT widgetry را فراهم میکنند.
APLها برای ضبط صدا، پردازش و بازنواختی
کاربردهای وابستهٔ پلت فرم ماشینهای مجازی جاوا
Plugins که توانایی اجرا شدن در مرورگرهای وب را به اپلت میدهد.
java web start
دادن مجوز و مستند سازی
ویرایش
شرکت سان میکروسیستم، ۴ نوع ویرایش از کاربردهای مختلف جاوا را ارائه دادهاست:
Java card for smartcard
JavaME
JavaSE
JavaEE
ایرادات مطرح شده
مهمترین ایرادی که برنامه نویسان سایر زبانها به زبان جاوا میگیرند سرعت اجرایی پایین[نیازمند منبع] جاوا در مقایسه با زبانها سطح پایینتر مانند ++C و اسمبلی است. یک برنامه جاوا به صورت بایت کد میباشد و باید در ماشین مجازی جاوا اجرا گردد. به همین دلیل سرعت اجرای پایینی را در مقابل زبانهایی همچون ++C دارد. به صورت دیگر یک برنامه C به طور متوسط تا ۱۰ برابر سریعتر از برنامه مشابه جاوا اجرا میگردد[نیازمند منبع].
جاوا علی رغم شیءگرا بودن در بخشی از قسمتها برخی از اصول شیگرایی را نادیده گرفتهاست[نیازمند منبع]. از جمله این قسمتها قابلیت بازتابش Reflection میباشد. هدف اصلی بازتابش بررسی (مشاهده) و ایجاد تغییر در برنامه در حال اجرا است ولی این مهم با زیر پا گذاشتن بعضی اصول ممکن شدهاست. برای نمونه با استفاده از بازتابش (و در صورت داشتن مجوز لازم ضمن اجرای برنامه) میتوان به متدهای خصوصی دیگر کلاسها دسترسی داشت.
زبان جاوا در مقابل زبانی مثل ++C ساده تر و یادگیری آن آسانتر است. این آسانتر بودن با حذف بسیاری[نیازمند منبع] از موارد که باعث قدرتمندتر بودن[نیازمند منبع] زبان ++C بودهاند ایجاد شدهاست. مهمترین این موارد اشاره گرها و وراثت چندگانه بودهاند که در زبان جاوا یافت نمیشوند.
از آنجایی که جاوا زبانی با عدم وابستگی به بستر میباشد پس استفاده از توابع سیستمعامل در برنامه را به طور مستقیم نمیپذیرد. به همین صورت نمیتوان به طور مستقیم از واسطهای برنامه نویسی غیر از جاوا در آن استفاده نمود.
پاسخ به ایرادات
سرعت پایین برنامههای جاوا در محیطی که اجرا میشوند ملاک کارایی نبوده زیرا در محیط وب مسئلهای که سرعت را کند میسازد، شبکه بوده و ابتدا باید سربار شبکه را از روی برنامهها برداشت. از طرف دیگر در برنامههای رومیزی هم در JDK 5.0 و ۶٫۰، بهینه سازی بسیاری بوجود آمده که این مسئله باعث شده که در آخرین تست کارایی که انجام شده یک برنامه جاوا در محدودهٔ ۰٫۸ تا ۱٫۳ همان برنامه در ++C کارایی داشته باشد که ۱٫۳ آن مربوط به بخش واسط کاربری و سرعت ۰٫۸ آن مربوط به بسته تخلیه حافظه میشده که هیج الگوریتمی نتوانست از الگوریتم Garbage Collector جاوا پیشی بگیرد. همچنین سال ۱۹۹۹ در مقالهای آقای Lutz Prechelt به این مسئله را ثابت کردند که تجربه برنامهنویسی که برنامهای را مینویسد از انتخاب زبانی که برنامه برروی آن نوشته میشود در کارایی تأثیر بیشتری دارد و این بدان معناست که کارایی یک برنامه را برنامهنویس مشخص میکند و نه زبان برنامهنویسی(ایشان در همان مقاله از زبان جاوا استفاده نمودند تا ذهنیت بد را از بین ببرند)
همچنین در صنعت نرمافزار هزینه اصلی مربوط به ساخت نرمافزار است و نه تهیه سختافزار برای دستیابی به سرعت بیشتر.
حذف اشارهگرها در جاوا به دلیل مشکلاتی بوده که آنها در طول تاریخشان بوجود آوردهاند، اگرچه این موارد در برنامههای سیستمی لازم بهنظر میرسد ولی در محیطهای تحتوب که بستر اصلی جاوا هستند میتوانند اثراتی به مراتب شدیدتر نسبت به آنچه در برنامههای سیستمی دارند داشته باشند و باعث میشود که توجه برنامهنویسان از مسائلی چون کارایی، قابلیت اطمینان و مقیاسپذیری برنامه به تنظیم اشارهگرها معطوف گردد.
وجود وراثت چندگانه در زبانی مانند ++C، باعث ایجاد مشکلات اساسیای میگردید که اکثر برنامهنویسان ++C از آن دوری میکرده و هنوز هم میکنند. ولی قابلیت چندریخته شدن یک کلاس از لحاظ شی گرایی بسیار مهم بوده و بنابراین توجیهی برای وجود وراثت چندگانه را فراهم مینمود. در جاوا با وارد شدن مفهومی به نام واسط برنامهسازی (Interface)، دیگر نیازی به وجود وراثت چندگانه احساس نشد و بنابراین از زبان جاوا حذف گردید. در حال حاضر اکثر طراحان برنامهها حتی به این نتیجه رسیدهاند که وراثت تکی هم باعث ایجاد مشکل بوده و تا آنجایی که میشود باید از Composition استفاده نمود و در تمامی کتابهای طراحی که از سال ۲۰۰۰ به این طرف چاپ شده به آن اشاره نمودهاند.
از ابتدای بوجود آمدن جاوا، کتابخانه JNI - Java Native Interface در آن وجود داشته که قابلیت فراخوانی و دستکاری برنامههایی در ++C و... را میداده که از نمونههای آن میتوان به Jtwain که یک بستهایست که از کتابخانههای ویندوز برای اسکن عکس استفاده میکند، یا SWT که یک بسته نرمافزاریست که از کتابخانههای ویندوز و لینوکس (برحسب سیستمعامل) برای ساخت واسط کاربری (UI) استفاده میکند، نام برد.
بسیاری از موارد یاد شده به عنوان ایرادات به جاوا به عنوان ایرادات به طراحی زبانهای سطح بالا هستند و نه جاوا.
یک اشتباه متداول
برخی مردم به علت شباهت اسمی، جاوا و جاوااسکریپت را با هم اشتباه میگیرند. در حالیکه این دو زبان گرچه در ظاهر و کلمات شبیهند ولی بطور ساختاری با یکدیگر متفاوتند. جاوا اسکریپت محصول شرکت نت اسکیپ است. جاوا برای اجرا باید به زبان ماشین مجازی ترجمه شود اما جاوااسکریپت زبانی است که معمولا در صفحات وب نوشته میشود و توسط مرورگر تفسیر میگردد. در جاوا متغیرها همگی بر اساس نوعشان معرفی میشوند اما در جاواسکریپت نوع متغیرها به صورت ضمنی مشخص میشود
مشتاقان يادگيري زبان برنامه نويسي جاوا براي فراگيري كامل جاوا به سايت ذيل رجوع كنيد