java中的异常问题

eskimoer 2013-12-09 11:43:35
public class Excepts {
public static void func1() throws Throwable
{
throw new Exception("from func1");
}
public static void main(String[] Str) throws Throwable
{
try
{
func1();
}
catch(Exception e)
//catch (Throwable e)
{
System.out.println("This is the main catch");
}
}

}

现在的问题是当我把main函数的异常声明throws Throwable去掉后,就会出现错误,但是加上throws Throwable就没问题了,不知道这是为什么?
函数体中抛出的异常跟函数中声明的异常之间有什么关系,要满足什么样的原则?
...全文
538 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtdstyle 2013-12-14
  • 打赏
  • 举报
回复
对于异常的处理:如果一个方法抛出了异常,那么调用这个方法的调用者必须处理这个异常或者抛给上一级调用者。这个貌似是在编写代码的时候就会进行检查的。main调用了函数,就需要处理函数抛出的异常咯。
eskimoer 2013-12-14
  • 打赏
  • 举报
回复
引用 20 楼 u010280007 的回复:
[quote=引用 18 楼 zhuhuangtianzi 的回复:] [quote=引用 11 楼 zhou9898 的回复:] 妈的,都回答的些什么呀。 感觉楼主很2,楼上你妈的也很无语。
没素质,少在这装B,滚远点[/quote] 脑残的楼主 你妈知道你这么弱智么?[/quote] 你爹不知道,但是你叔叔知道
william_yao 2013-12-12
  • 打赏
  • 举报
回复
你抛出时,包装成了Throwable!!!然后你用一个Exception去捉?怎么捕捉的到?只能大捉小!不能小捉大。懂? 你那个方法抛出的是一个new Exception,但是你抛出时,已经变成了一个throwable!所以捕捉时,只能捕捉throwable了。
imjcoder 2013-12-12
  • 打赏
  • 举报
回复
引用 18 楼 zhuhuangtianzi 的回复:
[quote=引用 11 楼 zhou9898 的回复:] 妈的,都回答的些什么呀。 感觉楼主很2,楼上你妈的也很无语。
没素质,少在这装B,滚远点[/quote] 脑残的楼主 你妈知道你这么弱智么?
eskimoer 2013-12-12
  • 打赏
  • 举报
回复
引用 16 楼 Test_LD 的回复:
[quote=引用 8 楼 zhuhuangtianzi 的回复:] [quote=引用 7 楼 Test_LD 的回复:]
public class Excepts {
    public static void func1() throws Throwable {
        throw new Throwable ("from func1");
    }
 
    public static void main(String[] Str) throws Throwable {
        try {
            func1();
        } 
        catch (Exception e)
       // catch (Throwable e)
        {
            e.printStackTrace();
            System.out.println("This is the main catch");
        }
    }
 
}
这样就必须平抛了
try中抛出的是Throwable异常,但是catch(Exception e)捕捉到了异常,这是何解[/quote] 我只是想说明Throwable,Exception 的关系范围,这里catch(Exception e)并未捕获到,System.out.println("This is the main catch");这都没执行[/quote] 你修改了我的程序,你说的这些关系范围我知道,不过还是谢谢你的详细解释
eskimoer 2013-12-12
  • 打赏
  • 举报
回复
引用 11 楼 zhou9898 的回复:
妈的,都回答的些什么呀。 感觉楼主很2,楼上你妈的也很无语。
没素质,少在这装B,滚远点
Test_LD 2013-12-11
  • 打赏
  • 举报
回复
引用 8 楼 zhuhuangtianzi 的回复:
[quote=引用 7 楼 Test_LD 的回复:]
public class Excepts {
    public static void func1() throws Throwable {
        throw new Throwable ("from func1");
    }
 
    public static void main(String[] Str) throws Throwable {
        try {
            func1();
        } 
        catch (Exception e)
       // catch (Throwable e)
        {
            e.printStackTrace();
            System.out.println("This is the main catch");
        }
    }
 
}
这样就必须平抛了
try中抛出的是Throwable异常,但是catch(Exception e)捕捉到了异常,这是何解[/quote] 我只是想说明Throwable,Exception 的关系范围,这里catch(Exception e)并未捕获到,System.out.println("This is the main catch");这都没执行
jdgdf566 2013-12-11
  • 打赏
  • 举报
回复
类型如果是向下转换的,接收的时候要转换过来:(Exception)Throwable 再例如: Object o ="aaaaaaaaa"; ((String)o).subString(...);
jdgdf566 2013-12-11
  • 打赏
  • 举报
回复
类型如果是向下转换的,接收的时候要转换过来:(Exception)Throwable 再例如: Object o ="aaaaaaaaa"; ((String)Object).subString(...);
jdgdf566 2013-12-11
  • 打赏
  • 举报
