English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدليل، ستعرف بناء الفئة في Java، وكيفية إنشائه واستخدامه وتصنيفات بناء الفئة المختلفة بمساعدة أمثلة.
في Java، كل فئة لها بناءها الخاص، ويتم استدعاء بناء الفئة تلقائيًا عند إنشاء موضوع الفئة. يشبه بناء الفئة الأسلوب، لكنه ليس أسلوبًا.
واحدJava 方法تميز بناء الفئة باسمها ومخرجها من خلال. تكون بناء الفئة نفسها، ولا تعود بأي قيمة. على سبيل المثال،
فئةُ Testُ { Test()ُ {}} //ُ جسمُ بناءُ عامُ } }
في هذا المكان، Test() هوُ بناءُ عامُ. إنهُ يحملُ نفسُ الاسمُ كالفئةِ ويكونُ بدونُ نوعُ عودة.
فئةُ Testُ { voidُ Test() //ُ جسمُ الطريقةُ } }
في هذا المكان، Test() يتطابقُ مع اسمُ الفئةِ. ولكنُ لديهُ نوعُ عودةُ voidُ. لذا، فهوُ طريقةُ وليس بناءُ عامًا.
فئةُ Mainُ { privateُ intُ x; //جسم المؤلفة privateُ Main(){ System.out.println("تمُ استدعاءُ بناءُ عامُ"); xُ =ُ 5; } publicُ staticُ voidُ main(Stringُ []ُ args){ //ُ استدعاءُ بناءُ عامُ عندُ إنشاءُ العنصرُ Mainُ objُ =ُ newُ Main(); System.out.println("قيمةُ xُ =ُ "ُ +ُ obj.x); } }
الإخراج:
تمُ استدعاءُ بناءُ عامُ قيمةُ xُ =ُ 5
في هذا المثال، لدينا بناءُ عامُ مُسمى Main(). في طريقة main، نحنُ نقومُ بإنشاءُ عنصرُ من الفئةُ المسمى obj.
Mainُ objُ =ُ newُ Main();
في هذا العملية، سيتمُ استدعاءُ بناءُ عامُ. لذا، سيتمُ تنفيذُ جملة printُ وتحديثُ المتغير x.
في Javaُ، يمكنُ تقسيمُ بناءُ عامُ إلى 3 أنواع:
无参数构造函数
默认构造函数
بناءُ عامُ معلماتٍ
بناءُ عامُ Javaُ يمكنُ أن يكونُ معلماتٍ أو لا يحتويُ على أيُّ معلماتٍ. إذا لم يُقبلُ بناءُ عامُ أيُّ معلماتٍ، فإنه يُدعى بناءُ عامُ بدونُ معلماتٍ. مثالًا،
privateُ بناءُ عامُ() //جسم المؤلفة }
فئةُ Mainُ { intُ i; //بناء الدوال بدون معامل privateُ Main(){ iُ =ُ 5; System.out.println("تمُ إنشاءُ العنصرُ والـiُ =ُ "ُ +ُ i); } public static void main(String[] args) { //ُ استدعاءُ بناءُ العامُ بدونُ أيُّ معلماتٍ Mainُ objُ =ُ newُ Main(); } }
الإخراج:
تمُ إنشاءُ العنصرُ والـiُ =ُ 5
في هذا المكان، لا يتقبلُ بناءُ العامُ Main() أيُّ معلماتٍ.
هل لاحظتُ أن مُزودُ الوصولُ لبناءُ العامُ Main() هو خاصُ(private)?
هذا لأن العنصرُ مُنشأُ من نفسُ الفئةِ. لذا، يمكنُ له الوصولُ إلى بناءُ العامِ.
لكن، إذا كان العنصرُ مُنشأً خارجًا من الفئة، فإنه يجبُ أن يتمُ إعلانُ بناءُ العامُ كـpublicُ لكي يتمُ الوصولُ إليه. مثالًا:
class Company { String domainName; //ُ بناءُ عامُ public Company(){ domainNameُ =ُ "oldtoolbag.com"; } } publicُ فئةُ Mainُ { public static void main(String[] args) { //ُ في فئة أخرى إنشاء العنصر شركةُ companyObjُ =ُ newُ Company(); System.out.println("اسم المجال = " + companyObj.domainName) } }
الإخراج:
اسم المجال = oldtoolbag.com
قراءة متعلقة: Java 访问修饰符
إذا لم يتم إنشاء أي مؤلفة، فإن مساهر جافا يقوم بإنشاء مؤلفة بدون معلمات تلقائيًا عند تشغيل البرنامج. هذه المؤلفة تُسمى المؤلفة الافتراضية. تستخدم المؤلفة الافتراضية القيم الافتراضية لتعيين جميع المتغيرات التجريبية غير المعدية.
النوع | القيم الافتراضية |
---|---|
boolean | false |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
char | \u0000 |
float | 0.0f |
double | 0.0d |
object | null |
class DefaultConstructor { int a; boolean b; public static void main(String[] args) { //إدخال المؤلفة الافتراضية DefaultConstructor obj = new DefaultConstructor(); System.out.println("a = " + obj.a); System.out.println("b = " + obj.b); } }
الإخراج:
a = 0 b = false
في البرنامج أعلاه، لم نعين قيم المتغيرات a وb بعد. ولكن عندما نقوم بإنشاء موضوع للفئة، يمكننا رؤية أن هذه القيم قد تم تعيينها باستخدام بعض القيم.
هذا لأن مساهر جافا يقوم بإنشاء مؤلفة افتراضية تلقائيًا. ستستخدم المؤلفة هذه القيم الافتراضية 0 وfalse لتعيين قيم المتغيرات a وb.
البرنامج أعلاه يعادل:
class DefaultConstructor { int a; boolean b; //مؤلفة خاصة private DefaultConstructor() { a = 0; b = false; } public static void main(String[] args) { //إدخال المؤلفة DefaultConstructor obj = new DefaultConstructor(); System.out.println("a = " + obj.a); System.out.println("b = " + obj.b); } }
الإخراج:
a = 0 b = false
مثل الطريقة، يمكننا نقل المعلمات إلى المؤلفة. هذه المؤلفة تُسمى المؤلفة الم参数ية. على سبيل المثال،
private Constructor(arg1, arg2, ..., argn) { //جسم المؤلفة }
class Vehicle { int wheels; //مؤلفة تأخذ قيمة واحدة private Vehicle(int wheels){ this.wheels = wheels; System.out.println(عجلات + " عجلة سيارة مُنشأة."); } public static void main(String[] args) { //استدعاء بناء الدوال بتحويل معامل واحد Vehicle v1 = new Vehicle(2); Vehicle v2 = new Vehicle(3); Vehicle v3 = new Vehicle(4); } }
الإخراج:
تم إنشاء مركبة ذات عجلات إثنين. تم إنشاء مركبة ذات عجلات ثلاثة. تم إنشاء مركبة ذات عجلات أربعة.
في المثال السابق،لدينا بناء الدوال المسمى Vehicle(). بناء الدوال يقبل معاملًا يُدعى wheels.
في هذا المكان،عند إنشاء الكائن،نقوم بتحويل المعامل إلى بناء الدوال. ونقوم بناء الإخراج بناءً على المعامل.
مثل بناء الدوال المختلفة،يمكننا أيضًا بناء الدوال المختلفة في Java. إذا لم تكن معتادًا على بناء الدوال المختلفة،يرجى زيارةJava 方法重载。
في تغيير بناء الدوال،هناك اثنان أو أكثر من بناء الدوال مع معاملات مختلفة. على سبيل المثال،
class Company { String domainName; //بناء الدوال بدون معامل public Company(){ this.domainName = "default"; } //بناء الدوال مع معامل واحد public Company(String domainName){ this.domainName = domainName; } public void getName(){ System.out.println(this.domainName); } public static void main(String[] args) { //استدعاء بناء الدوال بدون معامل Company defaultObj = new Company(); //استدعاء بناء الدوال باستخدام معامل واحد Company w3codeboxObj = new Company("oldtoolbag.com"); defaultObj.getName(); w3codeboxObj.getName(); } }
الإخراج:
default oldtoolbag.com
في المثال السابق،لدينا بناء الدوال الاثنين: public Company() و public Company(String domainName).
في هذا المكان،استخدمت كلاً من بناء الدوال المختلفة القيم لبدء متغير domainName.因此,根据我们需要的值,我们可以从main()方法调用构造函数。
注意,我们使用this关键字来指定类的变量。要了解有关this关键字的更多信息,请访问Java this关键字。
构造函数在实例化对象时被隐式调用。
创建构造函数的两个规则是:
构造函数的名称应与类的名称相同。
Java构造函数不得具有返回类型。
如果类没有构造函数,则Java编译器会在运行时自动创建默认构造函数。默认构造函数使用默认值初始化实例变量。例如,int变量将被初始化为0
构造函数类型:
无参数构造函数 - 不接受任何参数的构造函数
默认构造函数 - 如果没有显式定义,Java编译器会自动创建一个构造函数。
参数化构造函数 - 接受参数的构造函数
构造函数不能是抽象的abstract 、static或final。
构造函数可以重载,但不能被重写。