主题:一个自定义异常处理的小疑问,请指教
freshlover
[专家分:30] 发布于 2008-04-29 13:30:00
题目:自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”,则抛出一个异常信息“This is a XYZ”,如果从命令行输入ABC,则没有抛出异常。(只有XYZ和ABC两种输入)。
代码:
[code]
class UserDefinedException extends Exception
{
public UserDefinedException(String str)
{
System.out.println("This is a "+str);
}
}
public class ThrowsDemo {
public static void thisthrow(String th) throws UserDefinedException
{
if(th=="XYZ")
throw new UserDefinedException(th);
}
public static void main(String args[]) //throws ArrayIndexOutOfBoundsException
{
String str="";
try
{
//str=String.valueOf(args[0]);
str=args[0];
}
catch(ArrayIndexOutOfBoundsException e){
try
{
if(str=="XYZ")
thisthrow(str);
else if (str=="ABC")
System.exit(0);
}
catch(UserDefinedException i)
{
System.out.println(i);
}
}
}
}
[/code]
不知为何ArrayIndexOutOfBoundsException异常总是出现,所以加了catch处理语句,将判断输入字符串、抛出自定义异常的语句放在了内部。令我不解的是,编译、运行无错,但是结果不显示This is a XYZ,这个结果。是我的代码有为题吗?请指教!
回复列表 (共9个回复)
沙发
Finder [专家分:1460] 发布于 2008-04-30 12:27:00
Java中判断字符串相等的方法是equals,所以在if(str=="XYZ")应该写成if(str.equals("XYZ"))才对。==是用来判断内存地址是否相等的,不用来判断内容。
板凳
freshlover [专家分:30] 发布于 2008-04-30 13:05:00
相关的字符串比较都改成if(str.equals("XYZ"))类似的格式,还是不能输出预期的结果。请指教,谢谢~
3 楼
nanfengren [专家分:210] 发布于 2008-04-30 18:04:00
你运行程序时 是用的什么命令? java ThrowsDemo ? 有没加上参数?e.g java ThrowsDemo XYZ
4 楼
freshlover [专家分:30] 发布于 2008-04-30 20:49:00
在命令提示符下使用
javac ThrowsDemo.java
然后
java ThrowsDemo XYZ
这样没有错吧~~
5 楼
laozhai [专家分:20] 发布于 2008-04-30 20:56:00
ArrayIndexOutOfBoundsException 可能是因为你在DOS命令下没有给string[] arg 数据.而使得arg[0]==null,你试一试用BufferedReader从键盘得到一个数据.
而且你的异常中没有重写toString()方法,用System.out.println(i);
打印的是throwable 中的toString()方法,根本不能显示你要的信息.
6 楼
luckyted [专家分:130] 发布于 2008-05-02 15:54:00
class UserDefinedException extends Exception
{
public UserDefinedException(String str)
{
System.out.println("This is a "+str);
}
}
public class ThrowsDemo {
public static void thisthrow(String th) throws UserDefinedException
{
throw new UserDefinedException(th);
}
public static void main(String args[]) //throws ArrayIndexOutOfBoundsException
{
String str="";
str=args[0];
try
{
if(str.equals("XYZ"))
thisthrow(str);
else if (str.equals("ABC"))
System.exit(0);
}
catch(Exception i)
{
System.out.println(i);
}
}
}
7 楼
luckyted [专家分:130] 发布于 2008-05-02 15:59:00
既然没有this is a XYZ,说明那个异常对象没有生成.
这个方法
public static void thisthrow(String th) throws UserDefinedException
{
if(th=="XYZ")
throw new UserDefinedException(th);
}
那个判断是画蛇添足,删去就可以了.或者换成equals()
8 楼
freshlover [专家分:30] 发布于 2008-05-03 11:49:00
不行的,改了之后,就有错误了:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at ThrowsDemo.main(ThrowsDemo.java:16)
9 楼
freshlover [专家分:30] 发布于 2008-05-05 21:45:00
謝謝你的囬答。你的囬答是正確的
開始我的eclipse參數設置錯了,所以提示那樣的錯誤。
用cmd沒有問題。
我来回复