جاوا (زبان برنامهنویسی)
![]() | این مقاله نیازمند تمیزکاری است. لطفاً تا جای امکان آنرا از نظر املا، انشا، چیدمان و درستی بهتر کنید، سپس این برچسب را بردارید. محتویات این مقاله ممکن است غیر قابل اعتماد و نادرست یا جانبدارانه باشد یا قوانین حقوق پدیدآورندگان را نقض کرده باشد. |
برای تأییدپذیری کامل این مقاله به منابع بیشتری نیاز است. |
![]() | |||||||||
پارادایم | چندالگویی: شیءگرا، ساختیافته، دستوری، تابعی، جنریک، بازتابنده، همزمان | ||||||||
---|---|---|---|---|---|---|---|---|---|
طراحیشده توسط |
جیمز گاسلینگ سان مایکروسیستمز | ||||||||
توسعهدهنده | شرکت اوراکل | ||||||||
ظهوریافته در | ۱۹۹۵[۱] | ||||||||
Java Standard Edition 8 Update 25 (1.8.0_25) / ۱۴ اکتبر، ۲۰۱۴ | |||||||||
Static, strong, safe, nominative, manifest | |||||||||
زبان پیادهسازی | C و سی++ | ||||||||
سیستمعامل | چندسکویی (multi-platform) | ||||||||
پروانه | پروانه عمومی همگانی گنو، Java Community Process | ||||||||
.java , .class, .jar | |||||||||
وبگاه | For Java Developers | ||||||||
| |||||||||
![]() |
جاوا (به انگلیسی: Java) یک زبان برنامهنویسیِ شیءگرا است. نخستین بار توسط جیمز گاسلینگ در شرکت سان مایکروسیستمز ایجاد گردید. در سال ۱۹۹۱ به عنوان بخشی از سکوی جاوا منتشر شد. زبان جاوا شبیه به ++C است اما مدل شیءگرایی آسانتری دارد و از قابلیتهای سطح پایین کمتری پشتیبانی میکند. ایده شیء گرایی جاوا از زبان اسمالتاک گرفته شدهاست. یکی از قابلیتهای بنیادین جاوا این است که مدیریت حافظه را بطور خودکار انجام میدهد. ضریب اطمینان عملکرد برنامههای نوشتهشده به این زبان نسبت به زبانهای نسل اول C بالا است. برنامههای جاوا به صورت بایت کد (کامپایل) میشوند و توسط JVM (ماشین مجازی جاوا) به کدهای ماشین تبدیل و اجرا میشوند. در صورت وجود JVM مانند سایر زبانهای مبتنی بر آن که وابسته به سیستمعامل خاصی نیستند برنامههای نوشته شده به جاوا بر روی هر نوع سیستم عامل و هرگونه وسیلهٔ الکترونیکی قابل اجرا میباشند. شعار جاوا «یکبار بنویس و هر جایی اجرا کن» (Write once, Run anywhere) است که به همین ویژگی اشاره دارد.[۱۰]
محتویات
- ۱ تاریخچه
- ۲ اهداف اولیه
- ۳ نسخهها
- ۴ ماشین مجازی جاوا (JVM)
- ۵ برنامههای جاوا و اپلتها
- ۶ خط مشی جاوا
- ۷ پیادهسازی
- ۸ اداره خودکار حافظه
- ۹ گرامر
- ۱۰ نمونههایی از برنامههای جاوا
- ۱۱ توزیعهای جاوا
- ۱۲ کلاسهای خاص
- ۱۳ کتابخانههای کلاس
- ۱۴ ویرایش
- ۱۵ ایرادات مطرح شده
- ۱۶ تست برنامههای نوشته شده توسط جاوا
- ۱۷ شباهت اسمی جاوا و جاوااسکریپت
- ۱۸ تغییرات مهم جاوا در نسخه ۸
- ۱۹ جاوا نسخه ۹ و ماژولار شدن جاوا (پروژه Jigsaw)
- ۲۰ جاوا ۱۰ و Local Variable Type inference
- ۲۱ جستارهای وابسته
- ۲۲ پیوند به بیرون
- ۲۳ پانویس
- ۲۴ منابع
- ۲۵ پیوند به بیرون
تاریخچه[ویرایش]

