زبان برنامه نویسی جاوا توسط جیمز گاسلینگ در شرکت سان مایکروسیستمز که بعدها توسط شرکت بزرگ اوراکل خریداری شد طراحی شد و در سال ۱۹۹۵ اولین نسخه آن منتشر شد.
آقای گاسلینگ که نام واقعی وی James Arthur Gosling است در ۱۹ ماه می سال ۱۹۵۵ در کشور کانادا به دنیا آمد و در حال حاضر به عنوان یکی از دانشمندان بنام علوم کامپیوتری دنیا محسوب می گردد و در مجامع برنامه نویسی دنیا از وی به عنوان «پدر زبان برنامه نویسی جاوا» یاد می شود.
وی همچنین در سال ۱۹۷۷ از دانشگاه Calgary در رشته علوم کامیپوتری فارغ التحصیل شد و در سال ۱۹۸۳ هم مدرک Ph.D خود را در همین رشته از دانشگاه Carnegie Mellon دریافت کرد.
پیش از هر چیز توجه داشته باشیم که زبان جاوا را با زبان جاوا اسکریپت اشتباه نگیریم. به طور کلی، زبان برنامه نویسی Java یک زبان چند منظوره شیی گرا است. زبان برنامه نویسی جاوا شبیه به زبان سی پلاس پلاس است اما شیی گرایی در آن سادهتر شده است و از قابلیتهای سطح پایین کمتری پشتیبانی می کند.
یکی از قابلیتهای زبان برنامه نویسی Java این است که مدیریت حافظه را به صورت خودکار انجام می دهد. علاوه بر این، شعار جالبی که توسعه دهندگان جاوا دارند این است که «یک بار بنویس و همه جا اجرا کن».
زبان برنامه نویسی جاوا به عنوان یکی از زبانهای اصلی توسعه اپلیکیشن برای سیستم عامل محبوب و متن باز اندروید محسوب میگردد لذا اگر تمایل دارید وارد باز کار طراحی اپ اندروید شوید، نیاز است تا زبان Java را فرا بگیرید.
آن دسته از برنامه نویسانی که می خواهند برنامه نویسی آندروید را به صورت حرفه ای بیاموزند و برای برنامه نویسی آندروید تسلط به زبان java ندارند نیز از مخاطبین این دوره هستند.
آن دسته از افرادی که می خواهند به زبان حرفه ای جاوا به عنوان یکی از پردرآمدترین زبان برنامه نویسی در جهان، تسلط یابند از مخاطبین این دوره هستند.
آن دسته از برنامه نویسانی که علاقه مند به برنامه نویسی در محیط Linux و Unix می باشند نیز از مخاطبین این دوره هستند.
آن دسته از برنامه نویسانی که می خواهند بالاترین استانداردهای برنامه نویسی شی گرا را در محیطی عاری از ابزارهای جانبی اضافه به صورت خالص بیاموزند از مخاطبان این دوره هستند.
آن دسته از مهندسین صنایع که برای اجرای تحلیل و طراحی شی گرای نرم افزار احتیاج به دانش عملی oop دارند نیز از مخاطبین این دوره هستند.
آن دسته از برنامه نویسانی که می خواهند APIهای قدرتمند کارکردن با بانک اطلاعاتی از طریق جاوا بیاموزند نیز از مخاطبین این دوره هستند .
آن دسته از برنامه نویسانی که می خواهند برنامه توزیع شده در محیط شبکه را بیاموزند نیز از مخاطبین این دوره هستند.
آن دسته از برنامه نویسانی که می خواهند در محیطی عملی و کاربردی از صفر تا صد مراحل اجرای یک پروژه را در محیط جاوا به صورت پروژه ای تجربه کنند از مخاطبین این دوره هستند.
جاوا (به انگلیسی: Java) یک زبان برنامهنویسیِ شیءگرا است که برای نخستین بار توسط جیمز گاسلینگ در شرکت سان مایکروسیستمز ایجاد گردید و در سال ۱۹۹۵ به عنوان بخشی از سکوی جاوا منتشر شد. زبان جاوا شبیه به ++C است اما مدل شیءگرایی آسانتری دارد و از قابلیتهای سطح پایین کمتری پشتیبانی میکند. یکی از قابلیتهای بنیادین جاوا این است که مدیریت حافظه را بطور خودکار انجام میدهد. ضریب اطمینان عملکرد برنامههای نوشتهشده به این زبان نسبت به زبانهای نسل اول C بالا است و وابسته به سیستمعامل خاصی نیست. برنامههای جاوا به صورت بایت کد (کامپایل) میشوند که توسط واسط JVM به کدهای ماشین اجرا میشوند؛و در صورت وجود JVM مانند سایر زبانهای مبتنی بر آن به وابسته به سیستمعامل خاصی نیستند.
در سال 1990 سان میکروسیستم در حال توسعه نرم افزاری برای استفاده ابزارهای الکترونیکی بود که مسئولیت تیم با جیمز کاسلینگ بود. در سال 1991 تیم تصمیم بر این گرفت که زبان جدید را OAK بنامند. در سال 1992 این تیم که به تیم پروژه گرین معروف بود زبان جدیدی را معرفی کرد که با ابزارهای خانگی مختلف و لمسی کار میکرد. در سال 1993 وب جهانی توسعه یافت و زبان جدید با معرفی اپلت که قابلیتهای زیادی به کامپیوترهای متصل به وب می افزود مشهور شد. در سال 1995 زبان OAK به JAVA تغیر نام پیدا کرد و توسط مایکروسافت و نت اسکیپ پشتیبانی شد. در سال 1996 دیگر java زبانی به صورت همه گیر چند منظوره شناخته شده بود. در سال 2007 زبانهایی با استاندارد JVM مانند groovy ایجاد شد در سال 2014 جاوا سعی کرد با معرفی نسخه 8 برخی از قابلیتهای زبانهای دیگر را اضافه نماید.
جاوا یک زبان برنامهنویسی است که در آغاز توسط شرکت سان مایکروسیستمز ایجاد شدهاست و در سال ۱۹۹۵ به عنوان بخش اصلی سکوی جاوا منتشر شد. این زبان قسمتهای بسیاری از گرامر خود را از C و ++C گرفته اما دارای مدل شیگرایی سادهای است و امکانات سطح پایین کمی دارد. کاربرد جاوا در کامپایل به صورت بایت کد است که صرف نظر از معماری و خصوصیات آن کامپیوتر، قابلیت اجرا روی تمامی ماشینهای شبیهسازی جاوا را داشته باشد. اجزای اصلی کامپایلرهای جاوا، ماشینهای پیادهسازی و کتابخانههای آن توسط این شرکت از سال ۱۹۹۵ منتشر شد. در مه ۱۹۹۷ این شرکت، نرمافزار رایگان این زبان را فراهم کرد. دیگران هم کاربردهای دیگری از این زبان را منتشر کردند مثل کامپایلر GNU برای جاوا یا OPENJDK
با پیدایش java2، نسخهٔ جدید توانست ترکیبهای جدیدی را برای نوعهای مختلف پلت فرمها ایجاد کند. به عنوان مثال J2EE، باهدف کاربرد برای تشکیلات سازمانی، و نسخهٔ سکوی جاوا، نسخه میکرو برای تلفن همراه منتشر شد. در سال ۱۹۹۶ با هدف بازاریابی، این شرکت نسخهٔ جدید J2 را با نامهای سکوی جاوا، نسخه سازمانی، سکوی جاوا، نسخه میکرو و سکوی جاوا، نسخه استانداردمنتشر کرد. در سال ۱۹۹۷ شرکت سان میکروسیستمز، ISO/IEC JTC1 standards body و Ecma International را به فرمول جاوا تغییر داد. شرکت Sun بسیاری از کاربردهای جاوایش را بدون هیچ هزینهای فراهم آورد. شرکت Sun با فروش مجوز برای بعضی از کاربردهای خاصش مثل Java Enterprise System درآمدی را بدست آورد. در ۱۳ نوامبر ۱۹۹۶ شرکت Sun نرمافزار جاوا را به صورت رایگان و با مجوز عمومی برای همه منتشر کرد.
اهداف اولیه
- این زبان باید ساده، شیگرا و مشهور باشد.
- مطمئن و بدون خطا باشد.
- وابسته به معماری کامپیوتر نبوده و قابل انتقال باشد.
- باید با کارایی بالا اجرا شود.
- باید به صورت پویا و نخکشیشده باشد
نسخه ها
نسخههای جاوا به همراه تاریخ انتشار آنها:
- JDK 1.0، انتشار در ۲۱ ژانویهٔ ۱۹۹۶
- JDK 1.1، انتشار در ۱۹ فوریهٔ ۱۹۹۷
- J2SE 1.2، انتشار در ۸ دسامبر ۱۹۹۸
- J2SE 1.3، انتشار در ۸ می ۲۰۰۰
- J2SE 1.4، انتشار در ۶ فوریهٔ ۲۰۰۲
- J2SE 5.0، انتشار در ۳۰ سپتامبر ۲۰۰۴
- Java SE 6، انتشار در ۱۱ دسامبر ۲۰۰۶
- Java SE 7، انتشار در ۲۱۲۸ ژوئیه ۲۰۱۱
- Java SE 8، انتشار در ۱۸ مارچ ۲۰۱۴
برنامه های جاوا و اپلت ها
جاوا برای نوشتن انواع برنامههای کاربردی مناسب است. با جاوا میتوان انواع برنامههای زیر را نوشت:
- برنامههای تحت وب
- برنامهنویسی سیستمهای کوچک مانند تلفن همراه، رایانه جیبی و ...
- برنامههای کاربردی بزرگ (Enterprise)
- برنامههای رومیزی (Desktop)
- و غیره.
قابلیت خاصی در جاوا وجود دارد بنام اپلت. اپلتها امکانات فراوانی برای نوشتن برنامههای تحت وب در اختیار برنامهنویسان قرار میدهند.[نیازمند منبع] البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است. اپلتها نظیر فناوری سیلورلایت شرکت مایکروسافت هستند که برنامهنویسان را قادر میسازد تا امکاناتی را به مرورگر کاربر بیفزایند. البته تفاوت این دو در امنیت میباشد به گونهای که سیلورلایت بدلیل اینکه در محیطی به نام جعبه شنی (sandbox) اجرا میشوند امن هستند ولی اپلتها فاقد چنین امنیتی هستند و به سادگی هدف حملات استاندارد social Engineering Toolkit در Kali Linux واقع میشوند .
- سیستمعامل: تا سال 2004 net. تنها بر روی پلت فرم ویندوز اجرا میشوند و برخی ویندوز را سیستمعامل غیرقابل اعتمادی در برنامه نویسی Enterprise میدانند.[نیازمند منبع] ولی جاوا از این نظر انتخاب خوبی مسحوب میشد.
- قابلیت حمل: جاوا بر روی سکوهای رایانش گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 cpu برای پردازش.
خط مشی جاوا
یکی از ویژگیهای جاوا قابل حمل بودن آن است. یعنی برنامهٔ نوشته شده به زبان جاوا باید به طور مشابهی در کامپیوترهای مختلف با سختافزارهای متفاوت اجرا شود؛ و باید این توانایی را داشته باشد که برنامه یک بار نوشته شود، یک بار کامپایل شود و در همه کامپیوترها اجرا گردد. به این صورت که کد کامپایل شدهٔ جاوا را ذخیره میکند، اما نه بهصورت کد ماشین بلکه بهصورت بایتکد جاوا. دستورالعملها شبیه کد ماشین هستند، اما با ماشینهای مجازی که به طور خاص برای سختافزارهای مختلف نوشته شدهاند، اجرا میشوند. در نهایت کاربر از سکوی جاوا نصب شده روی ماشین خود یا مرورگر وب استفاده میکند. کتابخانههای استاندارد یک راه عمومی برای دسترسی به ویژگیهای خاص فراهم میکنند. مانند گرافیک، نخکشی و شبکه. در بعضی از نسخههای ماشین مجازی جاوا، بایتکدها میتوانند قبل و در زمان اجرای برنامه به کدهای محلی کامپایل شوند. فایدهٔ اصلی استفاده از بایتکد، قسمت کردن است. اما ترجمهٔ کلی یعنی برنامههای ترجمه شده تقریباً همیشه کندتر از برنامههای کامپایل شدهٔ محلی اجرا میشوند. این شکاف میتواند با چند تکنیک خوشبینانه که در کاربردهای JVM قبلی معرفی شد، کم شود. یکی از این تکنیکها JIT است که بایتکد جاوا را به کد محلی ترجمه کرده و سپس آن را پنهان میکند. در نتیجه برنامه خیلی سریعتر نسبت به کدهای ترجمه شدهٔ خالص شروع و اجرا میشود. بیشتر VMهای پیشرفته، بهصورت کامپایل مجدد پویا، در آنالیز VM، رفتار برنامهٔ اجرا شده و کامپایل مجدد انتخاب شده و بهینهسازی قسمتهای برنامه، استفاده میشوند. کامپایل مجدد پویا میتواند کامپایل ایستا را بهینهسازی کند. زیرا میتواند قسمت hot spot برنامه و گاهی حلقههای داخلی که ممکن است زمان اجرای برنامه را افزایش دهند را تشخیص دهد. کامپایل JIT و کامپایل مجدد پویا به برنامههای جاوا اجازه میدهد که سرعت اجرای کدهای محلی بدون از دست دادن قابلیت انتقال افزایش پیدا کند.
تکنیک بعدی به عنوان کامپایل ایستا شناخته شدهاست؛ که کامپایل مستقیم به کدهای محلی است مانند بسیاری از کامپایلرهای قدیمی. کامپایلر ایستای جاوا، بایتکدها را به کدهای شیء محلی ترجمه میکند.
کارایی جاوا نسبت به نسخههای اولیه بیشتر شد. در تعدادی از تستها نشان داده شد که کارایی کامپایلرJIT کاملاً مشابه کامپایلر محلی شد. عملکرد کامپایلرها لزوماً کارایی کدهای کامپایل شده را نشان نمیدهند. یکی از پیشرفتهای بی نظیر در در زمان اجرای ماشین این بود که خطاها ماشین را دچار اشکال نمیکردند. علاوه بر این در زمان اجرای ماشینی مانند جاوا وسایلی وجود دارد که به زمان اجرای ماشین متصل شده و هر زمانی که یک استثناء رخ میدهد، اطلاعات اشکال زدایی که در حافظه وجود دارد، ثبت میکنند.
شرکت سان میکروسیستم مجوز رسمی برای پلت فرم استاندارد جاوا را به مایکروسافت ویندوز، لینوکس، و سولاریس (سیستمعامل). دادهاست. همچنین محیطهای دیگری برای دیگر پلت فرمها فراهم آوردهاست. علامت تجاری مجوز شرکت سان میکروسیستم طوری بود که با همهٔ پیادهسازیها سازگار باشد. به علت اختلاف قانونی که با ماکروسافت پیدا کرد، زمانی که شرکت سان ادعا کرد که پیادهسازی ماکروسافت از RMI یا JNI پشتیبانی نکرده و ویژگیهای خاصی را برای خودش اضافه کردهاست. شرکت سان در سال ۱۹۹۷ پیگیری قانونی کرد و در سال ۲۰۰۱ در توافقی ۲۰ میلیون دلاری برنده شد. در نتیجه کمی بعدماکروسافت جاوا را به ویندوز فرستاد. در نسخهٔ اخیر ویندوز، مرورگر اینترنت نمیتواند از جاوا پلت فرم پشتیبانی کند. شرکت سان و دیگران یک سیستم اجرای جاوای رایگان برای آنها و نسخههای دیگر ویندوز فراهم آوردند.
جاوا از حافظهٔ بازیافتی خودکار برای ادارهٔ حافظه در چرخهٔ زندگی یک شیء استفاده میکند. برنامهنویس زمانی که اشیاء به وجود میآیند، این حافظه را تعیین میکند؛ و در زمان اجرا نیز، زمانی که این اشیاء در استفادهٔ زیاد طولانی نباشند، برنامه نویس مسئول بازگرداندن این حافظهاست. زمانی که مرجعی برای شیهای باقیمانده نیست، شیهای غیرقابل دسترس برای آزاد شدن به صورت خودکار توسط بازیافت حافظه، انتخاب میشوند. اگر برنامهنویس مقداری از حافظه را برای شیهایی که زیاد طولانی نیستند، نگه دارد، چیزهایی شبیه سوراخ حافظه اتفاق میافتند.
یکی از عقایدی که پشت سر مدل ادارهٔ حافظهٔ خودکار جاوا وجود دارد، این است که برنامهنویس هزینهٔ اجرای ادارهٔ دستی حافظه را نادیده میگیرد. در بعضی از زبانها حافظه لازم برای ایجاد یک شیء، به صورت ضمنی و بدون شرط، به پشته تخصیص داده میشود؛ و یا بهطور صریح اختصاص داده شده و از heap بازگردانده میشود. در هر کدام از این راهها، مسئولیت ادارهٔ اقامت حافظه با برنامهنویس است. اگر برنامه شیء را برنگرداند، سوراخ حافظه اتفاق میافتد. اگر برنامه تلاش کند به حافظهای را که هماکنون بازگردانده شده، دستیابی پیدا کند یا برگرداند، نتیجه تعریف شده نیست و ممکن است برنامه بیثبات شده و یا تخریب شود. این ممکن است با استفاده از اشارهگر مدتی باقی بماند، اما سرباری و پیچیدگی برنامه زیاد میشود. بازیافت حافظه اجازه دارد در هر زمانی اتفاق بیفتد. بهطوری که این زمانی اتفاق میافتد که برنامه بیکار باشد. اگر حافظهٔ خالی کافی برای تخصیص شیء جدید در هیپ وجود نداشته باشد، ممکن است برنامه برای چند دقیقه متوقف شود. در جایی که زمان پاسخ یا اجرا مهم باشد، ادارهٔ حافظه و منابع اشیاء استفاده میشوند.
جاوا از نوع اشارهگر ریاضی C و ++C پشتیبانی نمیکند. در جایی که آدرس اشیاء و اعداد صحیح میتوانند به جای هم استفاده شوند. همانند ++C و بعضی زبانهای شیگرای دیگر، متغیرهای نوعهای اولیهٔ جاوا شیگرا نبودند. مقدار نوعهای اولیه، مستقیماً در فیلدها ذخیره میشوند. در فیلدها (برای اشیاء) و در پشته (برای توابع)، بیشتر از هیپ استفاده میشود. این یک تصمیم هوشیارانه توسط طراح جاوا برای اجرا است. به همین دلیل جاوا یک زبان شیگرای خالص به حساب میآید.
گرامر جاوا محدودتر از ++C است و برخلاف ++C که ترکیبی است از ساختارها و شیگرایی، زبان جاوا یک زبان شیگرای خالص میباشد. فقط نوع دادهٔ اصلی از این قاعده مستثنی است. جاوا بسیاری از ویژگیها را پشتیبانی میکند و از کلاسها برای سادهتر کردن برنامهنویسی و کاهش خطا استفاده میکند.
برنامه نوسی جاوا