Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

Javaمثال عملي يوضح فائدة الكلمة final في جافا

في المثال التالي قمنا إنشاء كلاس إسمه Student لتخزين بيانات الطلاب مع مراعاة الشروط التالية:
كل طالب يجب ذكر إسمه name, إختصاصه Specialization, بالإضافة أنه يجب إعطاء كل طالب رقم تسلسلي id لا يمكن تغييره و تخزين عدد جميع الطلاب studentsCounter.
لحفظ عدد الطلاب, يمكننا تعريف المتغير studentsCounter كـ private و static يزيد واحداً كلما قمنا بإنشاء كائن جديد ( أي طالب جديد, لأن كل طالب عبارة عن كائن من الكلاس Student ).
و بالنسبة لرقم الـ id الذي يجب توليده بشكل تسلسلي لكل طالب جديد, فيمكننا تعريف متغير نوعه final و جعله يزيد واحداً بشكل تسلسلي لكل طالب جديد.

بعد إنشاء هذا الكلاس, سنقوم بإنشاء الكلاس MainStudent لتجربته.

Student.java
public class Student {
// هنا قمنا بتعريف الخصائص التي يجب أن تتوفر في كل طالب
public String name; // سنستخدم هذا المتغير لحفظ إسم الطالب
public String specialisation; // سنستخدم هذا المتغير لحفظ إسم تخصص الطالب
public final int id; // سنستخدم هذا المتغير لحفظ الرقم التسلسلي للطالب و الذي يمكن الوصول إليه من خلال أي كائن مع عدم القدرة على تبديل قيمته
private static int studentsCounter; // private سنستخدم هذا المتغير لحفظ عدد الطلاب, لا يمكن لأحد من خارج هذا الكلاس تغيير عدد الطلاب لأنه
// عند إنشاء كائنات من هذا الكلاس سنستخدم هذا الكونستركتور لإدخال معلومات الطلاب مباشرةً عند تعريفهم
public Student(String name, String specialisation) {
this.name = name;
this.specialisation = specialisation;
studentsCounter++; // سيكون موحد لجميع الكائنات. هنا كلما قمنا بإنشاء كائن جديد سيزيد واحداً و هكذا سنحصل على عدد جميع الطلاب التي أنشأت static بما أن نوعه
id = studentsCounter; // هنا كلما أضيف طالب جديد سيأخذ عدد الطلاب الحالي كرقم تسلسلي, و هكذا سيملك كل طالب رقم تسلسلي مختلف لا يمكن تغييره
}
// هذه الدالة تطبع محتوى الكائن (أي بيانات الطالب) الذي قام باستدعائها
public void printStudentInfo() {
System.out.println("Student: " +name);
System.out.println("ID: " +id);
System.out.println("Specialization: " +specialisation);
System.out.println("------------------------------");
}
// static هذه الدالة تطبع عدد الكائنات (أي الطلاب) و يمكن استدعائها مباشرةً من الكلاس لأن نوعها
public static void printTotalNumberOfStudents() {
System.out.println("The Total number of Students is: " +studentsCounter);
}
}
public class Student { // هنا قمنا بتعريف الخصائص التي يجب أن تتوفر في كل طالب public String name; // سنستخدم هذا المتغير لحفظ إسم الطالب public String specialisation; // سنستخدم هذا المتغير لحفظ إسم تخصص الطالب public final int id; // سنستخدم هذا المتغير لحفظ الرقم التسلسلي للطالب و الذي يمكن الوصول إليه من خلال أي كائن مع عدم القدرة على تبديل قيمته private static int studentsCounter; // private سنستخدم هذا المتغير لحفظ عدد الطلاب, لا يمكن لأحد من خارج هذا الكلاس تغيير عدد الطلاب لأنه // عند إنشاء كائنات من هذا الكلاس سنستخدم هذا الكونستركتور لإدخال معلومات الطلاب مباشرةً عند تعريفهم public Student(String name, String specialisation) { this.name = name; this.specialisation = specialisation; studentsCounter++; // سيكون موحد لجميع الكائنات. هنا كلما قمنا بإنشاء كائن جديد سيزيد واحداً و هكذا سنحصل على عدد جميع الطلاب التي أنشأت static بما أن نوعه id = studentsCounter; // هنا كلما أضيف طالب جديد سيأخذ عدد الطلاب الحالي كرقم تسلسلي, و هكذا سيملك كل طالب رقم تسلسلي مختلف لا يمكن تغييره } // هذه الدالة تطبع محتوى الكائن (أي بيانات الطالب) الذي قام باستدعائها public void printStudentInfo() { System.out.println("Student: " +name); System.out.println("ID: " +id); System.out.println("Specialization: " +specialisation); System.out.println("------------------------------"); } // static هذه الدالة تطبع عدد الكائنات (أي الطلاب) و يمكن استدعائها مباشرةً من الكلاس لأن نوعها public static void printTotalNumberOfStudents() { System.out.println("The Total number of Students is: " +studentsCounter); } }

Main.java
public class Main {
public static void main(String[] args) {
// هنا قمنا بإنشاء خمس طلاب
Student s1 = new Student("Mhamad", "Computer Science");
Student s2 = new Student("Hala" , "Computer Science");
Student s3 = new Student("Marwan", "IT");
Student s4 = new Student("Ahmad" , "Civil Engineer");
Student s5 = new Student("Salam" , "Telecom");
// هنا قمنا بعرض خصائص كل طالب
s1.printStudentInfo();
s2.printStudentInfo();
s3.printStudentInfo();
s4.printStudentInfo();
s5.printStudentInfo();
// هنا قمنا بعرض عدد جميع الطلاب
Student.printTotalNumberOfStudents();
}
}
public class Main { public static void main(String[] args) { // هنا قمنا بإنشاء خمس طلاب Student s1 = new Student("Mhamad", "Computer Science"); Student s2 = new Student("Hala" , "Computer Science"); Student s3 = new Student("Marwan", "IT"); Student s4 = new Student("Ahmad" , "Civil Engineer"); Student s5 = new Student("Salam" , "Telecom"); // هنا قمنا بعرض خصائص كل طالب s1.printStudentInfo(); s2.printStudentInfo(); s3.printStudentInfo(); s4.printStudentInfo(); s5.printStudentInfo(); // هنا قمنا بعرض عدد جميع الطلاب Student.printTotalNumberOfStudents(); } }

سنحصل على النتيجة التالية عند التشغيل.

Student: Mhamad
ID: 1
Specialization: Computer Science
------------------------------
Student: Hala
ID: 2
Specialization: Computer Science
------------------------------
Student: Marwan
ID: 3
Specialization: IT
------------------------------
Student: Ahmad
ID: 4
Specialization: Civil Engineer
------------------------------
Student: Salam
ID: 5
Specialization: Telecom
------------------------------
The Total number of Students is: 5
Student: Mhamad ID: 1 Specialization: Computer Science ------------------------------ Student: Hala ID: 2 Specialization: Computer Science ------------------------------ Student: Marwan ID: 3 Specialization: IT ------------------------------ Student: Ahmad ID: 4 Specialization: Civil Engineer ------------------------------ Student: Salam ID: 5 Specialization: Telecom ------------------------------ The Total number of Students is: 5