در سال ۱۹۹۰ سان میکروسیستم در حال توسعه نرمافزاری برای استفاده ابزارهای الکترونیکی بود که مسئولیت تیم که آن را تیم پروژه گرین نامیدند جیمز کاسلینگ بر عهده گرفت. در سال ۱۹۹۱ تیم تصمیم گرفت که زبان جدید را OAK بنامند. در سال ۱۹۹۲ تیم پروژه گرین زبان جدیدی را معرفی کرد که با ابزارهای مختلف خانگی و لمسی کار میکرد. در سال ۱۹۹۳ وب جهانی توسعه یافت و زبان جدید با معرفی اپلت که قابلیتهای زیادی به کامپیوترهای متصل به وب میافزود مشهور شد. در سال ۱۹۹۵ زبان OAK به JAVA تغیر نام پیدا کرد و توسط مایکروسافت و نت اسکیپ پشتیبانی شد. در سال ۱۹۹۶ دیگر java زبانی به صورت همه گیر چند منظوره شناخته شده بود. در سال ۲۰۰۷ زبانهایی با استاندارد JVM مانند groovy ایجاد شد و در سال ۲۰۱۴ جاوا سعی کرد با معرفی نسخه ۸ برخی از قابلیتهای زبانهای دیگر را به جاوا اضافه نماید.
این زبان قسمتهای بسیاری از گرامر خود را از 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، انتشار در ۱۸ مارس ۲۰۱۴
- Java SE 9، انتشار در ۲۱ سپتامبر ۲۰۱۷
- Java SE 10، تاریخ انتشار» ۲۰ مارچ ۲۰۱۸
- Java SE 11، تاریخ انتشار» ۲۵ سپتامبر ۲۰۱۸
ماشین مجازی جاوا (JVM)[ویرایش]
ماشین مجازی جاوا (JVM) برنامهای است که بایتکدهای زبان جاوا مطابق با سیستمعاملی خاص کامپایل کرده و آنها را برای اجرا در سطح سیستمعامل آماده میکند، در حقیقت شعار اصلی زبان جاوا (یکبار بنویس و همهجا اجرا کن) با استفاده از این ماشن مجازی امکانپذیر شده است.[۱۳]
برنامههای جاوا و اپلتها[ویرایش]
جاوا برای نوشتن انواع برنامههای کاربردی مناسب است. با جاوا میتوان انواع برنامههای زیر را نوشت:
- برنامههای تحت وب
- برنامهنویسی سیستمهای کوچک مانند تلفن همراه، رایانه جیبی و …
- برنامههای کاربردی بزرگ (Enterprise)
- برنامههای رومیزی (Desktop)
- و…
قابلیت خاصی در جاوا وجود دارد به نام اپلت. اپلتها امکانات فراوانی برای نوشتن برنامههای تحت وب در اختیار برنامهنویسان قرار میدهند. [نیازمند منبع] البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است. اپلتها نظیر فناوری سیلورلایت شرکت مایکروسافت هستند که برنامهنویسان را قادر میسازد تا امکاناتی را به مرورگر کاربر بیفزایند. البته تفاوت این دو در امنیت میباشد به گونهای که سیلورلایت به دلیل اینکه در محیطی به نام جعبه شنی (sandbox) اجرا میشوند امن هستند ولی اپلتها فاقد چنین امنیتی هستند و به سادگی هدف حملات استاندارد Social Engineering Toolkit واقع میشوند.
- سیستمعامل: تا سال ۲۰۰۴ net. تنها بر روی پلت فرم ویندوز اجرا میشد و برخی ویندوز را سیستمعامل غیرقابل اعتمادی در برنامهنویسی Enterprise میدانستند.[نیازمند منبع] ولی جاوا از این نظر انتخاب خوبی محسوب میشد.
- قابلیت حمل: جاوا بر روی سکوهای رایانش گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از ۱۰۲۴ پردازنده (CPU) برای پردازش.
خط مشی جاوا[ویرایش]
یکی از ویژگیهای جاوا قابل حمل بودن آن است. یعنی برنامهٔ نوشته شده به زبان جاوا باید بهطور مشابهی در کامپیوترهای مختلف با سختافزارهای متفاوت اجرا شود؛ و باید این توانایی را داشته باشد که برنامه یک بار نوشته و کامپایل شده و سپس در همه کامپیوترها اجرا گردد. به این صورت که کد کامپایل شدهٔ جاوا ذخیره میشود، اما نه بهصورت کد ماشین بلکه بهصورت بایتکد جاوا. دستورالعملها شبیه کد ماشین هستند، اما با ماشینهای مجازی که بهطور خاص برای سختافزارهای مختلف نوشته شدهاند، اجرا میشوند. در نهایت کاربر از سکوی جاوا نصب شده روی ماشین خود یا مرورگر وب استفاده میکند. کتابخانههای استاندارد یک راه عمومی برای دسترسی به ویژگیهای خاص فراهم میکنند. مانند گرافیک، نخکشی و شبکه. در بعضی از نسخههای ماشین مجازی جاوا، بایتکدها میتوانند قبل و در زمان اجرای برنامه به کدهای محلی کامپایل شوند. فایدهٔ اصلی استفاده از بایتکد، قسمت کردن است. اما ترجمهٔ کلی یعنی برنامههای ترجمه شده تقریباً همیشه کندتر از برنامههای کامپایل شدهٔ محلی اجرا میشوند. این شکاف میتواند با چند تکنیک خوشبینانه که در کاربردهای JVM قبلی معرفی شد، کم شود. یکی از این تکنیکها JIT است که بایتکد جاوا را به کد محلی ترجمه کرده و سپس آن را پنهان میکند. در نتیجه برنامه خیلی سریعتر نسبت به کدهای ترجمه شدهٔ خالص شروع و اجرا میشود. بیشتر JVMهای پیشرفته، بهصورت کامپایل مجدد پویا، در آنالیز JVM، رفتار برنامهٔ اجرا شده و کامپایل مجدد انتخاب شده و بهینهسازی قسمتهای برنامه، استفاده میشوند. کامپایل مجدد پویا میتواند کامپایل ایستا را بهینهسازی کند. زیرا میتواند قسمت hot spot برنامه و گاهی حلقههای داخلی که ممکن است زمان اجرای برنامه را افزایش دهند را تشخیص دهد. کامپایل JIT و کامپایل مجدد پویا به برنامههای جاوا اجازه میدهد که سرعت اجرای کدهای محلی بدون از دست دادن قابلیت انتقال افزایش پیدا کند.
تکنیک بعدی به عنوان کامپایل ایستا شناخته شدهاست؛ که کامپایل مستقیم به کدهای محلی است مانند بسیاری از کامپایلرهای قدیمی. کامپایلر ایستای جاوا، بایتکدها را به کدهای شیء محلی ترجمه میکند.
کارایی جاوا نسبت به نسخههای اولیه بیشتر شد. در تعدادی از تستها نشان داده شد که کارایی کامپایلرJIT کاملاً مشابه کامپایلر محلی شد. عملکرد کامپایلرها لزوماً کارایی کدهای کامپایل شده را نشان نمیدهند. یکی از پیشرفتهای بینظیر در در زمان اجرای ماشین این بود که خطاها ماشین را دچار اشکال نمیکردند. علاوه بر این در زمان اجرای ماشینی مانند جاوا وسایلی وجود دارد که به زمان اجرای ماشین متصل شده و هر زمانی که یک استثناء رخ میدهد، اطلاعات اشکال زدایی که در حافظه وجود دارد، ثبت میکنند.
پیادهسازی[ویرایش]
شرکت سان میکروسیستم مجوز رسمی برای پلت فرم استاندارد جاوا را به مایکروسافت ویندوز، لینوکس، و سولاریس (سیستمعامل) دادهاست. همچنین محیطهای دیگری برای دیگر پلت فرمها فراهم آوردهاست. علامت تجاری مجوز شرکت سان میکروسیستم طوری بود که با همهٔ پیادهسازیها سازگار باشد. به علت اختلاف قانونی که با ماکروسافت پیدا کرد، زمانی که شرکت سان ادعا کرد که پیادهسازی مایکروسافت از RMI یا JNI پشتیبانی نکرده و ویژگیهای خاصی را برای خودش اضافه کردهاست. شرکت سان در سال ۱۹۹۷ پیگیری قانونی کرد و در سال ۲۰۰۱ در توافقی ۲۰ میلیون دلاری برنده شد. در نتیجه کمی بعد مایکروسافت جاوا را به ویندوز فرستاد. در نسخهٔ اخیر ویندوز، مرورگر اینترنت نمیتواند از جاوا پلت فرم پشتیبانی کند. شرکت سان و دیگران یک سیستم اجرای جاوای رایگان برای آنها و نسخههای دیگر ویندوز فراهم آوردند.
اداره خودکار حافظه[ویرایش]
جاوا از حافظهٔ بازیافتی خودکار برای ادارهٔ حافظه در چرخهٔ زندگی یک شیء استفاده میکند. برنامهنویس زمانی که اشیاء به وجود میآیند، این حافظه را تعیین میکند؛ و در زمان اجرا نیز، زمانی که این اشیاء در استفادهٔ زیاد طولانی نباشند، برنامهنویس مسئول بازگرداندن این حافظهاست. زمانی که مرجعی برای شیهای باقیمانده نیست، شیهای غیرقابل دسترس برای آزاد شدن به صورت خودکار توسط بازیافت حافظه، انتخاب میشوند. اگر برنامهنویس مقداری از حافظه را برای شیهایی که زیاد طولانی نیستند، نگه دارد، چیزهایی شبیه سوراخ حافظه اتفاق میافتند.
یکی از عقایدی که پشت سر مدل ادارهٔ حافظهٔ خودکار جاوا وجود دارد، این است که برنامهنویس هزینهٔ اجرای ادارهٔ دستی حافظه را نادیده میگیرد. در بعضی از زبانها حافظه لازم برای ایجاد یک شیء، به صورت ضمنی و بدون شرط، به پشته تخصیص داده میشود؛ یا بهطور صریح اختصاص داده شده و از heap بازگردانده میشود. در هر کدام از این راهها، مسئولیت ادارهٔ اقامت حافظه با برنامهنویس است. اگر برنامه شیء را برنگرداند، سوراخ حافظه اتفاق میافتد. اگر برنامه تلاش کند به حافظهای را که هماکنون بازگردانده شده، دستیابی پیدا کند یا برگرداند، نتیجه تعریف شده نیست و ممکن است برنامه بیثبات شده یا تخریب شود. این ممکن است با استفاده از اشارهگر مدتی باقی بماند، اما سرباری و پیچیدگی برنامه زیاد میشود. بازیافت حافظه اجازه دارد در هر زمانی اتفاق بیفتد. بهطوریکه این زمانی اتفاق میافتد که برنامه بیکار باشد. اگر حافظهٔ خالی کافی برای تخصیص شیء جدید در هیپ وجود نداشته باشد، ممکن است برنامه برای چند دقیقه متوقف شود. در جایی که زمان پاسخ یا اجرا مهم باشد، ادارهٔ حافظه و منابع اشیاء استفاده میشوند.
جاوا از نوع اشارهگر ریاضی C و ++C پشتیبانی نمیکند. در جایی که آدرس اشیاء و اعداد صحیح میتوانند به جای هم استفاده شوند. همانند ++C و بعضی زبانهای شیگرای دیگر، متغیرهای نوعهای اولیهٔ جاوا شیگرا نبودند. مقدار نوعهای اولیه، مستقیماً در فیلدها ذخیره میشوند. در فیلدها (برای اشیاء) و در پشته (برای توابع)، بیشتر از هیپ استفاده میشود. این یک تصمیم هوشیارانه توسط طراح جاوا برای اجرا است. به همین دلیل جاوا یک زبان شیگرای خالص به حساب میآید.
گرامر[ویرایش]
گرامر جاوا محدودتر از ++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 را به این صورت به نام فایل اضافه کرد: "HelloWorld.java". این فایل اول باید با استفاده از کامپایلر جاوا به بایت کد کامپایل شود. در نتیجه فایل HelloWorld.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) برای اضافه کردن یک خط جدید برای رشتهٔ فرستاده شده اضافه میکند.
یک مثال دیگر به شرح زیر است:
public class دانشجو{
private int کد;
private String نام;
public دانشجو(int کد، String نام){
this.کد = کد;
this.نام = نام;
}
public int getکد(){
return this.کد;
}
public String getنام(){
return this.نام;
}
public void setکد(int کد){
this.کد = کد;
}
public void setنام(String نام){
this.نام = نام;
}
}
توزیعهای جاوا[ویرایش]
منظور از توزیع جاوا پیادهسازیهای مختلفی است که برای کامپایلر جاوا و همچنین مجموعه کتابخانههای استاندارد زبان جاوا (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 را ایجاد میکند.
1 // Hello.java (Java SE 5)
2 import java.awt.BorderLayout;
3 import javax.swing. *;
4
5 public class Hello extends JFrame {
6 public Hello() {
7 super("hello");
8 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
9 setLayout(new BorderLayout());
10 add(new JLabel("Hello, world!"));
11 pack();
12 }
13
14 public static void main(String[] args) {
15 new Hello().setVisible(true);
16 }
17 }
اولین جملهٔ import کامپایلر جاوا را هدایت میکند تا کلاس Borderlayout را از بستهٔ java.awt در جاوا به کامپایل اضافه کند؛ و import دوم همهٔ کلاسهای عمومی و واسط آنها را از بستهٔ javax.swing اضافه میکند. کلاس Hello کلاس Jframe را توسعه میدهد. کلاس Jframe یک پنجره با میلهٔ عنوان و کنترل بستن است.
زمانی که برنامه آغاز میشود، تابع main با JVM صدا زده میشود. این یک نمونهٔ جدید از کلاس Hello را ایجاد کرده و با صدا زدن تابع setvisible(boolean) با مقدار true نمایش داده میشود.
کتابخانههای کلاس[ویرایش]
کتابخانههای جاوا که به صورت بایت کد از کد اصلی کامپایل شدهاند، برای پشتیبانی از بعضی از کاربردهای جاوا، توسطJRE منتشر شدهاست. مثالهایی از این کتابخانهها عبارتند از:
- کتابخانههای مرکزی که شامل:
- کتابخانههایی که برای ساختار داده کاربرد دارند. مثل لیستها، درختها، مجموعهها، مترجمها.
- کتابخانهٔ پرداز XML (تجزیه، تغییر شکل، اعتبار)
- کتابخانههای موضعی و بینالمللی
- کتابخانههای انتگرالگیری که امکان تایپ کردن توسط سیستمهای بیرونی را میدهند.
- JDBC برای دستیابی به دادهها
- JNDI برای مراجعه و کشف کردن
- CORBA & RMI برای توسعهٔ کاربرد توزیع کردن
- کتابخانههای واسط کاربر
- AWT (توابع پنجرهای مجرد) که قسمتهایی از GUI را فراهم میکنند.
- کتابخانههای swing که در AWT ساخته شدهاند اما کاربردهایی از AWT widgetry را فراهم میکنند.
- APLها برای ضبط صدا، پردازش و بازنواختی
- کاربردهای وابستهٔ پلت فرم ماشینهای مجازی جاوا
- Plugins که توانایی اجرا شدن در مرورگرهای وب را به اپلت میدهد.
- java web start
- دادن مجوز و مستندسازی
ویرایش[ویرایش]
شرکت سان میکروسیستم، ۴ نوع ویرایش از کاربردهای مختلف جاوا را ارائه دادهاست:
- Java card for smartcard
- JavaME
- JavaSE
- JavaEE
ایرادات مطرح شده[ویرایش]
مصرف حافظه بالا و سختافزار در برنامههای نوشته شده و مدیریت غیر متوازن Thread Pool و عدم قابلیت توزیع پذیری.
حذف اشارهگرها در جاوا به دلیل مشکلاتی بوده که آنها در طول تاریخشان بوجود آوردهاند (البته در زمان گذشته که در برنامههایی مانند ++c برنامهنویس مستقیماً به مدیریت اشاره گر اقدام مینمود)، اگرچه این موارد در برنامههای سیستمی لازم بهنظر میرسد ولی در محیطهای تحتوب که بستر اصلی جاوا هستند میتوانند اثراتی به مراتب شدیدتر نسبت به آنچه در برنامههای سیستمی دارند داشته باشند و باعث میشود که توجه برنامهنویسان از مسائلی چون کارایی، قابلیت اطمینان و مقیاسپذیری برنامه به تنظیم اشارهگرها معطوف گردد.
از ابتدای بوجود آمدن جاوا، کتابخانه JNI - Java Native Interface در آن وجود داشته که قابلیت فراخوانی و دستکاری برنامههایی در ++C و… را میداده که از نمونههای آن میتوان به Jtwain که یک بستهایست که از کتابخانههای ویندوز برای اسکن عکس استفاده میکند، یا SWT که یک بسته نرمافزاریست که از کتابخانههای ویندوز و لینوکس (برحسب سیستمعامل) برای ساخت واسط کاربری (UI) استفاده میکند، نام برد.
تست برنامههای نوشته شده توسط جاوا[ویرایش]
جاوا امروزه به عنوان یک زبان پر کاربرد به خصوص در برنامههای کاربردی تجاری مطرح است و بسیاری از سازمانها و شرکتهای از این زبان و تکنولوژیهای مربوط به آن استفاده میکنند. ابزارهای زیادی برای تست برنامههای نوشته شده توسط جاوا مورد استفاده قرار میگیرند. برای مثال: در جاوا به دلیل مدیریت حافظه توسط Garbage collection ممکن است به دلیل نوشتن غیر استاندارد برنامه در حافظه نشتی داشته باشیم (memory leakage)که این امر سبب میشود حافظه گرفته شده آزاد نشود و با پر شدن حافظه برنامه دچار خلل شود. برای حل این مشکل و سایر مشکلات نیاز به تست نرمافزارهای نوشته شده در جاوا هستیم. با بزرگ شدن حجم نرمافزار تست آن نیز سختتر میشود. بهتر از قبل از نوشتن برنامههای تجاری بزرگ به تست و نحوه تضمین کیفیت آن هم فکر شود.[۱۴]
شباهت اسمی جاوا و جاوااسکریپت[ویرایش]
برخی مردم به علت شباهت اسمی، جاوا و جاوااسکریپت را با هم اشتباه میگیرند. در حالیکه این دو زبان گرچه در ظاهر و کلمات شباهت دارند ولی بهطور ساختاری با یکدیگر متفاوت هستند. جاوااسکریپت محصول شرکت نت اسکیپ است. جاوا برای اجرا باید به زبان ماشین مجازی ترجمه شود اما جاوااسکریپت زبانی است که معمولاً در صفحات وب نوشته میشود و توسط مرورگر تفسیر میگردد. در جاوا متغیرها همگی بر اساس نوع آنها معرفی میشوند ولی در جاواسکریپت نوع متغیرها به صورت ضمنی مشخص میشود[۱۵]
تغییرات مهم جاوا در نسخه ۸[ویرایش]
جاوا در نسخه ۸ تغییرات بسیار مهم و گستردهای داشتهاست. مفاهیمی مانند واسطهای تابعی، عبارتهای لامبدا، جویبار (Stream) و امکانات گسترده کتابخانهای در این نسخه معرفی شدهاند. در این نسخه، رویکرد برنامهنویسی تابعی، علاوه بر رویکرد شیءگرایی، ممکن شدهاست.
جاوا نسخه ۹ و ماژولار شدن جاوا (پروژه Jigsaw)[ویرایش]
در نسخهٔ جاوا ۹ که در تاریخ ۲۱ سپتامبر ۲۰۱۷، به صورت عمومی عرضه شد، پروژهای به نام Jigsaw به آن اضافه شد که قابلیت برنامهنویسی در قالب ماژول را در جاوا امکانپذیر کرد
داشتن یک پلتفرم ماژولار و ماژولار شدن JDK به توسعهدهندگان آن کمک میکند چنین پلتفرم قدیمی، گنده و بزرگی را مدیریت کنند و به جلو حرکت دهند. آنطور که معماران آن میگویند، الان تنها فرصتی بود که به سمت ماژولار کردن JDK پیش بروند وگرنه در آینده هرگز چنین اتفاقی ممکن نمیشد. ماژولاریتی علاوه بر کمک کردن به توسعهدهندگان JDK برای حرکت آن رو به جلو، فرصتی استثناییتر را برای ما ایجاد میکند. تصور کنید که یک ماشین حساب ساده تحت کنسول نوشتهاید، نه از امکانات JavaEE استفاده میکنید، نه کاری به CORBA دارید، نه JPA. احتمالاً تنها چیزی که نیاز دارید موارد پایهای است. اما برای اجرا و توزیع برنامهتان نیاز به یک JRE کامل و حجیم دارید که احتمالاً راه انداختنش هم چندان ارزان نیست. اما با ماژولار شدن جاوا شما میتوانید فقط ماژولهایی که استفاده کردهاید را در قالب یک Runtime Image داشته باشید که دیگر چیزهای اضافیای که از آنها استفاده نکردهاید را ندارد. با این قابلیت، حجم برنامهها کم شده و شما میتوانید از دستگاههای Embedded که حافظه محدودتری دارند هم استفاده کنید.
هر ماژول دارای یک اسم است، کدهای مرتبط و پکیجها را در درون خود نگه میدارد و کامل است به این معنی که یک کار مشخص را انجام میدهد و وظایفش را از طریق APIهای مشخص شده در دسترس دیگران قرار میدهد. یک ماژول به صورت صریح بیان میکند برای کار کردن به چه ماژولهایی نیاز دارد و کدام بخش از پکیجهایش برای دیگر ماژولها قابل دسترسی است. اینگونه به سادگی میتوانیم وابستگی بین ماژولها را تشخیص دهیم، بر روی Internal APIهایمان کنترل داشته باشیم و در صورت نبود یک ماژول در آغاز برنامه از نبود آن فوراً مطلع شویم و در صورت وجود هرگونه تداخلی به سرعت به خطا بربخوریم.[۱۶]
جاوا ۱۰ و Local Variable Type inference[ویرایش]
این نسخه که در نسخه ۲۰ مارس ۲۰۱۸ عرضه گردید، یک نسخه کوتاه مدت بوده و بیشتر شامل مجموعهای از بهینهسازیها میباشد. در این میان قابلیت جالبی به نام Local Variable Type Interface دیده میشود. اگر با زبان پایتون کد زده باشید این قابلیت شبیه به تعریف متغیر در این زبان است. بهطور خلاصه باید گفت با استفاده از این قابلیت دیگر نیاز به تعیین دقیق نوع متغیرهای محلی نداریم. این کامپایلر است که نوع متغیر را با توجه به مقداردهی تشخیص میدهد. تا به الان اگر میخواستیم لیستی از رشتهها بسازیم، کد مشابه پایین را میزدیم:
List<String> list = new ArrayList<>() ;
حال اگر بخواهیم از این قابلیت جدید استفاده کنیم کافیست به جای List (در اینجا نوع متغیر است) var را جایگزین کنیم. پس کد بالا به صورت زیر تغییر خواهد کرد:
var list = new ArrayList<String>() ;
var نه کلمهٔ کلیدی جدیدی است و نه هیچ بایت کد جدیدی برای آن تعریف شدهاست. براساس مقداری که به متغیر میدهیم تفسیر میشود.[۱۷]
جستارهای وابسته[ویرایش]
پیوند به بیرون[ویرایش]
پانویس[ویرایش]
- ↑ "The History of Java Technology". Retrieved October 6, 2012.
- ↑ Java 5.0 added several new language features (the enhanced for loop, autoboxing, varargs and annotations), after they were introduced in the similar (and competing) C# language [۱] [۲]
- ↑ Gosling, James; and McGilton, Henry (May 1996). "The Java Language Environment".
- ↑ Gosling, James; Joy, Bill; Steele, Guy; and Bracha, Gilad. "The Java Language Specification, 2nd Edition".
- ↑ "The A-Z of Programming Languages: Modula-3". Computerworld.com.au. Retrieved 2010-06-09.
- ↑ Niklaus Wirth stated on a number of public occasions, e.g. in a lecture at the Polytechnic Museum, Moscow in September, 2005 (several independent first-hand accounts in Russian exist, e.g. one with an audio recording: Filippova, Elena (September 22, 2005). "Niklaus Wirth's lecture at the Polytechnic Museum in Moscow".), that the Sun Java design team licenced the Oberon compiler sources a number of years prior to the release of Java and examined it: a (relative) compactness, type safety, garbage collection, no multiple inheritance for classes -- all these key overall design features are shared by Java and Oberon.
- ↑ پاتریک ناتون cites آبجکتیو-سی as a strong influence on the design of the Java programming language, stating that notable direct derivatives include Java interfaces (derived from Objective-C's protocol) and primitive wrapper classes. [۳]
- ↑ TechMetrix Research (1999). "History of Java" (PDF). Java Application Servers Report.
The project went ahead under the name "green" and the language was based on an old model of UCSD Pascal, which makes it possible to generate interpretive code
- ↑ "A Conversation with James Gosling – ACM Queue". Queue.acm.org. 2004-08-31. Retrieved 2010-06-09.
- ↑ Introduction to Programming with the Java, Harvey M. Deitel and Paul J. Deitel
- ↑ ۱۱٫۰ ۱۱٫۱ The Java Language Environment
- ↑ Core Java™ 2 Volume I - Fundamentals, Seventh Edition Chapter 1
- ↑ «زبان برنامه نویسی جاوا چیست؟».
- ↑ https://www.mohandespishegan.com/education-courses/papers/163-software-testing
- ↑ Krill, Paul. JavaScript creator ponders past, future. . InfoWorld, 2008-06-23. Retrieved on 2009-05-19.
- ↑ محمدحسین ریماز. «جاوا ۹ و Jigsaw».
- ↑ «جاوا 10 و local variable».
منابع[ویرایش]
- Sun MicroSystems Documentation on JDK 1.5
- Deitel & Deitel , Java How to Program, 6th Ed. Prentice Hall, 2005
- Bruce Eckel, Thinking in Java, 3rd Edition, www.BruceEckel.com
- Fowler, Martin. Patterns of Enterprise Application Architecture
- جاوا: چگونه آن را برنامهنویسی کنیم (چاپ هفتم) (انگلیسی)
- جاوا: تفکر در جاوا (چاپ چهارم) (انگلیسی)
پیوند به بیرون[ویرایش]
![]() |
در ویکیانبار پروندههایی دربارهٔ جاوا (زبان برنامهنویسی) موجود است. |
- جاوا (زبان برنامهنویسی)
- پلتفرم جاوا
- جاوا
- زبانهای برنامهنویسی ایستا
- زبانهای برنامهنویسی خانواده سی
- زبانهای برنامهنویسی ساختهشده در ۱۹۹۵ (میلادی)
- زبانهای برنامهنویسی شیءگرا
- زبانهای برنامهنویسی کلاس محور
- زبانهای برنامهنویسی ماشین مجازی جاوا
- زبانهای برنامهنویسی همروند
- سان مایکروسیستمز
- معرفیشدههای مرتبط با رایانه در ۱۹۹۵ (میلادی)
- نرمافزارهای چندسکویی