• 0
زوار

نظره على Exceptions in Java

سؤال

السلام عليكم ،

الموضوع مفتوح ( كعادة مواضيعي ملخبطه ) ،

ماهو الـ Exception ?

ببساطه هو استثناء لـ normal flow ببرنامجك ،

معنى هذا انه مايحصل كل مره ، فهو استثناء Exception

ماأهميته ؟ ooh

عندما تقول ماأهمية الException وكأنك ستحكم على برنامجك بالموت المؤبد ،

لأن بنسبة 80% ( ان لم تخني الذاكره ) من مشاكل البرامج الكبيره هي من صعوبة عمل handling للـ Errors اللي فيها

جميل جداً ، قبل ان نتطرق للExceptions in java فيه شئ بسيط نلمحه بسرعه

Stack call

stack هو data structure بمبدأ Last In First Out -LIFO

ببساطه كل Thread ( لاتنسى أن برنامجك يبدأ بthread اسمها main ) لها stack خاص فيها

عندما تقوم بتشغيل البرنامج يكون في أسفل الstack الmain method

عندما تنادي method اخرى تضاف هذه المثد إلى الstack ، مثال

class A{
public static void main(String... args){

go();
}
static void go(){
went();
}
static void went(){

}
}

stack will be :

A.went

A.go

A.main

عندما تنتهي جميع methods في stack ينتهي برنامجك ، بمعنى عندما تنادى المثد went وتعملها execute والمثد go بعدها والمثد main فالبرنامج ينتهي

هذا المفهوم مهم جداً في حياتك مع الجافا لأنه عادة يتم طباعة هذا الstack بالمثد e.printStackTrace ولاتعرف اين المشكله

got it ؟

نكمل بعد شوي :lol:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

27 إجابة على هذا السؤال .

  • 0

جميل جدا استاذ عيسى

لكن ما هي الميثود e.printStackTrace - ما هي وظيفتها ؟ :huh:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ياأخي لو تقرأ مره أخرى راح تشوف وش معناتها

ببساطه هي تطبع محتويات stack من وقت حصول الexception

class A{
public static void main(String... args){

go();
}
static void go(){
went();
}
static void went(){
try {
throw new Exception();
} catch (Exception ex) {
ex.printStackTrace();
}

}
}

تم تعديل بواسطه {عيسى}
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي الكريم العزيز / الحرازي توني انتبه لكلمة استاذ ، أنا عيسى ولست أستاذ عيسى

،

سيأتيني احدكم ويقول :

تراك أزعجتنا Exception Exception من وين تجي هالException ? :angry:

سؤال جميل ،

مارأيك عندما تقوم بتحويل String إلى int ?

class A{
public static void main(String... args){
int i1=Integer.parseInt("1"); // fine
int i2=Integer.parseInt("two");// Ooh !! NumberFormatException
} }

الكود السابق المثد parseInt تنتظر منك int وليس characters فبالتالي عندما لاتستطيع تحويله إلى int تقوم بارسال Exception يدل على انك لم ترسل الفورمات الصحيحه لهذه المثد .

مارأيك عندما تؤشر على عنصر مب موجود بالمصفوفه :

class A{
public static void main(String... args){
int[]i=new int[3];
System.out.println(i[4]);//oops , i[4] out of array scope
} }

مارأيك عندما تطلب مثد من Object مب موجود ، nulling reference

class A{
public static void main(String... args){
A a=null;
System.out.println(a.toString());// ooh, invoke toString() from nothing !
} }

مارأيك عندما تقوم بعملية casting لObject لاتستطيع ( تفشل عملية is-a )

class A{
public static void main(String... args){
CharSequence cs=new StringBuilder("Saad");
String s=(String)cs;
} }

مارأيك عندما تقوم بمناداة مثد وتكون حالة الاوبجكت لاتسمح بالوضع الراهن :

class A{
public static void main(String... args){
Scanner sc=new Scanner("abc");
sc.close();
String s=sc.next();// IllegalState you already closed the Stream '
} }

هل عرفت من وين تجي Exceptions ?

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وضحت اخي عيسى .

ننتظر التكملة

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

طيب ، خلاص درينا ان فيه Exceptions وش المطلوب ؟ :angry:

بما أنك أخي الحبيب ، تحب لغة الجافا ، فالواجب عليك ان تحترمها ،

ولغة الجافا تقول لك أولاً ، لابد أن تعمل handling للـexceptions اللي تسويها ،

طيب كيف ؟

بواسطة

class A{
public static void main(String... args){
try{
// here your doubt work
}
catch(Exception e){
//here how you want to handle the exception

}
} }

مثال :