回复
1.编译期检查与运行是不一样的,编译期检查是有限检查。 2.编译器有责任,你写的也不当。方法里面不会抛出东西,你在方法头上抛出干什么。如果你按照正确的使用了,编译除了问题,那编译器就说不过去了。编译期检查可以是有限的。 3.func1()方法的写法是不典范的。一般来说,类型应该是向上转换的,就像数值类型的自动隐式转换。也就是说应该父类变成子类,倒过来回丢失成员的,发生不可预料的问题。
poooll 2013-12-11
  • 打赏
  • 举报
回复
引用 4 楼 zhuhuangtianzi 的回复:
[quote=引用 1 楼 u012852259 的回复:] 捕捉catch里的class是方法声明的父类或本身。 func1()声明抛出Throwable,所以catch也要是Throwable(没有父类了)。
可我上面的程序没有错误,扑捉到了异常,程序运行结果是: This is the main catch[/quote] 方法声明了异常A,那么调用者必须捕捉A(RuntimeException除外),仅仅捕捉子异常是不能通过编译的。
程序员一灯 2013-12-10
  • 打赏
  • 举报
回复
好吧,其实是捕捉范围小了。
程序员一灯 2013-12-10
  • 打赏
  • 举报
回复
妈的,都回答的些什么呀。
感觉楼主很2,楼上你妈的也很无语。


eskimoer 2013-12-10
  • 打赏
  • 举报
回复
引用 5 楼 huxiweng 的回复:
晕,你打印当然还是打印你那句话了啊。你catch到异常后用e.printStack()就可以看到效果了

public class Excepts {
	public static void func1() throws Throwable {
		throw new Exception("from func1");
	}

	public static void main(String[] Str) throws Throwable {
		try {
			func1();
		} 
//		catch (Exception e)
		catch (Throwable e)
		{
			e.printStackTrace();
			System.out.println("This is the main catch");
		}
	}

}
打印: java.lang.Exception: from func1 at com.withiter.test2.Excepts.func1(Excepts.java:5) at com.withiter.test2.Excepts.main(Excepts.java:10) This is the main catch
我想你没搞清我问的问题,我的代码运行没有错误,我的疑问就是为何没错误,按道理我放出的是Throwable异常,但是Catch的是Exception异常,按理说这个Exception是Throwable的子类,它不能被捕捉,但是这里却捕捉了
eskimoer 2013-12-10
  • 打赏
  • 举报
回复
引用 6 楼 jdgdf566 的回复:
编译器没那么智能?可能是编译器只是语法检查,与运行还是不一样的。
按你说的,应该是main函数把异常抛出去了,但是我现在却在main函数内捕捉到了异常,这说明main函数并没有抛出Throwable异常,既然没有抛出Throwable异常,那为何我把main函数中throws Throwable声明去掉就发生错误
eskimoer 2013-12-10
  • 打赏
  • 举报
回复
引用 7 楼 Test_LD 的回复:
public class Excepts {
    public static void func1() throws Throwable {
        throw new Throwable ("from func1");
    }
 
    public static void main(String[] Str) throws Throwable {
        try {
            func1();
        } 
        catch (Exception e)
       // catch (Throwable e)
        {
            e.printStackTrace();
            System.out.println("This is the main catch");
        }
    }
 
}
这样就必须平抛了
try中抛出的是Throwable异常,但是catch(Exception e)捕捉到了异常,这是何解
jdgdf566 2013-12-10
  • 打赏
  • 举报
回复
编译器没那么智能?可能是编译器只是语法检查,与运行还是不一样的。
teemai 2013-12-10
  • 打赏
  • 举报
回复
晕,你打印当然还是打印你那句话了啊。你catch到异常后用e.printStack()就可以看到效果了

public class Excepts {
	public static void func1() throws Throwable {
		throw new Exception("from func1");
	}

	public static void main(String[] Str) throws Throwable {
		try {
			func1();
		} 
//		catch (Exception e)
		catch (Throwable e)
		{
			e.printStackTrace();
			System.out.println("This is the main catch");
		}
	}

}
打印: java.lang.Exception: from func1 at com.withiter.test2.Excepts.func1(Excepts.java:5) at com.withiter.test2.Excepts.main(Excepts.java:10) This is the main catch
eskimoer 2013-12-10
  • 打赏
  • 举报
回复
引用 1 楼 u012852259 的回复:
捕捉catch里的class是方法声明的父类或本身。 func1()声明抛出Throwable,所以catch也要是Throwable(没有父类了)。
可我上面的程序没有错误,扑捉到了异常,程序运行结果是: This is the main catch
eskimoer 2013-12-10
  • 打赏
  • 举报
回复
引用 2 楼 jdgdf566 的回复:
Exception继承自Throwable,Exception是Throwable,但Throwable不是Exception。所以无法catch到,只能抛出。所以main方法也要抛出。
但是我上面的程序捕捉到了异常,程序运行的结果是: This is the main catch
加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