Note4

Page 1

‫تذكر إن‪:‬‬ ‫• كلمة ‪ static‬يمكن أن نعرف بها ‪ variable‬أو ‪method‬فقط ‪ ،‬يعني ال يمكن رؤية ‪ class‬معرف ب ‪ static‬إال في حالة واحدة‬ ‫وهي ‪Top-level nested classes‬والكالم عن ‪Top-level nested classes‬سيأتي بوقته إن شاء هللا ‪.‬‬ ‫• عندما نعرف ‪ method or instance variable‬على أنها من نوع ‪ static‬هذا يعني أنها تنتمي إلى ‪ class‬عوضا عن أي ‪instance‬من‬ ‫هذا ‪ class‬أي سيمكننا الوصول لها حتى ولو لم نعمل ‪ object‬عن الكالس املوجود فيها‪ .‬بمعني ليس بالضرورة عمل ‪instance‬‬ ‫عن الـ ـ ‪ class‬حتى نستخدمهم بل نستطيع الوصول إليها عن طريق ‪classname.membername‬‬ ‫• لكن إن عملت عدة ‪ instance‬عن ‪ class‬فإن جميع هذه ال ‪ instance‬سترى نسخة واحدة عن هذا املتحول وللتوضيح‪:‬‬


Static : Access modifer ‫الوصول‬ public class Helow {

public class Helow {

static int frogCount = 0; // Declare and initialize static variable

public int frogCount = 0; // Declare and initialize public variable

public Helow() {

public Helow() {

frogCount += 1; // Modify the value in the constructor

frogCount += 1; // Modify the value in the constructor

}

}

/**

/**

* @param args the command line arguments

* @param args the command line arguments

*/

*/

public static void main(String[] args) {

public static void main(String[] args) {

// TODO code application logic here

// TODO code application logic here

new Helow();

new Helow();

new Helow();

new Helow();

new Helow();

new Helow();

System.out.println("Frog count is now " + frogCount);

System.out.println("Frog count is now " + frogCount);

}

}

}

}

‫ وضمن‬static ‫على أنه من نوع‬frogCount ‫في هذا البرنامج عرفنا املتحول‬ ‫ في كل مرة سيتم استدعاء هذا‬1 ‫ زدنا املتحول ب‬construcor ‫ال‬ ‫ برأيكم ماذا‬class ‫عن هذا‬object ‫ أي في كل مرة نعمل‬constructor‫ال‬ Frog count is now 3 ‫ستكون نتيجة البرنامج؟؟؟‬

non-static variable frogCount cannot be referenced from a static context at Helow.main(Helow.java:17) non-static (instance) ‫ ال يمكن ان تصل الي ال ـ‬static methods ‫ال ـ‬ variable


