جافا المبرمجين معظم المخزون الأخطاء شيوعا من أعلى 10

1. مجموعة إلى ArrayList

من أجل تحقيق مجموعة لتحويل ArrayList، العديد من المبرمجين جافا استخدام التعليمات البرمجية التالية:

Arrays.asList لا إرجاع كائن ArrayList، ولكن هذه الفئة هي صالحة الطبقة في الطبقات الداخلية ثابتة خاصة، بدلا من فئة java.util.ArrayList المعتادة. هذه الفئة لديها مجموعة java.util.Arrays.ArrayList ()، والحصول على ()، ويتضمن الأسلوب () وما شابه ذلك، ولكن ليس لديها أي طريقة لإضافة أو إزالة أي عنصر. منذ حجم الطبقة (حجم) هو ثابت. من أجل إنشاء ArrayList الحقيقي، يجب أن رمز تبدو هذه:

ونحن نعلم، ArrayList منشئ يمكن قبول كائن من نوع مجموعة، ونحن java.util.Arrays.ArrayList هي مجرد واحدة من الفئات الفرعية. في الواقع، رمز أكثر كفاءة مثال:

2. مجموعة يحتوي على قيمة معينة

من أجل التحقق ما إذا كانت مجموعة تحتوي على قيمة معينة، فإن العديد من المبرمجين جافا استخدام التعليمات البرمجية التالية:

وظيفيا، رمز الصحيح، ولكن تستهلك الكثير من الأداء في سياق مجموعة من قائمة بدورها، قائمة من دون تعيين. يمكننا تحسين الشكل التالي:

بدلا من ذلك، إلى مزيد من تحسين معظم كود كفاءة هو على النحو التالي:

3. إزالة عنصر في قائمة متكررة

أولا، نظرة على رمز لإزالة قائمة العناصر في عملية تكرارية:

رمز إخراج هذا المثال:

هناك خطأ خطير جدا في هذه التعليمات البرمجية. عند إزالة عنصر، سيتم تخفيض حجم قائمة (حجم)، ولكن أيضا تغيير النقاط للمؤشر. لذلك، وذلك باستخدام مؤشر في عملية التكرار، ونحن لن تكون قادرة على إزالة العناصر الأكثر محدد من قائمة بشكل صحيح.

واحد منكم قد تعرف لعلاج هذه المشكلة هو استخدام مكرر (مكرر). أيضا، قد تعتقد في بيان foreach جافا والمكررات (مكرر) هي مشابهة جدا، ولكن ليس تماما القضية. النظر في نموذج التعليمات البرمجية التالية:

فإن نموذج التعليمات البرمجية رمي خارج ConcurrentModificationException. نحن ينبغي تعديل كما هو مبين أدناه:

