تذكر إن: • كلمة 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());
} }