‫ واسم‬class ‫ عن طريق اسم‬static ‫كما يمكن الوصول للمتغير من نوع‬ ‫ كما هو موضح في البرنامج التالي‬:‫املتغير‬ System.out.print("frogCount:"+Helow.frogCount); class Helow { static int frogCount = 0; // Declare and initialize static variable public Helow() { frogCount += 1; // Modify the value in the constructor } }

class TestHelow {

/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here new Helow(); new Helow(); new Helow(); Helow f = new Helow(); int frogs = f. System.out.print("frogCount:"+Helow.frogCount+"-------"); //Access static variable } }

Helow rf = new Helow(); int frogs = rf.getFrogCount;

:‫ كالتالي‬class ‫ لهذا‬reference ‫كما يمكننا الوصول ايضا عن طريق ال‬ // Access static method getFrogCount using rf


static ‫• أشياء ال يمكن تعرف ك‬ ■ Constructors ■ Classes ■ Interfaces ■ Inner classes ■ Inner class methods and instance variables ■ Local variables ‫ هي‬static ‫أما األشياء التي يمكن أن تعرف ك‬

■Methods ■ Variables ■ Top-level nested classes


‫‪ ‬نطاق املتغيرات ‪Variables Scope‬‬ ‫• يقصد به الجزء من البرنامج الذي نستطيع من خالله الوصول إلى املتغير ‪ .‬فبالنسبة ملتغيرات النسخة(حالة)‬ ‫(‪ )instance Variables‬والدوال ‪ Method‬فنستطيع الوصول إليها داخل ‪ class‬أي من بداية تعريف ‪ class‬وحتى‬ ‫نهاية تعريفه ‪ .‬أما املتغيرات املحلية فإمكانية الوصول إليها تكون داخل ‪ Block‬الذي عرفت به فقط ‪ .‬أما‬ ‫بالنسبة للمتغيرات املحلية املعرفة على مستوى ‪ method‬و ‪ parameters‬فتكون امكانية الوصول إليها داخل‬ ‫تلك الدالة فقط ‪.‬في لغة الجافا نستطيع أن نعطي كل ‪ class‬أو ‪ method‬أو ‪ variable‬خصوصية الوصول إلى‬ ‫املتغيرات ‪.‬‬


‫‪ ‬يمكن تقسيم المتغيرات في الجافا بحسب كيفية الوصول إليها إلى ‪:‬‬ ‫‪ .1‬عام ‪ public‬يمكن الوصول إليها من أي مكان ‪.‬‬ ‫‪ .2‬خاص ‪ private‬ال يمكن الوصول إليها من خارج }{ الاقواس سواء ‪ method‬او ‪ constructor‬أو ‪. class‬‬ ‫‪ .3‬محمي ‪ protected‬محمي من التغيير من الخارج و يمكن الوصول إليها من أي مكان ‪.‬‬ ‫‪ .4‬نهائي ‪ final‬تعني ثابت ال يمكن تغييره إذا كان متغير وال يمكن انشاءه إذا كان‪. Object‬‬ ‫‪ .5‬مجرد ‪abstract‬تعني ال يمكن وراثته إذا كان‪. Object‬‬


-: ‫ ويمكن تقسيم المتغيرات حسب المدى كاآلتي‬ Instance variables ً Static variables ‫وتسمى أيضا‬Class variables

.1 .2

Local variables Final variables ‫ او الـ‬Constant ‫والنوع الاخير هو الثوابت‬

.3 .4


‫النوع الاول ‪Member variables :‬أو ( ‪) Instance variables‬‬ ‫• وتسمى متغيرات ‪ class‬أو متغيرات ‪ instance‬وهي عبارة عن متغيرات تعرف في ‪ class‬خارج اقواس الدالة بعد جملة الـ ‪class‬‬ ‫مباشرة كالتالي ‪:‬‬ ‫• هذه املتغيرات تسمى ‪ instance variables‬النها تنشأ مع كل ‪ Instance‬ينشأ من هذا ‪ . class‬وتكون متواجدة ‪ Global‬لكل الـ‬ ‫‪. Instance‬‬ ‫• إلستخدام تلك املتغيرات علينا ذكر اسم الـ ‪ instance‬و من ثم نقطة يتبعها اسم املتغير‬


‫النوع الثاني ‪:‬املتغيرات الساكنة ‪Static variables‬‬ ‫ً‬ ‫ً‬ ‫ُ‬ ‫• وهي متغيرات تشبه كثيرا النوع لاول وتعرف في نفس املكان أيضا ولكنها تختلف معها في أنها تسبق بكلمة ‪ ,static‬كذلك تختلف‬ ‫في أن قيمتها ثابته لجميع الـ ‪ Instance‬من ذلك ‪class‬‬


‫النوع الثالث ‪:‬املتغيرات املحلية ‪Local variables‬‬ ‫• هذه املتغيرات تختلف عن ما سبق بكونها تنشأ بداخل اقواس امليثود ‪ Methods‬وليس ‪ . class‬ويجب اعطائها قيم‬ ‫‪ Initialization‬قبل استخدامها‪،‬ويجب أن نالحظ ان تشغيلها داخل الاقواس ال يجعلها ممكنة أو مرئية ملا هو خارج تلك‬ ‫الاقواس ‪ .‬لذلك يفضل تعريفها مباشرة بعد تعريف ‪method‬‬


‫النوع الرابع ‪ :‬الثوابت ‪Constant‬‬ ‫الثوابت ‪Constant‬‬ ‫ً‬ ‫هي املتغيرات ( إن صح التعبير ) التي ال تتغير قيمها أبدا ويتم تعريفها بواسطة الكلمة ‪ final‬كالتالي ‪:‬‬


‫املكونات الاساسية الي برنامج جافا‬

‫• كلمات انشاء املشروع ( ‪ + ) public Class‬اسمه‬ ‫• الدالة الرئيسية ( ‪ ) main‬وتركيبتها‬

‫• اقواس البداية و النهاية‬ ‫• جمل الادخال و الاخراج ( قد يعمل البرنامج من دونها دون تاثير ملموس)‬


‫ال ـ ـ ـ ـ ‪constructor‬‬ ‫• لتنفيذ أي ‪ class‬البد من اخذ ‪ object‬منه ولذلك يجب ان يتضمن‬ ‫البرنامج الرئيس ي الذي يحتوي علي الدالة الرئيسية ‪ main‬سطر كالتالي‪:‬‬


‫ موظف‬class ‫ انشاء‬: ‫مثال‬ public class Employee { // attributes(instance variables) of class private String name; private String emp; private float salary; private String ID; private String mobile;


‫ موظف‬class ‫تابع انشاء‬: ‫مثال‬ public void printinfo(){ JOptionPane.showMessageDialog(null, "name: "+name+"\n emp: "+emp+"\n Salary: "+salary+ "\nID: "+ID+"\n mobile: "+mobile); } public void setname(String name) { this.name = name; } public String getname() return name; }

{


‫ موظف‬class ‫ تابع انشاء‬: ‫مثال‬ // default constructor public Employee() { name = "no name"; emp = "null"; salary = 800.0f; ID = "0000"; mobile = "05900000"; }

// overloaded constructor public Employee (String name, String emp, float salary, String ID, String mobile){ this.name = name; this.emp = emp; this.salary = salary; this.ID = ID; this.mobile = mobile;


‫ الرئيسي للمشروع‬class ‫ انشاء‬: ‫مثال‬ public class EmployeeProj {

public static void main(String[] args) {

Employee emp1 = new Employee(); Employee emp2 = new Employee("Ahmad","Manager",2000.5f,"12010222","059987878"); emp1.printinfo(); System.out.println("\n=================================="); emp2.printinfo(); System.out.println("\n=================================="); Employee emp3 = new Employee(); // emp3.ID = "65666"; emp3.setname("AAAAAA"); emp3.printinfo(); System.out.print("Name: "+emp2.getname());

} }


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.