public void test1()throws DrunkException{ throw new DrunkException("喝酒别开车!"); }
就是为了保存异常信息,在抛出另外一个异常的同时不丢失原来的
没有解决的异常只能给上一级来解决,命名是用来区分异常的
抛出就是,程序发生异常你要抛出到控制台,提醒程序员,将代码进行修改优化
应该是关键字throws,将异常抛给上一级
已经使用try{}catch{}块儿了就不用再使用throws抛出异常了
public void test1() throws DrunkException {
new DrunkException("喝车别开酒!");
}
少了 throw
这里的抛出异常是在if语句里面,如果执行了if语句抛出了异常,那else肯定不会执行了,
super指向父类,super() 的意思是创建父类的构造方法,super(message)就是把message作为参数,创建带参构造方法。
ChainTest类的main方法catch块里e.getStackTrace();改成e.printStackTrace();
因为方法没有声明为static,把“public void test1()”改成“public static void test1()”,这样在main函数中就可以直接调用。原因是因为main函数被声明为static(public static void main() ),被声明为静态的main函数不能直接调用非静态的方法,需要通过创建对象来调用。你把方法也声明为静态,此方法就可以直接被main函数调用。
如果不刻意处理具体的异常的话,直接捕获Exception即可。RuntimetimeException是运行时异常,可以不用显式的去捕获
需要提前创建一个DrunkException类也就是(老师1-5 里创建的那个自定义异常)
你test1方法在主函数入口里面,肯定错误的啊,写法不对。解决方法,将test1()方法写到主函数外部。
DrunkException类中,DrunkException应该继承的是Exception而不是TryCarchTest
他问的这一句是什么 意思呢 这里的initCause 是什么鬼 突然冒出来的
因为你自定义的异常DrunkException异常中,没有调用父类的方法来显示信息,也就是少了super(message),这句代码在你的DrunkException类的构造方法中
你的Test3方法好像没有声明DogException异常抛出。
而你在catch里面又抛出了一个自定义异常
异常A被捕获后抛出了一个新的异常B,如果你不用initCause()来保存异常A的原始数据,你就不知道异常B发生的具体原因,使用initcause()以后,你可以在捕获异常B后使用getCause(),来获取导致B异常的原因。
RuntimeException是属于Exception的,系统会自动捕获
我昨天刚敲到这里也是,,
因为老师以前在同一个包下创建了DrunkException这个类,而你没有,所以报错,,,
解决方法就是 在你包里创建这个类就行了,,
没有这样的写法吧
把 e 这个异常结果放进 RuntimeException 运行时异常里面,从而异常抛出 知道是哪里错误,并且是由于什么异常引起这个错误,initCause() 可以追溯到源头,可以链式查看,从而更快定位到错误。
我只针对你的第三个问题补充一点,对于异常的处理,并不等于使用System.out.println输出,它只是系统捕获最终异常显示出异常信息而已,它不是输出。
在异常的第一节介绍里面有:异常分为非检查异常(RuntimeException)和检查异常。非检查异常是JVM自动抛出,自动捕获的。个人理解就是不需要throws声明的,由jvm自动接管,所以在main方法中不需要捕获也是可以的(已验证);当然也不用专门抛出,贴一个运行OK的版本。
这是你自定义的异常啊,还是链式异常。根源就是Caused by:后面的引起了异常。
学完这个之后自我评定一下,然后找本书再看一遍,然后你可以学习关于数据库的了
对,对于异常要么捕获(trycatch),要么throws;
是一个汉化包,安装到eclipse上就行,不推荐用中文版,码代码还是多看看英文吧,都是些常用词汇
super(message)的作用是调用父类Exception(String message)有参构造方法,这个方法可以打印message。而你写的message是你自己的,要想看到message,就得写个打印语句