class A{
static int num;
static String user="Saad";
public static void main(String... args){

addNumber("Saad");

}

static void addNumber(String s){
try{
int i=Integer.parseInt(s);
num=i;
}
catch(NumberFormatException nfe){
System.out.println("DearUser: Saad, must inter Integer Literals ");
}

}

}

انت الآن خليت الException له معنى ،

بهذه الطريقه تكون عملت Exception Handling عندما يظهر لعملاء برنامجك بالتأكيد سيعرفون ان المشكله اتت من الجزء الفلاني بسبب الشئ الفلاني

طيب ماهو الشئ الثاني ؟

الشئ الثاني هو أن تحترم اللغه ، وان لاتكون مبرمج كسول :lol:

أقصد بكسول بأن تختصر كل Exceptions بـ catch واحده

class A{
public static void main(String... args){
try {

RandomAccessFile raf=new RandomAccessFile("aa","rw");
String s= raf.readUTF();
} catch (FileNotFoundException ex) {
System.out.println("File Not Found !");
}
catch(IOException e){
System.out.println("Error while reading from file ");
}


}}

المثال السابق جميل ، على عكس هذا :

class A{
public static void main(String... args){
try {

RandomAccessFile raf=new RandomAccessFile("aa","rw");
String s= raf.readUTF();
} catch (Exception e) {
System.out.println("Error !"); // any error ? bad programming
}
}}

الجافا تفهم ان مبرمجينها دائماً ، ناس يقدرون الاخطاء ، لذلك هي تجبرك على كتابة handling عندما تستدعي أي method تعمل thowing لـ checked Exception

ماهو checked Exception ،

هناك نوعين من Exception ، checked & unchecked

checked :

جرب :

class A{
public static void main(String... args){

RandomAccessFile raf=new RandomAccessFile("aha","rw");

}}

سيظهر لك compiler error يقول لك لابد أن تعمل try-catch لها ،

جرب :

class A{
public static void main(String... args){

int i=Integer.parseInt("two ");

}}

ماراح يظهرلك أي compiler error

:blink: لماذا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخوي عيسى موضوع جميل . كنت أحتاج لمواضيع مثل هذه في الexceptions . لأني ما أعطيتها حقها في الدراسة .

ولا أرى صعوبة في إمساك الإستثناء لكن الصعوبة في تخصص عمل أو رد فعل لأي نوع من الإستثناءات أو على الأقل تخصيص رسالة لكل نوع بخلاف الرسالة التي تكون مع الإستثناء نفسه .

إذا كانت عندك خبرة في كيفية حل المشكلة هذه بطريقة جميلة ممكن تتحفنا فيها :)

تم تعديل بواسطه b.m.s
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

في الجافا كل شئ عباره عن Object

هناك كلاس رئيسي للـException وهو Throwable

Throwable لديه two sub classes

Exception and Error

الشئ المهم هو : أنه اذا كان المستخدم يستطيع عمل حل أو recovery للمشكله فله أن يعمل catch لها

مالفرق بين Exception & Error ?

Error هو شئ لم يأتي نتيجه لخطأ المبرمج ، شئ مو طبيعي ، مثل VirtualMachineError يفيد بأن JVM تعدت الحدود المسموحه

، أو انك تحاول قرائة ملف ولكن هناك خطأ من نفس الهاردوير MultifactureConifgure

ماذا يمكنك العمل بمثل هذه الاشياء ؟؟ لاشئ ، لأنها platform dependent

هنا لايستطيع المبرمج التحكم بهذه الاشياء ، زيادة على ذلك أنها قليلة الحدوث ،

هذه الانواع البعض منها ينتج عن JVM نفسها ، مثل StackOverflowError ، عندما مثلاً تنادي recursive function مساحة الstack في الرام محدوده ، وقد ينتج عن recursive method ان تتعدى عدد عناصر الstack المساحه المحدده لها من قبل النظام ، تحب ان تتأكد جرب التالي :

class A{
public static void main(String... args){

go();

}
static void go(){
for(int i=0;i<100000;i++)
go();
}

}

بالنسبه لجهازي طلع لي StackOverflowError ، لاحظ Error وليس Exception

Exceptions

هناك نوعين checked exception

هي التي يستطيع المبرمج ان يعمل recovery للمشكله ، مثل FileNotFoundException , EOFException , SocketException

وهي التي تطلب منك الجافا أن تقوم دائماً بعمل Handling لها ، لأنه باستطاعتك عمل recovery للمشكله .

unchecked exception

وهي كل الExceptions التي ترث من RuntimeException

