日期:2014-05-20  浏览次数:20972 次

【菜鸟求解】判断给定字符串的内容是否全部都是英文字母,若其中包含其它字符,则抛出一个异常
public class MyException extends Exception {			//继承Exception类
        private String content;
        public MyException(String content){ //构造方法
            this.content=content;
        }
        public String getContent() { //获取描述信息
        return this.content;
        }
}

public class Example {
          public static void check(String str) throws MyException{ //指明要抛出的异常
         char[] Array = str.toCharArray();//将字符串转换为字符数组
//检查字符数组中的每个元素
//如果当前元素是英文字母以外的字符,则抛出MyException异常类对象
          for(int i = 0;i < Array.length;i++){        //检查字符数组中的每个元素
        if((Array[i] <= 64 && Array[i] >= 0) || (Array[i] >= 91 && Array[i] <= 96) || ( Array[i] >= 123))
           throw new MyException("字符串" + str +"中含有非法字符!");//如果当前元素是英文字母以外的字符,则抛出MyException异常类对象
}
}
        public static void main(String[] args) {
        String str1="HellWorld";
        String str2="Hell!MR!";
        try{
        check(str1); //调用check()方法
        check(str2); //执行该行代码时,抛出异常
         }catch(MyException e){                              //捕获MyException异常
        e.printStackTrace(); //输出异常描述信息
         }
       }
}


按照正常编译 应该是输出    字符串 Hell!MR!中含有非法字符!
但是当中出现错误 
MyException
at Example.check(Example.java:18)
at Example.main(Example.java:26)
请问是什么原因
------解决方案--------------------
你在异常的构造函数中没有调用父类的构造函数
加上super(content)
------解决方案--------------------
你直接throw new RuntimeException("字符串" + str +"中含有非法字符!");就行了,没必要声明抛出以及定义异常类。
你这个报错应该是你的异常类没有调用父类的构造方法:

 public MyException(){
     super();
 }
 public MyException(String msg){
     super(msg);
 }

------解决方案--------------------
是的
System.out.println(e);