الوقت/التاريخ الآن هو الخميس مايو 02, 2024 3:33 pm

3 نتيجة بحث عن Static

إستخدامات الكلمة Static فى تطبيقات الجافا


أهلا بيك الاخت الكريمة @Laren99

لكنى اريد أن افهم هل ردك عبار عن استفسار ام اجابة عن استفسار ؟كما يجب عدم الخلط بين الكلمة المحدوزة #static و بين الفئة #Stack الخاصة بمجموعات البيانات

على اى حال سيتم نقل مشارتك الى قسم نقاش و استفسارات الاعضاء حتى تعم الفائدة لما نشرتي ....
من طرف أحمد مناع
في الأربعاء يوليو 08, 2020 2:22 pm
 
ابحث في: أساسيات اللغة Java Basics
موضوع: إستخدامات الكلمة Static فى تطبيقات الجافا
المساهمات: 5
مشاهدة: 1559

حل اسئلة وتمارين بلغة جافا الجزء الثالث

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


أهلا بيك أخى الكريم

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

الكود:
 static int Stornumbers(){
        
        }  


لكن فى مثالنا قمنا بانشاء طريقة باسم #Stornumbers ترجع بمصفوفة من نوع int لذلك تم كتابتها بالشكل التالى :

الكود:
 static int[] Stornumbers(){
        
         }


و الفرق بين الطرقتين القوسين [] و ربما ذلك جعل الامر يختلط عليك فى أن Stornumbers عبارة عن باراميتر لدالة اخرى و هذا ليس صحيح ...وان أحببت أن تضع لها بارامتيرات سيكون ذلك بين قوسين () على النحو التالى :

الكود:
static int[] Stornumbers(int f){
        
         }


ففى الطريقة اعلاه وضعنا بارامتير f من نوع int كما ظاهر اعلاه لكن فى مثالنا لا نتحتج اى بارمتيرات ....وكانت على النحو التالى :

الكود:
  static int[] Stornumbers(){
        
        
        Random rand = new Random();
        int randomInt;          
        int[] numbers = new int[5];
        
        
        for(int i = 0; i < numbers.length; i++) {
         randomInt = rand.nextInt(50) + 1;
         numbers[i] = (int)(randomInt);
        
        }
        
        
        int max = Arrays.stream(numbers).max().getAsInt();
        System.out.println("max number is : " + max);
    
    
          return numbers;
    }


و تعال نشرح محتواها :

_ السطر الاول

الكود:
 Random rand = new Random();


الفئة Random هى أحد الفئات الجاهزة التى تاتى مع حزم الجافا ولم اقم بانشائها ,تلك الفئة قادرة على توليد ارقام عشوائية فى نطاق معين وذلك باستخدام الطريقة nextInt التى تمتلكها ...لذلك قمنا بانشاء كائن جديد منها يسمي rand وهذا يعتبر ردا على استفسارك التالى :

وهل عبارة ()Random rand = new Random   تعني انشاء كائن عن فئة لم تذكرهاام ام ماذا...


_السطر الثاني :إنشاء متغير رقمي int باسم #randomInt لتخزين رقم عشوائي واحد به :
الكود:
 int randomInt;


_السطر الثالث : انشاء مصفوفة رقمية باسم numbers لتخزين عدد 5 ارقام عشوائية يتم توليدها لذلك تم تعين حجم المصفوفة بالرقم 5 على النحو التالى :
الكود:
int[] numbers = new int[5];


_السطر الرابع :حلقة تكرارية تبدء من الرقم صفر و تنهتى بحجم المصفوفة numbers :

الكود:
for(int i = 0; i < numbers.length; i++) {
        
        
        }


كما يمكنك انشاء الحلقة التكرارة اعلاه بوضع حجم المصفوفة مباشرة وهو الرقم 5 بدلا من numbers.length بالشكل التالى :

الكود:
 for(int i = 0; i < 5; i++) {
        
        }


داخل الحلقة التكرارية استخدمنا الطريقة #nextInt لتوليد رقم عشوائي فى نطاق الرقم 50 أى من الصفر لحد 50 و تخزين هذا فى المتغير  #randomInt ...على النحو التالى :
الكود:
randomInt = rand.nextInt(50) + 1;