هذه الExceptions لايستطيع الوصول لها الcompiler واكتشافها ، لأنه يتحقق من syntax فقط

وهي غالباً لاتتطلب تدخل المستخدم لحل مشكلتها ،

مثال :

class A{
public static void main(String... args){

A a=null;
System.out.println(a.toString());

}}

الكومبايلر عليه ان يتأكد انك قمت باستخدام المثد الصحيحه ،

لكن عندما تقوم بتشغيله سيظهر لك NullPointerException

وكذلك مثل ClassCastException في polymorphisem فكما هو معروف أن الاوبجكت يتحدد وقت runtime

وقد يسند هذا الاوبجكت الى reference لايحقق العلاقه is-a فبالتالي يظهر هذا الruntime Exception

هناك بعض الRuntime Exceptions التي من الأفضل ان يقوم المستخدم بحلها ، مثل IllegalArgumentMethod , NumberFormatException

اقصد بحلها هو أن تقوم بعمل try catch لها أو throw ،

في الحالتين error & unchecked exception المبرمج غير مطالب بعمل try-catch لها (( بشكل ٍ عاام )) ولا ارسالها بجملة throw

ماهي throw وماهو Exception propagation ? :angry:

نكمل بعد شوي أو بكره :lol:

b.m.s تعمدت ان لا أرد عليك إلا بعد هذا الاسهاب ، هل عرفت ماهي حدود المبرمج ؟ بانك لاتستطيع التحكم في كل شئ

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

1- Exception Definition

2- Exception examples

3- Exception Handling

3- Exception types

4- Error vs exception

5- can i catch it

6- throw and propagate and finally

7- assertion error

8- unreachable statement

اعتقد ان هذا الفهرس كافي للموضوع مبدئياً ، مارأيكم ؟

تم تعديل بواسطه {عيسى}
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكور على الموضوع الجميل ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

فهرس جميل , وأظن إن المواضيع ما بعد ال 5 لم تُشرح بعد .

وسأتي غداً للنقاش . وشكراً :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حياك الله اخي b.m.s تجهز فأنا مقبل على Threading its a ghost

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

finally

ماذا لو كنت تتصل بقاعدة البيانات ، وتريد بعد اتصالك ( سواءاً حدث Exception ام لم يحدث ) ان تقطع الاتصال ؟

ماذا لو كنت متصل بأي resource مثل Socket سواءاً تكتب او تقرأ منه ، وتود اغلاقه فور الانتهاء منه او حدوث Exception ؟

ماذا لو كان لديك أكثر من catch وتود في حال انتهاء البرنامج ( بException أو بدون ) أن تقوم باغلاق الملفات ؟

هل ستضع اغلاق الملفات في كل catch ؟ Ooh !

هنا فائدة finally فهي تعمل clean للresources التي تم فتحها في جملة try

طبعاً يمكنك وضع فيها ماتشاء ، لكن نتحدث عن الغرض العلمي من وجودها ،

جملة finally دائماً تنفذ بغض النظر عن هل حصل exception or not

مثال

 class A {

public static void main(String[] args) {

BufferedReader br=null;
try {
BufferedWriter bw=new BufferedWriter(new FileWriter("aaa"));
bw.write("Oops ! ");
br=new BufferedReader(new FileReader("aaa"));
// throw new IOException();
} catch (FileNotFoundException ex) {
System.out.println("File cannot be found ");
}
catch(IOException eo){
System.out.println("I/O error ");
}
finally{
try {
br.close();
System.out.println("File Closed");
} catch (IOException ex) {
System.out.println("Cannot close the File ");
}

}


}
}

احذف // وستظهر سترنق File Closed ، وبهذا نضمن بأن الresources ستغلق دائماً

throw & propagate

بالجافا باستطاعتنا عدم عمل handling للـexception في المثد وارسالها إلى المثد التي استدعت المثد الحاليه ، عن طريق الامر throw

ملاحظه : باستطاعتك عمل throw أو handling حتى للErrors ولكن مالفائده بما انك لاتستطيع حلها ؟؟

في checked Exception انت بين حالتين إما أن تعمل handling للException في المثد الحاليه أو ترسلها للي قبلها في الStack

في حالة ارسالها لابد من ان تعرف الException ضمن method signature بالkeyword throws

class A {

public static void main(String[] args) {

go();
}
static void go(){
throw new IOException();
}
}

مادام أن IOException is checked Exception فلابد إما ان handling it or throw it

تذكر بأنه يعمل throw للمثد اللي قبله بالstack وهي في مثالنا main method

