PDF 课件和源代码下载地址:
https://gitee.com/geektime-geekbang/LetsJava
作者回复: 赞! Class里的getField/getDeclaredField方法的意思:代表某个类的属性,可以用来获取/设置该属性的属性值。具体在获取/设置的时候,看是否是静态的属性,如果不是静态属性,还需要传这个类的对象。
作者回复: 实现接口的时候,可以不throws任何异常。但是如果要throws异常,必须得是在接口方法的throws里定义的异常。 当然,无论你throw不throw,如果是用接口的引用来调用实际实现类的方法,那么调用的地方还是要try-catch接口方法声明的异常,因为编译器谁知道后面是哪个实现。 但是如果你确实就是用的实现类的引用,而实现类确实没有throws异常,那么就不需要处理异常。 举个例子: public interface A { void m()throws IOException, IllegalArgumentException; } public class B implements A { @Override public void m() { } } 那么C中: public class C { public static void main(String[] args) { B b = new B(); b.m();<--不用处理,因为B的m方法就是没有throws语句 A a = null; try { a.m();<--必须处理 } catch (IOException e) { e.printStackTrace(); } } }
作者回复: 继承自RuntimeException的就是uncheck异常,其它的是需要check的异常
作者回复: 接口/类 A 的方法中抛出的异常 1)如果是RuntimeException的子类,那么 A 的子类的覆盖方法中,随便抛出任何RuntimeException的子类,或者不抛出,都可以。 2)如果不是RuntimeExcepton的子类,那么抛出的异常必须是A方法中声明的异常的子类或其本身。
作者回复: ✅
作者回复: 你的满意,我的追求。
作者回复: java.lang.Error里的java doc: * A method is not required to declare in its {@code throws} * clause any subclasses of {@code Error} that might be thrown * during the execution of the method but not caught, since these * errors are abnormal conditions that should never occur. * * That is, {@code Error} and its subclasses are regarded as unchecked * exceptions for the purposes of compile-time checking of exceptions. Error和它的子类也被当作是unchecked exception的。
作者回复: 这个指的是方法签名的抛出异常。换言之,异常信息也算是方法签名的一部分,子类覆盖父类的方法在异常类型上也要符合父类方法的约束。