124 lines
4.3 KiB
Markdown
124 lines
4.3 KiB
Markdown
|
---
|
|||
|
title: Static
|
|||
|
localeTitle: ثابتة
|
|||
|
---
|
|||
|
# ثابتة
|
|||
|
|
|||
|
عندما تقوم بتعريف متغير أو طريقة بأنها ثابتة ، فإنها تنتمي إلى الفئة ، بدلاً من نسخة محددة. هذا يعني أنه يوجد مثيل واحد فقط من عضو ثابت ، حتى إذا قمت بإنشاء كائنات متعددة للفئة ، أو إذا لم تقم بإنشاء أي. ستتم مشاركتها بواسطة جميع الكائنات.
|
|||
|
|
|||
|
يمكن استخدام الكلمة الأساسية الثابتة مع المتغيرات والطرق ومقاطع التعليمات البرمجية والفئات المتداخلة.
|
|||
|
|
|||
|
## المتغيرات الثابتة
|
|||
|
|
|||
|
**_مثال:_**
|
|||
|
|
|||
|
`public class Counter {
|
|||
|
public static int COUNT = 0;
|
|||
|
Counter() {
|
|||
|
COUNT++;
|
|||
|
}
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
ستتم مشاركة المتغير `COUNT` بواسطة جميع كائنات تلك الفئة. عندما نقوم بإنشاء كائنات من صف مكافحة لدينا في الرئيسي ، والوصول إلى متغير ثابت.
|
|||
|
|
|||
|
`public class MyClass {
|
|||
|
public static void main(String[] args) {
|
|||
|
Counter c1 = new Counter();
|
|||
|
Counter c2 = new Counter();
|
|||
|
System.out.println(Counter.COUNT);
|
|||
|
}
|
|||
|
}
|
|||
|
// Outputs "2"
|
|||
|
`
|
|||
|
|
|||
|
Outout هو 2 ، لأن متغير `COUNT` ثابت ويتم زيادته بمقدار واحد في كل مرة يتم إنشاء كائن جديد لفئة Counter. يمكنك أيضًا الوصول إلى المتغير الثابت باستخدام أي كائن من هذه الفئة ، مثل `c1.COUNT` .
|
|||
|
|
|||
|
## طرق ثابتة
|
|||
|
|
|||
|
ينتمي الأسلوب الثابت إلى الفئة بدلاً من الحالات. وبالتالي ، يمكن استدعائها دون إنشاء مثيل للفئة. يتم استخدامه لتغيير محتويات ثابتة للفئة. هناك بعض القيود على الأساليب الثابتة:
|
|||
|
|
|||
|
1. لا يمكن للطريقة الثابتة استخدام أعضاء غير ثابت (متغيرات أو وظائف) للفئة.
|
|||
|
2. لا يمكن للطريقة الساكنة استخدام `this` الرئيسية أو `super` .
|
|||
|
|
|||
|
**_مثال:_**
|
|||
|
|
|||
|
`public class Counter {
|
|||
|
public static int COUNT = 0;
|
|||
|
Counter() {
|
|||
|
COUNT++;
|
|||
|
}
|
|||
|
|
|||
|
public static void increment(){
|
|||
|
COUNT++;
|
|||
|
}
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
يمكن أيضًا استدعاء أساليب ثابتة من مثيل الطبقة.
|
|||
|
|
|||
|
`public class MyClass {
|
|||
|
public static void main(String[] args) {
|
|||
|
Counter.increment();
|
|||
|
Counter.increment();
|
|||
|
System.out.println(Counter.COUNT);
|
|||
|
}
|
|||
|
}
|
|||
|
// Outputs "2"
|
|||
|
`
|
|||
|
|
|||
|
هو 2 الإخراج لأنه يحصل زيادة بواسطة `increament()` الأسلوب `increament()` . على غرار المتغيرات الثابتة ، يمكن أيضًا الوصول إلى الطرق الثابتة باستخدام متغيرات الحالة.
|
|||
|
|
|||
|
## كتل ثابتة
|
|||
|
|
|||
|
يتم استخدام كتل التعليمات البرمجية الثابتة لتهيئة المتغيرات الثابتة. يتم تنفيذ هذه الكتل مباشرة بعد إعلان المتغيرات الثابتة.
|
|||
|
|
|||
|
**_مثال:_**
|
|||
|
|
|||
|
`public class Saturn {
|
|||
|
public static final int MOON_COUNT;
|
|||
|
|
|||
|
static {
|
|||
|
MOON_COUNT = 62;
|
|||
|
}
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
`public class Main {
|
|||
|
public static void main(String[] args) {
|
|||
|
System.out.println(Saturn.MOON_COUNT);
|
|||
|
}
|
|||
|
}
|
|||
|
// Outputs "62"
|
|||
|
`
|
|||
|
|
|||
|
الإخراج هو 62 ، لأنه يتم تعيين متغير `MOON_COUNT` تلك القيمة في كتلة ثابتة.
|
|||
|
|
|||
|
## فئات متداخلة ثابتة
|
|||
|
|
|||
|
يمكن أن يكون للفئة فئة متداخلة ثابتة يمكن الوصول إليها باستخدام اسم الفئة الخارجية.
|
|||
|
|
|||
|
**_مثال:_**
|
|||
|
|
|||
|
`public class Outer {
|
|||
|
|
|||
|
public Outer() {
|
|||
|
}
|
|||
|
|
|||
|
public static class Inner {
|
|||
|
public Inner() {
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
في المثال أعلاه ، يمكن الوصول إلى الطبقة `Inner` مباشرة كعضو ثابت في الفصل `Outer` .
|
|||
|
|
|||
|
`public class Main {
|
|||
|
public static void main(String[] args) {
|
|||
|
Outer.Inner inner = new Outer.Inner();
|
|||
|
}
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
واحدة من حالات الاستخدام للدروس المتداخلة الثابتة في [نموذج البناء](https://en.wikipedia.org/wiki/Builder_pattern#Java) المستخدمة بشكل شائع في جافا.
|