لكن ماذا تحتاج عندما ترسلها للـmain method بالطبع انت لم ترسلها إلا لأنك تريد أن تعمل handling لها في تلك المثد ،

 class A {

public static void main(String[] args) {
try {

go();
} catch (IOException ex) {
System.out.println("Catch it in main method ");
}
}
static void go() throws IOException{
throw new IOException();
}
}

Exception propagation هو ارسال الـException من مثد إلى أخرى في الStack

 class A {

public static void main(String[] args) {
try {

go();
} catch (IOException ex) {
System.out.println("Catch it in main method ");
}
}
static void go() throws IOException{
went();
}
static void went() throws IOException{
throw new IOException();
}
}

في المثال السابق عملت propagate للException من المثد went مروراً بgo إلى main وسويت handling لها في المثد main

ماذا لو حدث هذا ؟

 class A {

public static void main(String[] args) throws IOException {// where your exception gone ?
go();
}
static void go() throws IOException{
went();
}
static void went() throws IOException{
throw new IOException();
}
}

لاأدري حقيقة لكنها بالتأكيد ذهبت خارج حدودنا لمكان لانستطيع عمل handling فيه للException

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

assertion error :

هذه ميزه انضمت إلى الجافا في نسختها الخامسه ، فكرتها مثل فكرة assert(boolean expression) في السي & السي++

اذا كانت ناتجها true فستكمل الكود بلا مشاكل ، ولكن ان كان ناتج false سيتوقف البرنامج ويعمل throw new AsserionError()

class A {

public static void main(String[] args) {
int i=0;
assert i>1;
}
}

مادام أن الشرط خاطئ فسيتوقف البرنامج ويرسل AssertionError ،

هناك شكل ثاني لها ، وهي التي تتقبل معلومات داله على المشكله ،

 class A {

public static void main(String[] args) { ?
int i=0;
assert i>1:"Must be Big ";
}
}

لن يظهر Must be Big إلا اذا كان الشرط خاطئ وإلا لن يأتي إلى هذا الجزء ،

unreachable statement

كومبايلر الجافا ذكي ، ويعرف من خلال statements بأن هذه الstatements لن تنفذ أبداً ، وبذلك سيظهر لك خطأ compiler time

كيف ؟

 class A {

public static void main(String[] args) {
try {

throw new IOException();
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println("reachable ! ");

} }

الكود السابق لاتوجد به مشاكل ، سيطبع reachable

مارأيك بهذا الكود ؟

 class A {

public static void main(String[] args) throws IOException {
try {

throw new IOException();
} catch (IOException ex) {
throw ex;
}
System.out.println("reachable ! ");

} }

خطأ compiler time error - unreachable statement ،

الكومبايلر يعرف بأنك أبداً ابداً لن تصل إلى جملة reachable ، راح تعمل throw للمثد اللي قبلها في الstack ولا راح تكمل

مارأيك بالتالي :

 class A {

public static void main(String[] args) throws IOException {
try {

BufferedWriter bw=new BufferedWriter(new FileWriter("aa"));
} catch (IOException ex) {
throw ex;
}
System.out.println("reachable ! ");

} }

لامشكله لأنه ليس دائماً catch تنفذ ،

طيب الكود التالي :

 class A {

public static void main(String[] args) throws IOException {
try {

BufferedWriter bw=new BufferedWriter(new FileWriter("aa"));
} catch (IOException ex) {
throw ex;
}finally{
throw new IOException();
}
System.out.println("reachable ! ");

} }

مشكله والسبب بأن finally دائماً تنفذ ودائماً ترسل Exception للمثد اللي قبلها لذلك لن يصل التنفيذ إلى جملة reachable بالتأكيد .

انتهينا ، هذا كان مفهوم الExceptions بشكل عام ،

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لماذا هنا لن يصل إلى جملة unreachable

class A {

public static void main(String[] args) throws IOException {
try {

throw new IOException();
} catch (IOException ex) {
throw ex;
}
System.out.println("reachable ! ");

} }

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي مالك هلا والله

فكر بالفرق مابين الكود حقك ، وهذا :

class A {

public static void main(String[] args) throws IOException {
try {
BufferedWriter wb=new BufferedWriter(new FileWriter("aa"));

} catch (IOException ex) {
throw ex;
}
System.out.println("reachable ! ");

} }

الفرق بأن الكومبايلر هنا لايعلم هل سيحصل Exception أم لا ،

لذلك فهو لايستطيع التنبؤ بجملة reachable

بينما في الكود الاول ، دائماً سيذهب إلى الcatch ودائماً سيخرج الى خارج الmain method

اتمنى وضحت

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلاً اختي الدكتوره ساره ،

الله يسلمك على الدعوه ، الف شكر ،

انا ماعندي كتاب عشان اتتبعه لكن غالبية Exception تجي من المصادر الخارجيه التي تتصل بها external resource

فعلاً فيه Exceptions تصير بدون ماتتصل بمصادر خارجيه ، مثل ArithmeticException

 class A
{
public static void main(String...args)
{
int i=1;
try{
System.out.println(i/0);
}
catch(ArithmeticException ae){
System.out.println("Oops ! ");
}
}}

انا ركزت على Exceptions اللي غالباً يحتاجها المبرمج ، لأنه لو مافعل لها handling راح يطلعله compiler error

بالنسبه لـCustomException ببساطه سو كلاس جديد واجعله يرث من Exception

class CustomException extends Exception{
CustomException(String s){
super(s);
}

public static void main(String ... args){
try{
throw new CustomException("aha");
}catch(CustomException e){
e.printStackTrace();
}
}
}

جملة throw ، لغرض معين أنت لاتريد أن تعمل handle للException في المثد الحاليه ، فتعمل لها throw للمثد اللي قبلها ، والمثد اللي قبلها تعمل handle للـ Exception

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا على الشرح

سؤال.

هل ممكن نعتبر بعض عمليات المستخدم للبرنامج ممكن تسبب error تحتاج الى Exception handing

مثلاً انا عندي واجهة برنامج تحتوي على jTextArea و jButon ، عند الضغط على الزر انتقل الى البرنامج لكن يجب ان يحتوي ال jTextArea على نص- أي نص- هل ممكن عمل exception لهذه الحالة،

أنا استخدم التالي في ال action event الخاص بزر الدخول .

String a=jTextAera1.getText();
if(a.matches(""))
System.out.println("error, please enter the password");
else{
// enter the progarm;
}

ارجو يكون السؤال واضح.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الاستثنااءاااااااااااااات .. ياعيني عليك

الصراحه موضوع مهم .. ومن حلاوته قرأته بسرعه :)