و بالتالى فى كل مرة تدور الحلقة سيتم توليد رقم عشوائى و تخزينة فى المتغير randomInt ...فمثلا فى الدورة الاولى توليد الرقم 10 مثلا يتم تخزينة فى المتغير randomInt ..ثم تبدء الدورة الثانية يتم توليد الرقم 25 ووضعة فى متغير randomInt الذى سيقوم بحذف الرقم 10 المخزن سابقا و تخزين الرقم الجديد 25 لذلك وجب علينا ان يتم وضع المصفوفة numbers التى قمنا بانشائها بداخل الحلقة التكرارية هى الاخرى و تمرير المتغير randomInt  اليها على النحو التالى :
الكود:
 for(int i = 0; i < numbers.length; i++) {
         randomInt = rand.nextInt(50) + 1;
         numbers[i] = (int)(randomInt);
        
        }


و بالتالى ففى كل حلقة دوران بدل ما المتغير randomInt يقوم بحذف القيمة التى بداخلة حتى يكون جاهز لاستقبال الرقم الجديد تقوم المصفوفة numbers باخذ القيم التى تاتى الية حتى تمتلاء تلك المصفوفة بعدد 5 ارقام ....ويمكنك اختصار جملة التكرار السابقة على النحو التالى :

الكود:
for(int i = 0; i < numbers.length; i++) {
         numbers[i] = (int)(rand.nextInt(50) + 1);
        }


فبدلا من وضع متغير وسيط لاستقبال الرقم العشوائي من الدالة nextInt ثم تخزينة فى المصفوفة numbers نجعل الدالة تخزن فى المصفوفة مباشرة كما ظاهر اعلاه

السطر الاول بعد الحلقة التكرارية :

الكود:
int max = Arrays.stream(numbers).max().getAsInt();
System.out.println("max number is : " + max);


الحصول على اكبر قيمة من القيم المخزنة فى المصفوفة numbers وطباعتها وتم ذلك من خلال استخدام الطريقة stream التابعة للفئة Arrays وباستخدام الاسلوب max().getAsInt نحصل على اعلى قيمة

ملحوظة :يوجد العديد من الطرق للحصول على اكبر قيمة باى مصفوفة كانت تلك واحدة منها

أخر سطر فى الكود وهو
الكود:
return numbers


يعنى ارجاع بيانات المصفوفة  numbers عند تنفيذ الطريقة Stornumbers ....وكل ما سبق كان لتوليد عدد 5 ارقام عشوائية و تخزينها فى مصفوفة و ايجاد وطباعة اكبر قيمة فيها و يعتبر ذلك ردا على استفسارك التالى :
اما الطريقة الثانية هل هي خاصة بخزن الارقام ووطباعتها ام الاولى الخاصة بالطباعة


و بالتالى فان الطريقة Stornumbers لتوليد الارقام العشوائية و تخزينها فى مصفوفة و ايجاد وطباعة اكبر قيمة بها أما الطريقة التى تسمي prinNO هى لطباعة محتوي المصفوفة اى عدد 5 ارقام عشوائية المخزنة بالمصفوفة

ثانيا ما دخل الstring بهذه القضية...وكذلك ياريت شرح ( String S = Arrays.toString) ...




حتى تتمكنك من طباعة محتويات مصفوفة توجد عدة طرقة منها مثلا عمل حلقة تكرارية للدوران على كل قيم المصفوفة ومن ثم طباعتها على النحو التالى :
الكود:
   int[] array = new int[] {1, 2, 3};
      
    for(int i = 0; i < array .length; i++) {
       System.out.println(" number is : " +array[i]);
        }      



وتوجد طريقة اخرى لطباعة محتويات مصفوفة باستخدام Arrays.toString التى تستخدم لعرض سلسلة نصية من بيانات مصفوفة وذلك عن طريق تمرير اليها مصفوفة رقيمة أو اى نوع بيانات اخرى فيتم تحويلها الى نص ويتم الفصل بين عناصر المصفوفة بالفاصلة , ومن ثم طباعتها بكل سهولة على النحو التالى :
الكود:
 int[] array = new int[] {1, 2, 3};
        
       System.out.println(" number is : " +Arrays.toString(array));


وهى الطريقة التى تم استخدامها فى مثالنا لكن بشكل مختلف....لذلك اننا لا نملك مصفوفة نقوم بتمريها الى Arrays.toString انما نملك طريقة Stornumbers التى تقوم بارجاع المصفوفة numbers المخزنة بها لذلك لا يمكن الطباعة مباشرة على النحو التالى :

