千锋逆战班学习第27天
千锋逆战班学习第27天
努力或许没有收获,但不努力一定没收获,加油。
今天我学了Java课程的异常。
中国加油!!!武汉加油!!!千锋加油!!!我自己加油!!!
总结-异常
七、自定义异常
- 需继承自Exception或Exception的子类,常用RuntimeException。
- 必要提供的构造方法:
- 无参数构造方法
- String message参数的构造方法
八、方法覆盖
- 带有异常声明的方法覆盖:
- 方法名、参数列表、返回值类型必须和父类相同。
- 父类中声明了异常,子类重写后可声明也可不声明。
- 父类中声明了异常,子类重写可声明的异常与其相等或是其子类。
- 父类中方法没有声明异常,则子类也不可以声明异常。
- 父类中声明了异常,子类可声明比父类更多异常,必须小于其父类声明的异常。
九、扩充:方法执行中字节码操作指令
I. 反编译:javap -verbose 文件名称(是.class) > 自定义文件名称.bytecode
Question_11_5and6
5.(自定义异常)创建两个自定义异常类 MyException1 和 MyException2。要求:
I. MyException1 为已检查异常,MyException2 为运行时异常。
AI.这两个异常均具有两个构造函数,一个无参,另一个带字符串参数,参数表示产生异常的信息。
6.(自定义异常)在上一题的基础上,把下面代码补充完整。
public class TestMyException{
public static void main(String args[]){
int n;
//读入 n
try{
m(n);
}catch(MyException1 ex1){
//输出 ex1 详细的方法调用栈信息
}catch(MyException2 ex2){
//输出 ex2 的详细信息
//并把 ex2 重新抛出
}
}
public static void m(int n)_________ { //声明抛出 MyException1
if (n == 1) {
//抛出 MyException1
//并设定其详细信息为“n == 1”
}else {
//抛出 MyException2
//并设定其详细信息为“n == 2”
}
}
}
补充后
public class TestMyException {
public static void main(String args[]){
int n = 2;
//读入n
try {
m(n);
}catch(MyException1 ex1){
//输出 ex1 详细的方法调用栈信息
ex1.printStackTrace();
}catch(MyException2 ex2){
//输出 ex2 的详细信息
System.out.println(ex2.getMessage());
//并把 ex2 重新抛出
throw ex2;
}
}
public static void m(int n) throws MyException1{ //声明抛出 MyException1
if (n == 1) {
//抛出 MyException1
//并设定其详细信息为“n == 1”
throw new MyException1("n == 1");
}else {
//抛出 MyException2
//并设定其详细信息为“n == 2”
throw new MyException2("n == 2");
}
}
}
class MyException1 extends Exception{
public MyException1() {}
public MyException1(String message) {
super(message);
}
}
class MyException2 extends RuntimeException{
public MyException2() {}
public MyException2(String message) {
super(message);
}
}
Question_11_8
//1 AB
//2 D
Question_11_10
有以下代码
public class TestFinally {
public static void main(String args[]){
System.out.println ( ma() );
}
public static int ma(){
int b;
//读入 b
try{
int n = 100;
return n/b;
}catch(Exception e){
return 10;
}finally{
return 100;
}
}
}
在 ma 中,当读入的 b 为 100 时,输出结果为———,当读入的 b 为 0 时,输出结果为______。
100;100
Question_11_12
import java.io.*;
class MySuper{
public void m() throws IOException{}
}
class MySub extends MySuper{
public void m() throws EOFException{}
}
class MySub2 extends MySub {
public void m() throws FileNotFoundException{}
}
以上代码是否能编译通过?如果不能,应该如何修改?
不能,删除MySub2的m()的“ throws FileNotFoundException”,或者MySub的m()的“throws EOFException”变为“throws EOFException,FileNotFoundException”
如有错误,请多包涵。