لي عوده سريعه ان شالله ..

والله يعطيك العافيه اخوي عيسى ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الحرازي يمكنك انشاء CustomException

ولكن اسال نفسك : هل برنامجك سيتوقف في حالة ان كان الtext فارغ ؟

اذا كان نعم فأنشأ CustomException

class A {
public static void main(String... args){
JTextField jf=new JTextField("");
try{
matches(jf.getText());
}
catch(EmptyException ee){
System.err.println("empty text ");

}
}

}

public class EmptyException extends Exception {
EmptyException(){
super("Oops ");
}
public static void matches(String s) throws EmptyException{
if(s.equals(""))
throw new EmptyException();
}

}

تقدر تستعمل جملة assert ولكنها اكثر صرامه من Exception بانهاء البرنامج ان كان النص فارغ ،

تم تعديل بواسطه {عيسى}
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا أخي عيسى ، شرح جميل

سؤال اخر على نفس الكودين في ال class A لكي يعمل معي ال Exception كان يجب ان أنشأ Object من الكلاس EmptyException

فيكون كالتالي

class A {
public static void main(String... args){
EmptyException e = new EmptyException();
String a= "2";
try{
e.matches(a);
}
catch(EmptyException ee){
System.err.println("empty text ");

}
}

}

هل هذا صحيح ؟

معلش بدي أغلبك معي :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

معليش عيسى بأجاوب بدالك .

أخوي الحرازي الدوال اللي من نوع static تقدر تستدعيها عن طريق إما أسم الكائن (Object) أو إسم الصنف (Class) . يعني الدالة matches تقدر تستدعيها عن طريق إسم الصنف دون الحاجة لتكوين Object منه مثل :

EmptyException.matches("");

أو عن طريق إسم الObject مثل :

EmptyException e = new EmptyException();
e.matches(a);

أتمنى إني أفدتك :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا أخي b.m.s :lol:

مع اني اعرف المعلومة لكن لم استطع استخدامها عند حاجتي لها ، شكرا مرة اخرى :)

ما قصرت انت والاخ عيسى

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كذلك في JDK 5 هناك static import بمعنى انك لست بحاجه لذكر إسم الكلاس لإستدعاء الstatic method فيه ،

مثل في الكود السابق تستطيع استدعاء matches هكذا :

import static javaapplication22.EmptyException.matches;

javaapplication22 اسم الباكج ، وفي الكود تكتب بدون اسم الكلاس ،

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ما شاء الله

معلومة جديدة أخي عيسى :) ربنا يوفقكم ويزيدكم من علمه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كلامك صحيح ، قلنا بأن assert تستعملها عندما لاتريد Exception يظهر ، تريد توقف البرنامج ككل

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .