求解JAVA中自定义异常的问题
package WH;
import java.io.*;
import java.util.*;
public class HelloWorld {
public static void main(String[] args) throws Exception {
while(true){
try{
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String readLine = stdIn.readLine(); //读取一个文本行
StringTokenizer st=new StringTokenizer(readLine,":"); //以“:”为分隔符分隔文本行readLine
int hour = 0;
int min = 0;
int sec = 0;
if(st.countTokens() == 3) {
hour=Integer.parseInt(st.nextToken()); //返回分隔符处的下一个标记
min=Integer.parseInt(st.nextToken());
sec=Integer.parseInt(st.nextToken());
if(sec>=60 || min>=60 || hour>=24 || sec<0 || min<0 || hour<0)
System.out.println("Invalid input");
else
System.out.println("Total seconds is "+(hour*3600+60*min+sec));
}
else
System.out.println("Invalid input");
}
catch( OutOfRangeException OORE)
{
OORE.printStackTrace();
}
catch(NumberFormatException ex){
System.out.println("java.lang.NumberFormatException: " + ex.getMessage());
}
catch(Exception ex){
ex.printStackTrace();
}
} }
}
package WH;
public class OutOfRangeException extends Exception throws OutofRangeException{
public OutOfRangeException() {}
public OutOfRangeException(String message) {
super(message);
}
}
Eclipse总是提示我exception is never thrown from the try statement body.
就改错
另外想问下两个类是写在一起。还是放在两个java文件中
[解决办法]
catch( OutOfRangeException OORE)
这里的catch是catch不到的,因为你没有地方抛出这个自定义的异常
一般自定义的异常是在某个自己的方法中抛出,然后另一个方法调用该方法时捕捉该自定义异常
否则,你这个自定义异常没有地方抛出,也就不需要捕获了
至于两个类,分开写还是合在一起写,就看你想怎么用了
一般最好分开,除非只有你的一个类(比如HelloWorld)使用同一个文件的另一个类(比如OutOfRangeException),其它文件的类没有使用OutOfRangeException,那么写在一起就没关系,否则其它也需要用到的话,还是要分开写,因为同一个文件只能有一个public类,如果另一个是非public的,那么其它包的类无法使用它
[解决办法]
catch(Exception e){
throw new OutOfRangeException ("xxx操作异常!");
}
[解决办法]
java异常处理是个大学问
一起共勉吧
http://qingwengang.iteye.com/blog/537637