回 帖 发 新 帖 刷新版面

主题:一个自定义异常处理的小疑问,请指教


题目:自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“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个回复)

沙发

Java中判断字符串相等的方法是equals,所以在if(str=="XYZ")应该写成if(str.equals("XYZ"))才对。==是用来判断内存地址是否相等的,不用来判断内容。

板凳


相关的字符串比较都改成if(str.equals("XYZ"))类似的格式,还是不能输出预期的结果。请指教,谢谢~

3 楼

你运行程序时 是用的什么命令? java ThrowsDemo ?  有没加上参数?e.g  java ThrowsDemo  XYZ

4 楼

在命令提示符下使用
javac ThrowsDemo.java  
然后
java ThrowsDemo XYZ
这样没有错吧~~

5 楼

ArrayIndexOutOfBoundsException 可能是因为你在DOS命令下没有给string[] arg 数据.而使得arg[0]==null,你试一试用BufferedReader从键盘得到一个数据.
而且你的异常中没有重写toString()方法,用System.out.println(i);
打印的是throwable 中的toString()方法,根本不能显示你要的信息.

6 楼

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 楼

既然没有this is a XYZ,说明那个异常对象没有生成.
这个方法
    public static void thisthrow(String th) throws UserDefinedException
    {
        if(th=="XYZ")
            throw new UserDefinedException(th);
    }
那个判断是画蛇添足,删去就可以了.或者换成equals()

8 楼


不行的,改了之后,就有错误了:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at ThrowsDemo.main(ThrowsDemo.java:16)

9 楼

謝謝你的囬答。你的囬答是正確的
開始我的eclipse參數設置錯了,所以提示那樣的錯誤。
用cmd沒有問題。

我来回复

您尚未登录,请登录后再回复。点此登录或注册