不好意思,贴的时候给写错了,主函数是public的,原来的形式如下: public class staticRunexception { private static void f() throws RuntimeException{ System.out.println("Exception from f()"); throw new RuntimeException("from f()"); }
public static void main(String[] arg){ staticRunexception.h(); } } 编译可以运行,由“throw new RuntimeException("from f()"); ”可知,肯定由异常抛出,可是我不知道这种设计错在哪里,请大家再看看!
private static void f() throws RuntimeException{ System.out.println("Exception from f()"); throw new RuntimeException("from f()");//去掉这一句,运行时异常不能自己抛出吧?!! }然后把main函数改成public的就可以运行了
我想这个程序也就是想考一下被检查的异常和运行时异常之间的差别,RuntimeException可以在不被report的情形被抛出,所以程序里面的throws RuntimeException都可以不要,一般这种异常是可以避免的,如访问数组:(for int i = 0; i < arr.length; i++),这样就绝对不会出现ArrayIndexOutOfBoundsException, 再有,像调用一个函数,你送进去的对象如果是null,那么NullPointerException被抛出如果你确定你送进去的对象是已经被初始化的,那就不会有这样的情况关于被检查的异常,如你用FileReader对文件进行操作,如果文件不存在,那你所有的操作都没意义了,所以你在构造一个FileReader的对象时,你得用throws FileNotFoundException这一句明确的告诉被调用的人,这个异常可能会被抛出,呵呵,说了一大堆,楼主最好找点这方面的资料看看比较好,上面的仅供参考
staticRunexception.h();
}
运行一下就知道了
注意是Runexception!!!!!!!!!!!!!!!!!!!!!!!!
public class staticRunexception {
private static void f() throws RuntimeException{
System.out.println("Exception from f()");
throw new RuntimeException("from f()");
}
private static void g(){
f();
}
public static void h()throws RuntimeException{
try{g();}
catch(Exception ex){
System.err.println("IN g() e.prinStackTrace()");
ex.printStackTrace();
}
}
public static void main(String[] arg){
staticRunexception.h();
}
}
编译可以运行,由“throw new RuntimeException("from f()"); ”可知,肯定由异常抛出,可是我不知道这种设计错在哪里,请大家再看看!
System.out.println("Exception from f()");
throw new RuntimeException("from f()");//去掉这一句,运行时异常不能自己抛出吧?!!
}然后把main函数改成public的就可以运行了