اختار الكاتب صندوق التمويل المفتوح والمجاني لتلقي تبرع كجزء من برنامج “اكتب من أجل التبرع”.
مقدمة
جافا هي لغة برمجة من نوع ثابت. وهذا يعني أنه عند إنشاء متغير، يجب عليك أيضًا تحديد نوع البيانات الخاص به، والذي هو نوع المعلومات التي يخزنها. هذا على عكس اللغات من نوع ديناميكي، مثل PHP. مع اللغات من نوع ديناميكي، لا تحتاج إلى تحديد نوع البيانات لمتغير، مما قد يبدو مريحًا.
ومع ذلك، فإن معرفة أنواع البيانات واستخدامها بشكل صحيح يتيح للمطورين تحسين رموزهم لأن كل نوع لديه متطلبات محددة للموارد. كما أنه إذا قمت بتحديد نوع بيانات وحاولت تخزين نوع مختلف، مثل الخطأ، فلن تتمكن من تجميع الكود. وبالتالي، مع اللغات من نوع ثابت، يمكنك اكتشاف الأخطاء حتى قبل أي اختبار.
يحتوي Java على نوعين من أنواع البيانات: الأساسية و المرجعية (المعروفة أيضًا بـ غير الأساسية). في هذا البرنامج التعليمي، ستستخدم المتغيرات لتخزين واستخدام المعلومات في برنامج Java لتعلم بعض أنواع البيانات الشائعة المستخدمة في Java. هذه ليست نظرة شاملة على جميع أنواع البيانات، ولكن هذا الدليل سيساعدك في التعرف على الخيارات المتاحة لك في Java.
المتطلبات المسبقة
لمتابعة هذا البرنامج التعليمي، ستحتاج:
-
بيئة يمكنك فيها تنفيذ برامج جافا لمتابعة الأمثلة. لتهيئة هذا على جهازك المحلي، ستحتاج إلى ما يلي:
- جافا (الإصدار 11 أو أعلى) مثبتة على جهازك، مع المترجم الذي يوفره مجموعة تطوير جافا (JDK). بالنسبة لأوبونتو وديبيان، اتبع الخطوات لـ الخيار 1 في البرنامج التعليمي الخاص بنا، كيفية تثبيت جافا بالأبت على أوبونتو 22.04. بالنسبة لأنظمة التشغيل الأخرى، بما في ذلك ماك وويندوز، انظر خيارات التنزيل لتثبيت جافا.
- لتجميع وتشغيل أمثلة الشفرة، يستخدم هذا البرنامج التعليمي جافا شيل، وهو حلقة القراءة-التقييم-الطباعة (REPL) يعمل من سطر الأوامر. للبدء مع JShell، تفقد الدليل مقدمة لجافا شيل.
-
الاطلاع على جافا وبرمجة موجهة الكائنات، والتي يمكن العثور عليها في دليلنا، كيفية كتابة أول برنامج في جافا.
أنواع البيانات الأولية
تعتبر أنواع البيانات الأولية في جافا هي أبسط وأساسية الأنواع. إنها تُمثّل القيم الخام مثل الأرقام والأحرف. تشمل أكثر أنواع البيانات الأولية استخدامًا int
(الأعداد الصحيحة)، boolean
(قيم منطقية)، و char
(الأحرف). يمكنك العثور على باقي الأنواع في وثائق أنواع البيانات في جافا الرسمية.
الأعداد الصحيحة
الأعداد الصحيحة هي أعداد صحيحة سالبة وموجبة. في جافا، ستستخدم int
لتخزينها. يمكن لـ int
استيعاب أرقامًا كبيرة بما فيه الكفاية لمعظم الأغراض: من -2،147،483،648
إلى 2،147،483،647
.
لنلقي نظرة على كيفية استخدام int
في مثال:
int theAnswer = 42;
تبدأ أنواع البيانات الأولية دائمًا بحرف صغير (int
). تتطلب قواعد بناء جملة جافا أن تحدد نوع البيانات أولاً (int
) ثم اسمها (theAnswer
). بعد ذلك، تُسند القيمة 42
بواسطة علامة الياقوت (=
) إلى المتغير.
بغض النظر عن نوع البيانات، يتم استخدام المتغير عن طريق تحديد اسمه مباشرة دون إضافة أي رموز خاصة. هذا لأن لغة الجافا يمكنها التعرف عليه كمتغير.
ملاحظة: اسم المتغير theAnswer
وجميع المتغيرات الأخرى في هذا البرنامج التعليمي مكتوبة بتنسيق كامل كبل. على الرغم من عدم وجود متطلبات صارمة لاستخدامه، إلا أن هذا التنسيق هو الطريقة المقبولة في لغة الجافا.
بمجرد أن تقوم بتعريف المتغير، يمكنك استخدامه عن طريق الإشارة إليه في طريقة مثل هذا:
int theAnswer = 42;
System.out.println("The answer to all questions is " + theAnswer);
في السطر الثاني، تقوم بطباعة theAnswer
إلى وحدة التحكم باستخدام الطريقة المدمجة println
من حزمة System.out
. هذه هي الطريقة الأبسط لاختبار المتغير للتأكد من أنه تم تعريفه كما هو متوقع.
لرؤية هذا الكود في العمل، استخدم أداة جافا شيل. بعد تثبيت جافا، افتح وحدة تحكم أو سطر أوامر على جهاز الكمبيوتر المحلي الخاص بك واكتب jshell
:
- jshell
سيكون الناتج الخاص بك مشابهًا للتالي:
Output| Welcome to JShell -- Version 11.0.16
| For an introduction type: /help intro
jshell>
يمكنك لصق أمثلة الشفرة من هذا البرنامج التعليمي إلى وحدة التحكم. بمجرد الانتهاء، يمكنك الخروج من jshell
عن طريق كتابة /exit
.
لتعريف واستخدام int
، قم بلصق الأسطر التالية في وحدة تحكم jshell
:
- int theAnswer = 42;
- System.out.println("The answer to all questions is " + theAnswer);
سوف ترى الناتج التالي:
OutputtheAnswer ==> 42
The answer to all questions is 42
يؤكد هذا الإخراج أنك قمت بتعيين المتغير int
theAnswer
بشكل صحيح إلى 42 (theAnswer ==> 42
). كما استخدمت theAnswer
بنجاح عن طريق تمريره إلى طريقة، وقد أنتجت الطريقة قيمة المتغير المتوقعة.
البوليان
قيم البوليان هي صحيحة
أو خطأ
. في جافا، ستستخدم boolean
لتخزينها. على سبيل المثال، دعنا ننشئ متغيرًا boolean
يحدد ما إذا كانت جافا ممتعة:
boolean isJavaFun = true;
تعرف المتغير isJavaFun
كـ صحيحة
. القيمة البديلة لـ boolean
هي خطأ
.
باستخدام المتغير أعلاه، يمكنك طباعة الجملة جافا ممتعة: صحيحة
بهذه الطريقة:
- boolean isJavaFun = true;
- System.out.println("Java is fun: " + isJavaFun);
تشغيل هذه السطور في jshell
سينتج الناتج التالي:
OutputisJavaFun ==> true
Java is fun: true
شبيهاً بمثال int
، ستقوم الطريقة println
بطباعة الوسيط المقدم بين القوسين. علامة الجمع (+
) تربط أو تجمع السلسلة “جافا ممتعة: ” مع المتغير isJavaFun
بحيث في الواقع، هو مجرد وسيط واحد فقط — السلسلة، جافا ممتعة: صحيحة
.
الأحرف
لتخزين حرف ألفبائي أحادي، ستستخدم char
. على سبيل المثال:
char firstLetter = 'a';
لاحظ أن الحرف a
محاط بعلامات اقتباس مفردة. يمكن استخدام علامات الاقتباس المفردة فقط لقيم char
. تستخدم علامات الاقتباس المزدوجة للسلاسل، كما ستتعلم لاحقًا.
char
لا يبدو نوعًا مفيدًا بشكل خاص لأنه من غير المرجح أن تحتاج إلى متغير معين لحرف واحد. ومع ذلك، يُستخدم char
كوحدة بناء لفئات سلاسل الأحرف مثل String
، والتي تعتبر أساسًا مجموعة من قيم char
.
كما شاهدت في هذا القسم، فإن الإعلان عن المتغيرات من النوع الأساسي واستخدامها يتم بسهولة لأنها تمثل قيمًا بسيطة مثل الأعداد الصحيحة. هذه القيم جاهزة للاستخدام ولا تتطلب عمليات إضافية مثل إنشاء الكائنات، واستدعاء الطرق، وما إلى ذلك.
أنواع المراجع
في البرنامج التعليمي الأول في هذه السلسلة، كيفية كتابة أول برنامج في جافا، تعلمت أن الشيفرة في جافا مُنظمة في فئات وأن هذه الفئات تُستخدم كقوالب لإنشاء الكائنات. عندما يُسند مثل هذه الكائنات إلى متغيرات، فأنت تشير أو تشير إلى هذه الكائنات. في هذه الحالات، يتم تصنيف المتغيرات على أنها أنواع مراجع. وتُعرف هذه المتغيرات أيضًا باسم غير أساسية لأن المتغيرات من النوع الأساسي لا يمكن أن تشير إلى كائنات.
الكائنات قوية لأن لديها خصائص متقدمة وقادرة على التفاعل عند تنشيط أساليبها. ومع ذلك، بدون متغيرات تشير إليها، تكون هذه الكائنات غير قابلة للوصول وعملياً غير قابلة للاستخدام. ولهذا السبب، تعتبر متغيرات نوع الإشارة أمرًا أساسيًا في لغة البرمجة جافا وبرمجة الكائنات بشكل عام.
ملحوظة: يشير أنواع الإشارة إلى الكائنات التي تم إنشاؤها من خلال فئات. ولتجنب الالتباس، يكون نوع الإشارة والكائن الذي تم إنشاؤه من نفس الفئة في الأمثلة التالية.ومع ذلك، في البرامج المعقدة، نادراً ما يحدث هذا. في جافا، تعتبر واجهة (\textit{interface}) مجموعة من المتطلبات لسلوك معين، ويمكن تلبية هذه المتطلبات من قبل فئة أو أكثر. وتُعتبر الفئة التي تلبي متطلبات واجهة ما أنها تنفذ هذه الواجهة. وبالتالي، في البرامج المعقدة، فإن تعريف متغير بنوع واجهة هو أمر شائع. وبهذه الطريقة، يمكنك تحديد السلوك الذي يجب أن يظهره متغيرك من دون ربطه بتنفيذ محدد لهذا السلوك. وهذا يتيح لك تغيير التنفيذ الذي يشير إليه المتغير بسهولة دون الحاجة إلى تغيير كيفية استخدام المتغير. وهذا المفهوم المعقد يعتبر جزءًا من موضوع أكثر تقدمًا حول التوريث و التعددية، والذي سيكون درسًا منفصلًا في سلسلة البرمجة بلغة جافا لدينا.
بينما توجد أنواع بدائية قليلة فقط، تكاد تكون الأنواع المرجعية غير محدودة عمليًا لأنه لا يوجد حد لعدد الفئات (والواجهات)، وكل فئة تمثل نوعًا مرجعيًا. هناك العديد من الفئات المدمجة في لغة Java التي توفر وظائف أساسية. يتم العثور على الأكثر استخدامًا في حزمة java.lang
الأساسية. ستستعرض بعضها في هذا القسم.
فئة String
تمثل فئة String
مجموعة من الأحرف التي تشكل سلسلة نصية. لتعلن عن String
، أو أي متغير آخر من نوع مرجعي، تحدد أولاً نوعه تليه اسمه. بعد ذلك، تخصص له قيمة بعلامة التساوي. حتى الآن، يشبه العمل مع الأنواع البدائية. ومع ذلك، تشير الأنواع المرجعية إلى الكائنات، لذا يجب عليك إنشاء كائن إذا لم يكن قد تم إنشاء واحد بعد. فيما يلي مثال:
String hello = new String("Hello");
hello
هو اسم المتغير بنوع المرجع String
. تخصصه إلى كائن String
جديد. يتم إنشاء كائن String
الجديد بكلمة الرئيسية new
إلى جانب اسم الفئة — String
في هذه الحالة. تبدأ الفئة String
بحرف كبير. وبموجب التقليد، تبدأ جميع الفئات وبالتالي الأنواع المرجعية بحرف كبير.
كل صنف لديه طريقة خاصة تسمى المُنشئ تستخدم لإنشاء كائنات جديدة. يمكنك استدعاء هذا المُنشئ عن طريق إضافة أقواس (()
) في نهاية اسم الصنف. قد يقبل المُنشئ معلمات، كما في المثال أعلاه، حيث يُطبق المعلمة "Hello"
على المُنشئ لصنف String
.
لتأكيد سلوك المتغير hello
كما هو متوقع، قم بتمريره مرة أخرى إلى طريقة println
بهذه الطريقة:
- String hello = new String("Hello");
- System.out.println(hello);
تشغيل هذه الأسطر في jshell
سينتج الناتج التالي:
Outputhello ==> "Hello"
Hello
هذه المرة، يؤكد الناتج أن المتغير hello
مُعين إلى Hello
. بعد ذلك، يتم طباعة نفس Hello
في سطر جديد، مؤكدًا أن الطريقة println()
قد معالجته.
صنف القوالب
في القسم السابق، عملت مع نوع الإشارة String
الذي يُستخدم بشكل متكرر. الأنواع الأخرى الشائعة للإشارة هي ما يُسمى بالقوالب لأنواع البيانات الأولية. يقوم صنف القالب بتغليف أو احتواء البيانات الأولية، ولذا فإن اسمه. جميع أنواع البيانات الأولية لها مقابلات في القوالب، وهنا بعض الأمثلة:
Integer
: لتغليف قيمint
.Character
: لتغليف قيمchar
.Boolean
: لتغليف قيمboolean
.
توجد هذه الأغلفة لتمكينك من ترقية قيمة بسيطة إلى كائن قوي. تحتوي كل غلاف على طرق جاهزة للاستخدام تتعلق بالقيم التي صممت لتخزينها.
كمثال، ستستكشف Integer
. في القسم السابق، قمت بإنشاء كائن String
باستخدام الكلمة الرئيسية new
. ومع ذلك، تقدم بعض الفئات وتشجع حتى على استخدام طرق خاصة للحصول على كائنات منها، وInteger
هو واحدة منها. في حالة Integer
، يكون استخدام طريقة خاصة في الغالب حول تحسين الأداء، ولكن في حالات أخرى، قد يتعلق الأمر بتبسيط إنشاء كائنات معقدة.
في المثال التالي، ستقوم بإنشاء متغير Integer
يسمى theAnswer
بقيمة 42
باستخدام valueOf
الطريقة:
- Integer theAnswer = Integer.valueOf(42);
- System.out.println(theAnswer);
في jshell
، ستحصل على الإخراج التالي:
OutputtheAnswer ==> 42
42
عند استدعاء طريقة valueOf(42)
من كائن Integer
، توجه Java لإعطائك كائن بهذه القيمة. في الخلفية، ستقوم Java بالتحقق مما إذا كان هناك بالفعل كائن بمثل هذه القيمة في ذاكرتها المؤقتة. إذا كان هناك، سيتم ربط الكائن بالمتغير theAnswer
. إذا لم يكن هناك، سيتم إنشاء كائن جديد للمتغير theAnswer
.
تقدم العديد من الفئات المدمجة مثل هذه الطرق لأسباب الأداء، ويُفضل استخدامها، إذا لم يكن ذلك إلزاميًا. في حالة Integer
، يمكنك لا يزال إنشاء كائن باستخدام الكلمة الرئيسية new
، ولكن ستحصل على تحذير بشأن الإهمال.
بالإضافة إلى String
والتعليفات، هناك أنواع مراجع مدمجة أخرى مفيدة، والتي يمكنك العثور عليها في ملخص حزمة java.lang. لفهم بعض هذه الأنواع المرجعية المتقدمة بشكل كامل، يُطلب شرح إضافي أو معرفة سابقة. هذا هو السبب في أننا سنغطي بعضها في دروسنا القادمة من سلسلة جافا.
القيم الثابتة
القيم الثابتة تمثل قيمًا ثابتة يمكن استخدامها مباشرة في الشفرة، وبالتالي يمكن تعيينها إلى كل من الأنواع الأساسية والمراجعية. هناك بعض أنواع القيم الثابتة، ويمكن تصنيفها على النحو التالي.
القيم الثابتة للأنواع الأساسية
لقد استخدمت بالفعل بعض القيم الثابتة في القسم المتعلق بالأنواع الأساسية. بالنسبة لكل نوع أساسي، هناك قيمة ثابتة، مثل تلك القيم التي ذكرناها في أمثلتنا: 42
، 'a'
، و true
. الأعداد الصحيحة مثل 42
هي قيم ثابتة للأعداد الصحيحة. بالمثل، الأحرف مثل 'a'
هي قيم ثابتة للأحرف، و true
و false
هي قيم ثابتة للبوليانية.
الأنواع الأساسية يمكن استخدامها أيضًا لإنشاء قيم لأنواع الإشارة. تم استخدام القيمة الأساسية للنوع `int` في إنشاء كائن `Integer` بالشفرة Integer.valueOf(42)
. هناك أيضًا طريقة مختصرة لذلك، ويمكنك تعيين القيمة مباشرة مثل هذا:
Integer theAnswer = 42;
42
هو قيمة صحيحة، تمامًا كأي عدد صحيح، ويمكنك تعيينه مباشرة لمتغير theAnswer
دون أي عبارات إضافية. من الشائع رؤية `Integer` معلنًا بهذه الطريقة لأنها مريحة.
هذا النهج المختصر يعمل أيضًا للقيم الأساسية الأخرى وأنواعها المضادة مثل Boolean
، على سبيل المثال:
Boolean isFun = true;
true
هو القيمة، التي يتم تعيينها مباشرة إلى المتغير isFun
من نوع Boolean
. هناك أيضًا قيمة false
، التي يمكنك تعيينها بنفس الطريقة.
القيمة النصية
هناك أيضًا قيمة خاصة لنوع الإشارة `String`، ويتم التعرف عليها بالعلامات التوضيحية المزدوجة المحيطة بقيمتها. في هذا المثال، هي "مرحبا، العالم!"
:
String helloWorld = "Hello, World!";
استخدام القيم الأساسية أبسط وأقصر، ولهذا السبب يفضلها العديد من المبرمجين. ومع ذلك، يمكنك لا تزال إعلان متغير `String` بكائن `String` جديد، كما فعلت بالفعل في القسم المخصص لأنواع الإشارة.
القيمة الفارغة
هناك قيمة مهمة أخرى: null
، والتي تمثل عدم وجود قيمة أو عدم وجود كائن. null
يتيح لك إنشاء نوع مرجعي وتوجيهه إلى null
بدلاً من توجيهه إلى كائن. يمكن استخدام null
لجميع أنواع المراجع ولكن ليس لأي أنواع أولية.
هناك تحذير واحد مع القيمة الفارغة null
: يمكنك تعريف المتغيرات بها، ولكن لا يمكنك استخدام هذه المتغيرات حتى تعين قيمة مناسبة غير فارغة. إذا حاولت استخدام متغير نوع المرجع مع قيمة null
، فستحصل على خطأ. إليك مثال:
- String initiallyNullString = null;
- System.out.println("The class name is: " + initiallyNullString.getClass());
عند محاولة تشغيل هذا الكود في jshell
، سترى خطأ مماثل للتالي:
OutputinitiallyNullString ==> null
| Exception java.lang.NullPointerException
| at (#4:1)
قد تختلف النتائج حسب نظام التشغيل الخاص بك وإصدار Java.
يتم طرح الخطأ java.lang.NullPointerException
لأنك تحاول استدعاء طريقة getClass()
للسلسلة (التي تعيد اسم الفئة) على المتغير initiallyNullString
(الذي يشير إلى كائن فارغ).
ملاحظة: لأسباب بسيطة، نطلق على java.lang.NullPointerException
خطأ على الرغم من أنه بشكل فني استثناء. لمزيد من المعلومات حول الاستثناءات والأخطاء، تحقق من البرنامج التعليمي، التعامل مع الاستثناءات في Java،.
لمعالجة الخطأ، يجب إعادة تعيين قيمة initiallyNullString
كما يلي:
- String initiallyNullString = null;
- initiallyNullString = "not null any longer";
- System.out.println("The class name is: " + initiallyNullString.getClass());
الكود الجديد المصحح سيقوم بطباعة الناتج التالي:
OutputinitiallyNullString ==> null
initiallyNullString ==> "not null any longer"
The class name is: class java.lang.String
الناتج أعلاه يُظهر كيف كانت قيمة initiallyNullString
في البداية null
، ثم أصبحت كائن String
جديد يحتوي على "لم تعد فارغة"
. بعد ذلك، عند استدعاء الطريقة getClass()
على الكائن الذي تم إنشاؤه، ستحصل على java.lang.String
، حيث أن String
هو اسم الفئة و java.lang
هو حزمتها. في النهاية، يتم طباعة رسالة كاملة ومعبرة: "اسم الفئة هو: class java.lang.String"
.
تعتبر إعلانات قيمة null
مثل هذه شائعة أكثر في الشفرات القديمة. كانت تُستخدم لإنشاء متغير أولاً ثم لاحقًا لتعيين قيمته الحقيقية، عادةً بعد اجتيازها لبعض المنطق الذي يحدد القيمة اللاحقة. ومع ذلك، منذ إصدار جافا 8 توجد نوع مرجعي جديد يسمى Optional، والذي هو أكثر ملاءمة للحالات التي كان فيها يُستخدم null
من قبل.
استدلال نوع المتغير المحلي
حتى الآن، كنت تستخدم بعض أنواع البيانات الشائعة في لغة البرمجة جافا لتعريف المتغيرات. ومع ذلك، قدمت جافا 10 ميزة جديدة تسمى تقريب النوع المحلي، التي تسمح لك باستخدام الكلمة الرئيسية var أمام متغير جديد. باستخدام هذه الميزة، ستقوم جافا بتقرير (أي، تخمين تلقائيًا) نوع البيانات من السياق المحلي. تقرير النوع مثير للجدل حيث يتناقض مع الكثافة التي تم شرحها سابقًا في تعريف المتغيرات. فوائد وعيوب هذه الميزة قابلة للجدل، ولكن الحقيقة هي أن لغات أخرى من النوع المحدد بشكل ثابت، مثل سي ++، تدعم تقرير النوع.
على أي حال، لا يمكن لتقرير النوع أن يحل محل البيانات بالكامل لأنه يعمل فقط مع المتغيرات المحلية، والتي هي متغيرات داخل الطريقة. لنلقِ نظرة على مثال مع var:
- var hello = "Hello";
- System.out.println(hello);
تعلن المتغير hello باستخدام الكلمة الرئيسية var لتوجيه جافا لاكتشاف نوع بياناته. بعد ذلك، تقوم بطباعته إلى وحدة التحكم بالطريقة المعتادة للتأكد من عمله كما هو متوقع:
Ouputhello ==> "Hello"
Hello
سيعمل هذا المثال طالما أن تثبيت جافا الخاص بك (وبالتحديد، JDK) يزيد عن الإصدار 10. كلمة الرئيسية var غير مدعومة في الإصدارات القديمة.
تحدث التمييز بالنوع أثناء عملية الترجمة – أي خلال ترجمة الكود. يقوم عملية الترجمة بتحويل مصدر الكود النصي العادي إلى كود الآلة وتطبيق مختلف التحسينات، بما في ذلك التمييز بالنوع. يضمن ذلك توفر الحد الصحيح من ذاكرة النظام للمتغيرات المستنتجة بالنوع. وبالتالي، يكون كود الآلة الذي تقوم بتشغيله بعد الترجمة مُحسَّنًا تمامًا، كما لو كنت قد حددت جميع أنواع البيانات يدويًا.
في هذا المثال، يعمل كلمة المفتاح var
لأن المتغير محلي، ونوع البيانات var
يعمل فقط مع المتغيرات المحلية. يتم تعريف المتغيرات المحلية داخل الطرق ويمكن الوصول إليها فقط داخل الطرق، وهذا هو السبب في تسميتها “محلية”.
لإظهار أن var
يمكن استخدامها فقط للمتغيرات المحلية، حاول وضعها خارج الطريقة الرئيسية، كما في:
- public class Hello {
- var hello = "Hello";
- public static void main(String[] args) {
- // example code
- }
- }
عند لصق الكود أعلاه في jshell
، ستحصل على الخطأ التالي:
Output| Error:
| 'var' is not allowed here
| var hello = "Hello";
| ^-^
لا يُسمح باستخدام var
هنا لأن hello
خارج الطريقة ولا يعتبر محليًا بعد الآن. وبالتالي، لا يعمل التمييز بالنوع للمتغيرات غير المحلية لأنه لا يمكن الاعتماد على السياق بشكل موثوق لاكتشاف نوع البيانات.
على الرغم من أن استخدام var
يمكن أن يكون تحديًا وليس مطلوبًا، فمن المحتمل أن تواجهه في كثير من الأحيان، لذا فمن المفيد معرفة ذلك.
الكلمات الأساسية المحجوزة
عند تعريف المتغيرات في لغة البرمجة جافا، هناك قاعدة هامة أخرى يجب معرفتها. هناك كلمات محجوزة لا يمكنك استخدامها كأسماء للمتغيرات. على سبيل المثال، لا يمكنك تعريف نوع بسيط من النوع int
وتسميته new
بهذا الشكل:
- int new = 1;
إذا حاولت هذا المثال، ستحصل على أخطاء في التجميع لأن new
هي كلمة محجوزة.
Output| Error:
| '.class' expected
| int new = 1;
| ^
| Error:
| <identifier> expected
| int new = 1;
| ^
| Error:
| '(' or '[' expected
| int new = 1;
| ^
| Error:
| unexpected type
| required: value
| found: class
| int new = 1;
| ^--^
| Error:
| missing return statement
| int new = 1;
| ^----------^
الكلمة المحجوزة new
تُستخدم لإنشاء كائنات جديدة ولا يتوقع جافا رؤيتها في هذا الموقع. في قائمة الأخطاء في الإخراج السابق، الجزء الأول هو الأهم:
Output| Error:
| '.class' expected
| int new = 1;
| ^
الخطأ '.class' expected
يعني أنه عند استخدام كلمة new
، تتوقع جافا أن يتبعها اسم فئة. في هذا السياق، جافا غير قادرة على تفسير البيان وتتبعه باقي الأخطاء.
بقية الكلمات المحجوزة، مثل abstract
، continue
، default
، for
، و break
، لها أيضًا معاني محددة في جافا ولا يمكن استخدامها كأسماء للمتغيرات. يمكن العثور على القائمة الكاملة للكلمات المحجوزة على الصفحة كلمات لغة جافا المحجوزة. حتى إذا لم تتذكر جميع الكلمات المحجوزة، يمكنك استخدام أخطاء التجميع لتحديد المشكلة.
الاستنتاج
في هذا البرنامج التعليمي، تعلمت عن أنواع البيانات الأساسية والمرجعية في لغة البرمجة جافا، وهو موضوع معقد ولكنه أساسي. خذ وقتك لممارسة ذلك وتصفح الأمثلة أكثر من مرة واحدة. جرب تغيير بعض أنواع البيانات والقيم. انتبه عندما تحدث أخطاء وعندما لا تحدث لتطوير القدرة على تنفيذ الشفرة بنجاح.
لمزيد من المعلومات حول جافا، تفقد سلسلةنا كيفية البرمجة في جافا.
Source:
https://www.digitalocean.com/community/tutorials/understanding-data-types-in-java