يجب استدعاء المقبل طريقة () قبل طريقة إزالة (). في حلقة foreach، المترجم يجعل طريقة إزالة () قبل إلى الطريقة التالية () يسمى، الأمر الذي أدى إلى استثناء ConcurrentModificationException. تفاصيل محددة يمكن الاطلاع ArrayList.iterator) رمز المصدر (.

وأضاف: هناك طريقة أخرى لاستخدام لحلقة:

 ل(كثافة العمليات ط = 0؛ ط < list.size ()؛) { إذا ( "أ" .equals (list.get (ط))) { list.remove (ط)؛ تواصل. } ط ++؛ }

بعد حذف مؤشر الملف لا نقل عناصر إلى اليسار.

4. جدول هاش مقابل HashMap

المدروسة القراء بنية بيانات معرفة بنية البيانات الهامة للغاية ودعا جدول تجزئة. في جافا، وفئة جدول التجزئة المقابلة هي HashMap بدلا من جدول هاش. الفرق الأساسي بين HashMap وجدول هاش هو:

HashMap غير متزامن، تتم مزامنة جدول هاش.

استخدام نوع بدائي مجموعة

في جاوة، فمن السهل أن أنواع بدائية ونوع البدل غير محدود من الارتباك. نعطي مثالا يتصل مجموعة: مجموعة هو النوع الأصلي؛ مجموعة < ؟ > هذا هو لانهائي نوع البدل. ونحن ننظر على سبيل المثال باستخدام نوع الأصلية المستخدمة في القائمة:

رمز عينة لرمي استثناء:

نوع مجموعة الأصلي هو الكثير من النوع الخطأ من المخاطر، لأن النوع الأصلي ليس ثابت نوع التحقق. في الواقع، مجموعة، مجموعة < ؟ > ويوجد فرق كبير جدا بين مجموعة.

6. الوصول

كثير من مبتدئين يفضل استخدام جافا لتعديل أفراد الجمهور من الطبقة. لذلك يمكنك بسهولة الوصول والوصول المباشر للأعضاء. ومع ذلك، هذا هو أسلوب البرمجة سيئة للغاية، ينبغي خفض نمط التصميم الصحيح بقدر الإمكان الوصول إلى أعضاء الفئة.

7. ArrayList مقابل قائمة متصلة

وهناك الكثير من مبتدئين جافا لا يفهمون الفرق بين ArrayList وقائمة متصلة، ولذلك تماما باستخدام فقط ArrayList بسيط نسبيا، ونحن لا نعرف حتى JDK هناك قائمة متصلة. ومع ذلك، وفقا لسيناريوهات معينة، فإن هذه الخيارات قائمة اثنين تؤدي إلى اختلافات كبيرة في أداء البرنامج. بعبارات بسيطة: عندما السيناريو هناك الكثير من عمليات إضافة / إزالة، عندما كمية صغيرة فقط من عمليات الوصول العشوائي، يجب اختيار قائمة متصلة، في سيناريوهات أخرى، النظر في استخدام ArrayList.

8. متغير مقابل غير قابل للتغيير

الأجسام الثابتة لديها الكثير من المزايا، مثل بسيطة وآمنة وهلم جرا. ومع ذلك، لكل من قيم مختلفة، ونحن بحاجة إلى مثل كائن. وعلاوة على ذلك، تسببت في مشكلة جيل من قبل العديد من الأشياء التي قد تتسبب في جمع القمامة بشكل متكرر. ولذلك، ينبغي أن تؤخذ في اختيار متغير أو فئة فئة ثابتة في الاعتبار قبل اتخاذ أي قرار.

بشكل عام، لا يمكن للكائنات متغير تجنب خلق عدد كبير من الكائنات الوسيطة. والمثال الكلاسيكي هو عدد كبير جدا من اختصار الروابط الكائن سلسلة إلى كائن سلسلة طويلة. إذا كان الطبقات ثابتة، عملية ربط سلسلة سوف تنتج كميات كبيرة من، لكائن سلسلة متوسطة تعافى فورا القمامة، والتي سوف تستهلك كمية كبيرة من الذاكرة وأداء وحدة المعالجة المركزية. في هذه الحالة، ب StringBuilder متغير أو StringBuffer هو الصحيح.

بالإضافة إلى ما سبق، قد يكون الهدف المتغير للكائنات ثابتة في سيناريوهات أخرى. على سبيل المثال، يتم تمرير كائن متغير إلى أسلوب الداخلي، والتي الكائن يمكن جمعها من قبل عدد وافر من النتائج، والقفز من عدد وافر من دورات دون التسلسل الهرمي.

9. الخلافة منشئ

تحدث خطأين مترجم عندما يعود الشكل أعلاه إلى: الفئة الأصل لا يعرف منشئ افتراضي وفرعية واستدعاء منشئ افتراضي من الفئة الأصل. في جاوة، إذا لم فئة تحديد أي منشئ، المترجم إدراج تلقائيا من منشئ افتراضي للفئة. مرة واحدة يتم تحديد فئة في أي منشئ واحد، والمترجم لا إدراج أي من المنشئ للفئة. في المثال أعلاه من والطبقة السوبر تحدد نوع حجة سلسلة منشئ، وذلك فقط لمنشئ فئة ليس لديها منشئ افتراضي.

وEMPS؛ الفرعية نحن فئة فرعية، حددنا اثنين الصانعين: وسيطة واحدة من منشئ نوع سلسلة، والآخر هو وظيفة افتراضية دون طعام. لأنها لم يكن لديك منشئ الفئة الأصل الذي تم تحديده في المكالمة الأولى من الجسم وظيفة، فإنها تحتاج إلى استدعاء منشئ افتراضي من الطبقة المتفوقة سوبر. ومع ذلك، فإن الفئة الأصل سوبر منشئ افتراضي غير موجود، لذلك ذكرت مترجم رسائل الخطأ اثنين.

وأضاف: كائنات Java ثبت أيضا هي كائنات مثل الطبقة النيوترون الأم، ونحن سوف إنشاء كائن من الفئة الأصل عند إنشاء فئة فرعية. ومن المفهوم أيضا أنه الوالدين فئة مرجع لافتا فرعية الكائن. على سبيل المثال:

حزمة cn.qlq.action. فئة العمومي سوبر { محمية اسم سلسلة = "XXX". الجمهور السوبر () { System.out.println ( "خلق سوبر")؛ } getName باطلة العامة () { System.out.println ( "اسم الفئة الأصل" + this.name)؛ } ساكنة العام باطلة الرئيسية (سلسلة وسائط) { جديد الفرعية () getName ()؛ } } الفئة الفرعية يمتد سوبر { الفرعية العام () { System.out.println ( "خلق الفرعية")؛ } Override getName باطلة العامة () { this.name = "فلان الفلاني". super.getName ()؛ System.out.println (this.name)؛ } }

 النتائج:

سوبر خلق

دون خلق

اسم جلوس الفئة الأصل

جو سميث

10. الطريق إلى بناء اثنين من سلسلة وجوه

السلاسل في جاوة الكائنات التي تم إنشاؤها مع اثنين من الطرق الشائعة:

ما هو الفرق بينهما هو؟ دعونا ننظر التعليمات البرمجية التالية:

تعكس القلعة الزهور الخريف ازدهار الخريف الخريف الخريف فراشة النحل حول PFS

أصدرت 30 مقاطعة 2019 هدف نمو الناتج المحلي الإجمالي: لتعيين قيم الفاصلة في صلب

الحرب مينيسوتا الرعد، ووريورز معركة لوس انجليس كليبرز، وغدا أنت لمح مجال اللعبة؟

1000000 -300000000 الناس استقروا في المدن الكبيرة إلغاء القيود

صدر اليوم الوطني 2018 دليل الطقس معظم أنحاء البلاد يجب ان يسافر

20 ميلا ساعي البريد، وركوب الدراجات النارية سيئة أربعة! بعد 80 ساعي البريد الشاب الأنيق

وقال كبير نيسون دورما! Humanwell الطب الشهرة المستحقة 3.0 مليار دولار، أكثر من عشر شركات فقدان أكثر من 1 مليار ......

مخبأ التكوين الربيع رديس تعليق

أمام السماء الزرقاء لوحة رسمت رسم يوم وطني للطقس جيدة في تشنغدو

أنتجت علي - سيكون على ما يرام، والشنق أيام المقلية وزعت طابور رسالة الوسيطة RocketMQ

موسم الخريف لرؤية الجمال من جبال Xing'an الكبرى "خمسة هوا شان"

كأس فرنسا: Muba بى وي Ladi اطلاق النار الشامل انفجار، باريس، نانت 3-0 لتصل إلى المباراة النهائية