سوالات آموزش مبانی جاوا

س ۱ : تاریخچه جاوا چیست؟ چقدر محبوب است؟س ۲ : ویژگی های جاوا چیست؟س ۳ : چگونه جاوا یک زبان مستقل از پلتفرم است؟س ۴ : JRE، JDK، JVM در جاوا چیست ، و چه تفاوتهایی بین آنها وجود دارد ؟س ۵ : جاوا Bean چیست؟س ۶ : چگونه custom annotations در جاوا ایجاد کنیم؟س ۷ : interface در جاوا 8 چیست؟س ۸ : تفاوت بین کلاس Abstract و Interface در جاوا 8 چیست؟س ۹ : چند راه برای پیاده سازی Functional Interface در جاوا وجود دارد؟پاسخ سوال ۱ :در اوایل دهه نود، جاوا توسط تیمی به رهبری جیمز گاسلینگ برای Sun Micro-systems (Now Oracle) ایجاد شد. این در ابتدا برای استفاده در دستگاه های تلفن همراه دیجیتال، مانند تلفن های همراه طراحی شده بود. با این حال، زمانی که جاوا 1.0 در سال 1996 برای عموم منتشر شد، تمرکز اصلی آن به استفاده در اینترنت تغییر کرد. با ارائه روشی به توسعه دهندگان برای تولید صفحات وب متحرک، تعامل بیشتری با کاربران فراهم کرد. در طول سالها این زبان به عنوان یک زبان موفق برای استفاده در اینترنت و خارج از اینترنت تکامل یافته است. یک دهه بعد، این زبان هنوز هم با بیش از 6.5 میلیون توسعه دهنده در سراسر جهان، یک زبان بسیار محبوب است. در بیش از 25 سال گذشته جاوا توسط اکثر مشتریان به عنوان بهترین زبان برای توسعه برنامه ها پذیرفته شده است. ویژگی های جاوا به خصوص ویژگی های جاوا 8 باعث محبوبیت بیشتر جاوا در بین مشتریان و کاربران می شود.پاسخ سوال ۲ : 12 کلمه مهم (ویژگی) در جاوا وجود دارد.ساده: یادگیری آسان، بسیاری از ویژگی های دشوار مانند اشاره گرها، مفاهیم وراثت چندگانه از جاوا حذف شده اند.مستقل از پلتفرم: یک بار در هر کجا اجرا شود بنویسید. اگر تغییری در معماری سیستم (Architecture Neutral) خود انجام دهید، برنامه جاوا همچنان بدون مشکل اجرا می شود. قابل حمل (Portable): ما می توانیم کد جاوا را به راحتی از ویندوز به لینوکس منتقل کنیم.امن (Secure): به شما امکان می‌دهد برنامه‌هایی ایجاد کنید که نمی‌توان از خارج به آنها حمله کرد.شی گرا (Object Oriented): از JDK 1.8 به بعد جاوا برنامه نویسی تابعی (رویه ای) را نیز در خود جای داده است.چند رشته ای (Multi-threaded): می توانید برنامه هایی را با رشته های فعالیت همزمان بسازید که در نتیجه برنامه هایی با پاسخگویی بسیار بالا ایجاد می شود.قوی (Robust): داشتن عادات برنامه نویسی قابل اعتماد برای ایجاد برنامه های کاربردی بسیار قابل اعتماد.توزیع شده (Distributed): کاربران را برای ایجاد برنامه های کاربردی توزیع شده در جاوا تسهیل می کند. برای ایجاد برنامه های کاربردی توزیع شده از RMI، EJB، CORBA و غیره استفاده می کنیم.تفسیر شده (Interpreted): جاوا قدرت زبان های کامپایل شده را با انعطاف پذیری زبان های تفسیر شده یکپارچه می کند.کارایی بالا (High Performance): کد جاوا پس از کامپایل به بایت کد تبدیل می شود که توسط کامپایلر جاوا بسیار بهینه شده است، به طوری که ماشین مجازی جاوا (JVM) می تواند برنامه های جاوا را با سرعت کامل اجرا کند. قابل تغییر (Dynamic): از بارگذاری پویا کلاس ها پشتیبانی می کند. این بدان معنی است که بارگیری کلاس بر اساس تقاضا اتفاق می افتد.پاسخ سوال۳ :به طور کلی وظیفه کامپایلر در یک زبان برنامه نویسی تبدیل کد منبع به کد قابل فهم ماشین (که کد اجرایی نیز نامیده می شود) است. یک حالت دیگر از کد بین کد منبع و کد قابل فهم ماشین در جاوا وجود دارد که به آن کد بایت می گویند. در واقع تبدیل کد منبع جاوا به کد قابل فهم برای ماشین یک فرآیند دو مرحله ای است. یکی از کد منبع تا بایت کد (فایل کلاس .) است که توسط کامپایلر انجام می شود. سایر موارد از کد بایت تا کد قابل فهم ماشین است که توسط JVM انجام می شود. با این حال JVM نرم افزاری است که به طور خودکار با نصب JDK ارائه می شود.ا JVM وابسته به پلتفرم است. بنابراین همزمان با تبدیل JVM از کد بایت به کد اجرایی، آن را با پلتفرمی که به آن تعلق دارد سازگار می کند. در این فرآیند کامل دو مترجم وجود دارد که این امکان را فراهم می کند. کامپایلر و JVM. کامپایلر می تواند فایل منبع (فایل جاوا) را بخواند. به طور مشابه JVM می تواند بایت-کد (فایل کلاس .) را بخواند. به دلیل ویژگی شعار جاوا وابسته به پلتفرم در Write Once Run Anywhere (WORA) . همچنین نکات زیر مهم است که در نظر داشته باشید.کد منبع جاوا - بایت کد جاوا مستقل از پلتفرم - کامپایلر جاوا مستقل از پلتفرم - کد اجرایی جاوا مستقل از پلتفرم - ماشین مجازی جاوا وابسته به پلت فرم - نرم افزار جاوا وابسته به پلتفرم (jdk) - برنامه جاوا وابسته به پلت فرم - برنامه نرم افزار جاوا مستقل از پلتفرم - برنامه نرم افزار جاوا مستقل از پلتفرمزبان‌هایی که تبدیل کد منبع به زبان ماشین یک فرآیند واحد است، آن زبان‌ها تحت دسته‌بندی وابسته به پلتفرم مانند C، C++ قرار می‌گیرند.پاسخ سوال ۴ : اول از همه بیایید بفهمیم که کاربرد این اصطلاحات در جاوا چیست. JRE (Java Runtime Environment) به ما کمک می کند تا کد کامپایل شده را در جاوا اجرا کنیم در حالی که JDK (کیت توسعه جاوا) به ما در کامپایل و اجرای کد کمک می کند. از این رو اگر می خواهید کدهای از قبل کامپایل شده مانند کدی به شکل jar/war/ear اجرا کنید، فقط JRE کافی است. از طرف دیگر اگر بخواهید کد خود را کامپایل و سپس اجرا کنید، باید JDK را در سیستم خود داشته باشید. JVM (ماشین مجازی جاوا) به ما کمک می کند تا کد کامپایل شده (کد بایت) را به کد زبان ماشین تبدیل کنیم. JRE شامل JVM و JDK حاوی JRE است.JRE = Java API + JVM JDK = کامپایلر + JRE JVM = مترجم + JITا (JVM) برنامه جاوا را با کمک مترجم اجرا می کند.JIT (کامپایلر Just in time) به مفسر کمک می کند تا زمانی که کند است سریع اجرا شود.Java API برنامه های از پیش تعریف شده ای مانند String، System، Thread، Exception، FileInputStream، FileOutputStream، ArrayList، Collections و غیره را حمل می کند.پاسخ سوال ۵ :ا (Java Bean) یک کلاس کمکی ساده جاوا است که برای انتقال داده ها بین کلاس ها یا برنامه ها استفاده می شود. هرگز به عنوان یک کلاس اصلی عمل نمی کند، بلکه مانند پستچی یا تحویل دهنده بین دو کلاس است. هیچ منطقی در آن نیست برای اینکه بیش از 3 مقدار را از یک کلاس به کلاس دیگر یا از یک پروژه به پروژه دیگر منتقل کنیم، باید از Java beans پشتیبانی کنیم. اگر مقدار کمتر از 3 باشد، باید از آرگومان های متد برای انتقال داده ها استفاده کنیم. با این حال یک طراحی خوب در جاوا به ما توصیه نمی کند که بیش از 3 پارامتر متد داشته باشیم. شما می توانید کتابخانه جاوا (java doc) را بررسی کنید، در یک متد بیش از 3 پارامتر پیدا نمی کنید، به ندرت ممکن است 4 پارامتر داشته باشد اما بیشتر از آن نباشد.چند دستورالعمل استاندارد برای توسعه کلاس Java Bean وجود دارد:1. باید جاوا Bean را به عنوان یک کلاس عمومی اعلام کنیم.2. این یک توصیه برای پیاده سازی java.io.Serializable است (برای ارسال داده ها در سراسر شبکه استفاده می شود زیرا ما به راحتی می توانیم داده های سریال سازی را از طریق شبکه ارسال کنیم). اگر نمی خواهید داده ها را از طریق شبکه ارسال کنید اختیاری است.3. همه متغیرهای عضو (ویژگی های bean) باید خصوصی و غیر ایستا باشند (اگر بخواهیم داده های 20 کارمند را ارسال کنیم، 20 مقدار ارسال می شود. اگر استاتیک آن فقط یک مقدار ارسال می شود، بنابراین اعلام غیر ایستا اجباری می شود. برای بهره مندی کامل از Java Bean)4. همچنین هر ویژگی bean باید یک متد تنظیم کننده و یک متد دریافت کننده (Accessor Methods) داشته باشد.پاسخ سوال ۶ :همانطور که در اسنپ کد زیر نشان داده شده است باید یک رابط با '@' ایجاد کنیمMyCustomAnnotation.javaimport java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.SOURCE) @Target(ElementType.TYPE) public @interface MyCustomAnnotation { int studentAge() default 18; String studentName(); String stuAddress(); String stuStream() default &quotCSE&quot } اکنون بیایید این حاشیه نویسی سفارشی را در کلاس "MyClass" اعمال کنیم. در زیر کد است.MyClass.java@MyCustomAnnotation(studentName=&quotElbert&quot stuAddress=&quotCalifornia&quot) public class MyClass{ }برای یادگیری کامل حاشیه نویسی و نحوه ایجاد حاشیه نویسی سفارشی، لطفاً از آموزش Annotations In Java استفاده کنید .پاسخ سوال ۷ :اینترفیس ها یک توافق بین کلاس و دنیای بیرون را تشکیل می دهند و این توافق در زمان ساخت توسط کامپایلر اجرا می شود. در برنامه نویسی شی گرا، گاهی اوقات تعیین اینکه یک کلاس باید چه کاری انجام دهد، اما نه اینکه چگونه آن را انجام دهد، مفید است. سپس از Interfaces استفاده می کنیم. مشخص می کند که چه کاری باید انجام شود، اما نه چگونه. هنگامی که یک رابط تعریف شد، هر تعداد کلاس می توانند آن را پیاده سازی کنند. همچنین یک کلاس می تواند هر تعداد اینترفیس را پیاده سازی کند.از جاوا 8 به بعد، یک رابط می تواند متدهای انتزاعی یا پیش فرض(default) یا ایستا (static) یا هر ترکیبی از دو یا همه آنها داشته باشد. برای پیاده سازی یک اینترفیس، یک کلاس باید پیاده سازی هایی را برای متدهای انتزاعی توصیف شده توسط اینترفیس ارائه دهد. هر کلاس در تعیین جزئیات پیاده سازی خود آزاد است. بنابراین، دو کلاس ممکن است یک رابط یکسان را به روش‌های مختلف پیاده‌سازی کنند، اما هر کلاس همچنان از مجموعه روش‌های مشابهی پشتیبانی می‌کند. به عنوان مثال به کد زیر توجه کنید..interface Java8 { void m1(); //abstract by default as it has no body default void m2() { //introduced in java 8 with body } static void m3() { //introduced in java 8 with body } }همانطور که در قطعه کد نشان داده شده است و بر خلاف رابط‌های تا جاوا 7، از جاوا 8 به بعد جدا از روش‌های انتزاعی، اکنون یک رابط می‌تواند متدهای پیش‌فرض و ایستا با بدنه‌های متد داشته باشد.پاسخ سوال ۸ :پس از یادگیری Interfaces در زمینه جاوا 8، ممکن است یک شک در ذهن شما ایجاد شود که تفاوت بین کلاس های رابط و انتزاعی پس از معرفی روش های پیش فرض و استاتیک چیست. بیایید شک را از جدول زیر برطرف کنیم:پاسخ سوال ۹:پنج راه برای پیاده سازی Functional Interface در جاوا وجود دارد.1. توسط کلاس بیرونی صریح2. توسط کلاس داخلی صریح3. توسط کلاس داخلی ناشناس4. توسط بیان لامبدا (Lambda expression)5. مرجع با روش (Method Reference)