طرق مختلفة لإنشاء كائن في Java
المصدر:
Medium في هذا البرنامج التعليمي، سوف نتعلم طرقًا مختلفة لإنشاء كائن في Java. كائن Java هو مثيل لفئة Java. كل كائن له حالة، وسلوك، ومعرف. تقوم الحقول (المتغيرات) بتخزين حالة الكائن، بينما تعرض الطرق (الوظائف) عمل الكائن. تعمل الفئات بمثابة "مخططات" يتم من خلالها إنشاء مثيلات الكائن في وقت التشغيل.
إنشاء كائن في جافا
إنشاء الكائن هو عملية تخصيص الذاكرة لتخزين البيانات في حقول الفئة (وتسمى أيضًا المتغيرات). غالبًا ما تسمى هذه العملية بإنشاء مثيل للفئة. هناك أربع طرق مختلفة لإنشاء الكائنات في Java:
- باستخدام الكلمة الأساسية الجديدة
- طريقة المثيل الجديد ()
- طريقة الاستنساخ ().
- إلغاء تسلسل كائن
الآن دعونا نلقي نظرة على كل من الطرق المذكورة بالتفصيل.
الكلمة الرئيسية جديدة
هذه هي الطريقة الأكثر شيوعًا لإنشاء كائن في Java. تقوم الكلمة الأساسية
الجديدة بإنشاء مثيل للفئة عن طريق تخصيص الذاكرة لمثيل جديد من النوع المحدد. بعد الجديد يأتي المُنشئ - وهي طريقة خاصة مسؤولة عن إنشاء كائن وتهيئة حقول الكائن الذي تم إنشاؤه. يتم إنشاء كائن باستخدام عامل التشغيل
الجديد وتهيئته باستخدام مُنشئ. فيما يلي مثال لإنشاء كائن Java باستخدام عامل التشغيل
الجديد :
Date today = new Date();
يقوم هذا التعبير بإنشاء كائن
تاريخ جديد (
التاريخ عبارة عن فئة داخل الحزمة
java.util ). تؤدي هذه الجملة المفردة في الكود ثلاث عمليات: الإعلان، وإنشاء مثيل، والتهيئة.
التاريخ اليوم هو إعلان متغير يُعلم المترجم أن
اليوم سيشير إلى كائن من النوع
Date . يقوم عامل التشغيل الجديد بإنشاء مثيل لفئة
التاريخ (إنشاء كائن
تاريخ جديد في الذاكرة)، ويقوم
Date() بتهيئة الكائن. خذ بعين الاعتبار المثال أدناه:
public class Person {
private String name;
private int uid;
public Person() {
this.name = "Michael Cole";
this.uid = 101;
}
public Person(String name, int uid) {
super();
this.name = name;
this.uid = uid;
}
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("John Bodgan", 102);
System.out.println("Name: " + p1.getName() + " UID: " + p1.getUid());
System.out.println("Name: " + p2.getName() + " UID: " + p2.getUid());
}
}
من هذا الكود، نقوم بإنشاء كائن
Person باستخدام الكلمة الأساسية
الجديدة :
- يستدعي الكائن p1 مُنشئًا غير محدد المعلمات مع تعيين قيمة اسم المتغير على "Michael Cole" وتعيين UID على 101.
- يستدعي الكائن p2 المُنشئ ذي المعلمات، حيث يقوم بتمرير القيمة "John Bodgan" و102 إلى المُنشئ، ثم يتم تعيين اسم متغير وUID لهذه القيم.
باستخدام طريقة newInstance()
يتم استخدام طريقة
newInstance() في Java لإنشاء مثيل لكائن من فئة معينة ديناميكيًا. هناك استخدامان قياسيان للطريقة
newInstance() :
- طريقة newInstance() من java.lang.Class API
- طريقة newInstance() من java.lang.reflect.Constructor API
استخدام newInstance() من Class API
لإنشاء كائن من فئة في وقت التشغيل، يجب علينا استدعاء الأسلوب
newInstance() من Class API، الذي يقوم بإرجاع كائن من تلك الفئة. لا يأخذ الأسلوب
newInstance() للفئة
java.lang.Class أي معلمات أو وسائط ويمكن أن يطلق عليه مُنشئ بدون وسيطات لتلك الفئة. دعونا نلقي نظرة على بعض الأمثلة على التعليمات البرمجية لإنشاء كائن من فئة
الشخص باستخدام طريقة
newInstance() للفئة
java.lang.Class :
public class Person {
private String name;
private int uid;
public Person() {
this.name = "Carl Max";
this.uid = 101;
}
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class c = Class.forName("com.medium.option2.Person");
@SuppressWarnings("deprecation")
Person p = (Person) c.newInstance();
System.out.println("Name: " + p.getName());
System.out.println("UID: " + p.getUid());
}
}
يقوم Class.forName (الاسم المؤهل بالكامل للفئة) بتحميل فئة باسم
Person ، ثم يقوم
newInstance() بإنشاء كائن جديد من النوع
Person وإرجاع مرجع إليه. الآن، باستخدام مرجع
الشخص إلى
p ، يمكننا استدعاء
getters() و
setter() لتنفيذ إجراءات معينة. يرجى الملاحظة:
- يرمي كل من Class.forName() و newIstance() استثناءات يجب معالجتها إما باستخدام كتل المحاولة والالتقاط أو الكلمة الأساسية throws .
- لقد تم إهمال طريقة newInstance() من Class API منذ Java 9.
استخدام newInstance() من Constructor API
تشبه طريقة
newInstance() لفئة
Constructor (
java.lang.reflect.Constructor ) طريقة newInstance() لفئة
Class ، باستثناء أنها تقبل معلمات للمنشئات ذات المعلمات. دعونا نوضح هذا الأسلوب عن طريق إنشاء كائن من فئة
الشخص باستخدام طريقة
newInstance() للفئة
java.lang.reflect.Constructor :
public class PersonTwo {
private String name;
private int uid;
public PersonTwo() {
this.name = "Maya Kumari";
this.uid = 101;
}
public PersonTwo(String name) {
this.name = name;
this.uid = 102;
}
public PersonTwo(String name, Integer uid) {
this.name = name;
this.uid = uid;
}
public static void main(String[] args) {
try {
Class.forName("com.medium.option2.PersonTwo");
Constructor c1 = PersonTwo.class.getConstructor();
PersonTwo p1 = (PersonTwo) c1.newInstance();
System.out.println("Name: " + p1.getName());
System.out.println("UID: " + p1.getUid());
Constructor c2 = PersonTwo.class.getConstructor(String.class);
PersonTwo p2 = (PersonTwo) c2.newInstance("James Gunn");
System.out.println("Name: " + p2.getName());
System.out.println("UID: " + p2.getUid());
Constructor c3 = PersonTwo.class.getConstructor(String.class, Integer.class);
PersonTwo p3 = (PersonTwo) c3.newInstance("Mark Brown", 103);
System.out.println("Name: " + p3.getName());
System.out.println("UID: " + p3.getUid());
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
في الكود أعلاه، نحتاج أولاً إلى تحميل الفصل باستخدام طريقة
Class.forName() . بعد ذلك، سوف نقوم باستدعاء طريقة
getConstructor() لمطابقة أنواع البيانات الخاصة بالمعلمات التي تم تمريرها. أخيرًا، في طريقة
newInstance() نقوم بتمرير المعلمة المطلوبة (
فارغة إذا لم يكن هناك وسيطة). سيُرجع الأسلوب
newInstance() كائنًا جديدًا من فئة PersonTwo عن طريق استدعاء المُنشئ المناسب.
باستخدام طريقة استنساخ ().
تعد طريقة
clone () جزءًا من فئة
الكائن وتستخدم لإنشاء نسخة من كائن موجود. يقوم بإنشاء كائن من الفئة دون استدعاء أي مُنشئ فئة. لاستنساخ طريقة ما، يجب أن تكون الفئة المقابلة قد طبقت الواجهة
القابلة للاستنساخ ، وهي واجهة علامة. سنقوم الآن بإنشاء كائن من فئة
الشخص ثم استنساخه في كائن آخر من فئة
الشخص :
public class Person implements Cloneable {
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
private String name;
private int uid;
public Person(String name, int uid) {
super();
this.name = name;
this.uid = uid;
}
public static void main(String[] args) {
Person p1 = new Person("Ryan", 101);
try {
Person p2 = (Person) p1.clone();
System.out.println("Name: " + p2.getName());
System.out.println("UID: " + p2.getUid());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
ملحوظة. سيشير الكائن المستنسخ إلى نفس الكائن الأصلي عبر مرجع
p2 . ومع ذلك، سيكون للكائن المستنسخ تعيين ذاكرة منفصل. هذا يعني أن أي تغييرات يتم إجراؤها على كائن
الشخص المشار إليه بواسطة
p2 لن تغير كائن
الشخص الأصلي المشار إليه بواسطة
p1 . وذلك لأن طريقة
clone () تنشئ نسخة سطحية من الكائنات.
استخدام إلغاء تسلسل الكائنات
إلغاء تسلسل الكائنات هو عملية استخراج كائن من سلسلة من تدفقات البايت. التسلسل يفعل العكس. والغرض الرئيسي منه هو استرداد كائن مخزن من قاعدة البيانات/الشبكة وإعادته إلى الذاكرة. إذا أردنا إجراء تسلسل لكائن ما أو إلغاء تسلسله، فنحن بحاجة إلى تنفيذ الواجهة
القابلة للتسلسل (واجهة الرمز المميز). خذ بعين الاعتبار المثال أدناه:
public class PersonDriver {
public static void main(String[] args) {
Person p1 = new Person("Max Payne", 101);
FileOutputStream fileOutputStream;
try {
fileOutputStream = new FileOutputStream("link to text file");
ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);
outputStream.writeObject(p1);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream fileInputStream;
try {
fileInputStream = new FileInputStream("link to text file");
ObjectInputStream inputStream = new ObjectInputStream(fileInputStream);
Person p2 = (Person) inputStream.readObject();
System.out.println("Name: " + p2.getName());
System.out.println("UID: " + p2.getUid());
inputStream.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
نقوم هنا أولاً بإجراء تسلسل لكائن
الشخص بالرجوع إلى
p1 في ملف نصي. سيقوم الأسلوب
writeObject() بكتابة دفق بايت الكائن إلى ملف نصي. بعد ذلك، باستخدام إلغاء تسلسل الكائن، نقوم باستخراج كائن
الشخص مرة أخرى إلى
p2 . وبالمثل، فإن طريقة
readObject() سوف تقرأ كائنًا من تدفق إدخال الكائن. أخيرًا، سنقوم بطباعة البيانات من كائن
الشخص إلى وحدة التحكم.
خاتمة
في هذه المقالة، تعرفنا على الطرق المختلفة لإنشاء كائن في Java. أولاً، نظرنا إلى إنشاء كائنات باستخدام الكلمة الأساسية
الجديدة ، وهي الطريقة الأكثر شيوعًا. تعلمنا بعد ذلك طريقة
newInstance() من فئتي
Class و
Constructor ، وهي طريقة شائعة أخرى لإنشاء الكائنات. استخدمنا بعد ذلك طريقة
clone() ، التي تنشئ نسخة سطحية من الكائن الموجود بدلاً من إنشاء كائن جديد. وأخيرًا، استخدمنا مفهوم تسلسل الكائنات وإلغاء التسلسل لإنشاء كائنات في Java.
سلسلة إلى Int في Java - كيفية تحويل سلسلة إلى عدد صحيح
المصدر:
FreeCodeCamp ستتعلم اليوم كيفية تحويل سلسلة إلى عدد صحيح في Java باستخدام طريقتين من فئة Integer - parseInt() و valueOf() . سيساعدك هذا عند إجراء عمليات رياضية باستخدام قيمة متغير السلسلة.
كيفية تحويل سلسلة إلى عدد صحيح في Java باستخدام Integer.parseInt
يفترض هذا الخيار أن الأسلوب
parseInt() يأخذ سلسلة لتحويلها إلى عدد صحيح كمعلمة:
Integer.parseInt(string_varaible)
قبل النظر إلى مثال لاستخدامه، دعونا نرى ما يحدث عند إضافة قيمة سلسلة وعدد صحيح دون أي تحويل:
class StrToInt {
public static void main(String[] args) {
String age = "10";
System.out.println(age + 20);
}
}
في هذا الكود، قمنا بإنشاء متغير
عمري بقيمة السلسلة "10". عندما أضفنا الرقم 20 إلى قيمة عددية، حصلنا عن طريق الخطأ على 1020 بدلاً من الإجابة الصحيحة وهي 30. يمكن تصحيح ذلك باستخدام طريقة
parseInt() :
class StrToInt {
public static void main(String[] args) {
String age = "10";
int age_to_int = Integer.parseInt(age);
System.out.println(age_to_int + 20);
}
}
هنا، لتحويل متغير العمر إلى عدد صحيح، قمنا بتمريره كمعلمة إلى طريقة
parseInt() -
Integer.parseInt(age) - وقمنا بتخزينه في متغير يسمى
age_to_int . الآن عند إضافتها إلى عدد صحيح آخر نحصل على الإضافة الصحيحة:
age_to_int + 20 .
كيفية تحويل سلسلة إلى عدد صحيح في Java باستخدام Integer.valueOf
تعمل طريقة
valueOf() بنفس طريقة طريقة
parseInt() . يأخذ كمعلمة سلسلة تحتاج إلى تحويلها إلى عدد صحيح. هنا مثال:
class StrToInt {
public static void main(String[] args) {
String age = "10";
int age_to_int = Integer.valueOf(age);
System.out.println(age_to_int + 20);
}
}
في الكود أعلاه يمكنك رؤية نفس الشيء كما في القسم السابق:
- لقد مررنا سلسلة كمعلمة إلى valueOf() : Integer.valueOf(age) . تم تخزينه في متغير يسمى age_to_int .
- ثم أضفنا 10 إلى المتغير الذي تم إنشاؤه: age_to_int + 20 . وكانت النتيجة 30 بدلا من 1020.
خاتمة
في هذه المقالة، ناقشنا تحويل السلاسل إلى أعداد صحيحة في Java. لتحويل سلسلة إلى عدد صحيح، تم استخدام طريقتين من فئة
Integer -
parseInt() و
valueOf() . ترميز سعيد!
GO TO FULL VERSION