2010-10-28 4 views
0
import java.io.*; 

class MyException1 
{ 
static String str=""; 

public static void main(String args[]) 
{ 
BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
System.out.println("Enter your food"); 


try{ 
str=br.readLine(); 
}catch(IOException e){ 
System.out.println("Exception has been occurred"+e); 
} 


try{ 
checkFood(); 
}catch(BadException be){ 
System.out.println("Exception"+be); 
} 
} 


private static void checkFood() throws BadException 
{ 

if(str.equals("Rotten")|| str.equals("")){ 
System.out.println("Bad food"); 
//throw new BadException(); 
throw new BadException("Not Eatable"); 
}else{ 
System.out.println("Good food !! enjoy"); 

} 
} 
} 



class BadException extends Exception 
{ 
String food; 

BadException() 
{ 
super(); 
food="invalid"; 
System.out.println(food); 
} 

BadException(String s) 
{ 
super(s); 
food=s; 
} 

public String getError() 
{ 
return food; 
} 

} 

В программе, как это public String getError() возвращает переменную food? Я нигде не звонил?Как работает ключевое слово «супер», когда вызывается из конструктора?

Если я удаляю линию super(s);, тогда «Not Eatable» не печатается. Но если я оставлю эту строку, тогда она будет распечатана. Как работает этот программный поток?

+1

«Сомнение» означает, что вы считаете, что что-то не соответствует действительности, а не то, что вы * путают * о чем-то. Расскажи своим друзьям. – user359996

+0

@ user359996: Мне просто нравится эта часть, «Скажи своим друзьям». ;) –

ответ

2

Если я удаляю линию super (s) ;, то «Not Eatable» не печатается. Но если я оставлю эту строку, тогда она будет распечатана. Как работает этот программный поток?

super(s) будет вызывать конструктор супер класса, который принимает строку. Так же, как если бы вы звонили new Exception("Not Eatable"). Этот конструктор для Exception добавляет сообщение об исключении, поэтому при его распечатке он будет содержать этот текст.

Это не имеет никакого отношения к переменной food. Вы можете удалить строку food=s;, и сообщение будет распечатано правильно.

Смотрите этот учебник по ключевому слову super:

http://download.oracle.com/javase/tutorial/java/IandI/super.html

Если вы до сих пор путают о том, как super работает, то думать об этом. Вы можете перекодировать BadException с этим кодом, и ваша программа будет делать то же самое:

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

Это также будет делать то же самое:

class Test extends Throwable 
{ 
String message; 
Test(String msg) 
{ 
    message = msg; 
} 
public String toString() { 
    return "BadException: " + message; 
} 
} 

class BadException extends Test 
{ 
BadException(String s) 
{ 
    super(s); 
} 
} 
+0

вызывается ли здесь вызов getError()? что новое myBadException, которое печатает не съедобное, или getError() печатает это не съедобное ??? только это заявление о выражении rit? – Sumithra

+0

@Sumithra: эта строка печатает его - «System.out.println («Exception» + be); «Что означает« rit »? Если вы имеете в виду« правильно », то это правильное написание ... –

+0

спасибо за разъяснение моих сомнений !!! – Sumithra

1

Когда throw new BadException("not eatable"); вы инстанцировании новый BadException, которое устанавливает его переменную-элемент питания в строку «не съедобная». Тогда вызов getError() вернет эту строку.

Было бы лучше, стиль, чтобы избавиться от переменной члена пищи и просто сделать вызов супер (String), так как есть конструктор Exception (String сообщение)

+0

Я отредактировал его сейчас. – Sumithra

0

«супер (s);» вызывает конструктор суперкласса, который принимает одну строку. Это класс исключений.

Если вы выберете «супер (ы);», то компилятор будет неявно поставить «super();» вызовите там, потому что суперкласс имеет конструктор по умолчанию. (Вот почему он называется конструктором по умолчанию, потому что он будет вызван по умолчанию, если вы не укажете ничего!)

Так как это то же самое, что и вызов «super (null);»), сообщение в переменной «s») не передается до суперкласса, и поэтому его не нужно распечатывать.

Смежные вопросы