الكود:
 System.out.println("Random number generated is : " + Arrays.toString(Stornumbers());


لذلك وجب علينا تعريف متغير من نوع String و ليكن باسم s وتنفيذ الطريقة Stornumbers باستخدام Arrays.toString ...ثم تتم عملية الطباعة بكل سهولة على النحو التالى :
الكود:
 String S = Arrays.toString(Stornumbers());
    System.out.println("Random number generated is : " + S);


وعبارة static....لماذا استخدمتها....واذا لم تستخدمها كيف سيكون شكل الكود بدونها


نستخدم كلمة #static حتى يمكننا الاشارة مباشرة الى الطريقة دون انشاء كائن جديد من الفئة التى تحتويها على النحو التالى :

الكود:
 public static void main(String[] args) {
        
        prinNO();
            
    }


من الكود أعلاه تم الاشارة الى الطريقة فقط دون انشاء كائن جديد ....أما فى حالة عدم استخدامها سيكون شكل البرنامج كما يلى :
الكود:
public static void main(String[] args) {
        
      
    test t = new test();
    
     t.prinNO();
    }


هنا انشائنا كائن جديد من الفئة test ثم اشارنا الى الطريقة prinNO المراد تنفيذها


اتمنى ان تكون الفكرة وصلت ....وان لم تسيتطيع فهم اى جزئية اسأل من جديد

تحتاتى لك
من طرف أحمد مناع
في الأحد فبراير 03, 2019 9:49 pm
 
ابحث في: نقاش و أستفسارات الاعضاء
موضوع: حل اسئلة وتمارين بلغة جافا الجزء الثالث
المساهمات: 28
مشاهدة: 15533

إستخدامات الكلمة Static فى تطبيقات الجافا

أهلا بكم

الكلمة #Static كلمة مفتاحية مشهورة جداً في لغة الجافا، هذه الكلمة تُستخدم بكثرة في لغة الجافا في أوساط المبتدئين و المحترفين على حد سواء. و تستخدم لاستدعاء الدالة أو المتغيرات بدون إنشاء كائن جديد من الفئة أو الكلاس يمكن استخدام الكلمة الأساسية #Static مع الاتى :



  1. الطرق و الدوال method

  2. الفئات class

  3. المتغيرات variable

  4. كتل التهيئة block



وحتى نستطيع فهم ماسبق نفترض أن لدينا الفئة التالية لطباعة جملة على النحو التالى :

الكود:

class example1{
   void myMethod()
    {
        System.out.println("my Zahra");
    }  
}


ولكى يتم تنفيذ تلك الفئة فى الدالة الرئيسية يجب علينا إنشاء كائن جديد من الفئة و ستدعاء الدالة myMethod على النحو التالى :

الكود:
class JavaApplication1 {
 
    public static void main(String[] args) {
       example1 n =new example1();
       n.myMethod();
    }
    
}



لكن فى حالة استخدام الكلمة الاساسية  #Static عند انشاء الدالة او الطريقة myMethod على النحو التالى :
الكود:

class example1{
 static void myMethod()
    {
        System.out.println("my Zahra");
    }  
}


ففى هذه الحالة يمكننا تفيذ الدالة أعلاه دون الحاجة الى إنشاء كائن جديد من الفئة على النحو التالى :

الكود:
class JavaApplication1 {
 
    public static void main(String[] args) {
       example1.myMethod();
    }
    
}



ما الفائدة من ذلك :

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

مثال أخر يوضح كيفية استخدام #static مع كتل التهيئة block و متغيراتها
الكود:
class JavaExample{
   static int num;
   static String mystr;
   static{
      num = 97;
      mystr = "Static keyword in Java";
   }
   public static void main(String args[])
   {
      System.out.println("Value of num: "+num);
      System.out.println("Value of mystr: "+mystr);
   }
}


Output:
Value of num: 97

Value of mystr: Static keyword in Java
من طرف زهراء
في الثلاثاء يناير 01, 2019 6:08 pm
 
ابحث في: أساسيات اللغة Java Basics
موضوع: إستخدامات الكلمة Static فى تطبيقات الجافا
المساهمات: 5
مشاهدة: 1559

الرجوع الى أعلى الصفحة

انتقل الى: