我已经开始准备自己参加OCJP7考试,我发现这一章看起来很复杂.
假设我有这段代码:
class Outer1{
interface InnerInterface{
String x = "test";
}
class InnerClass{
String x = "test";
}
}
class Outer2{
static interface NestedInterface{
String x = "test";
}
static class NestedClass{
String x = "test";
}
}
class Main{
public static void main(String [] args){
String s1 = Outer1.InnerInterface.x;
String s2 = new Outer1().new InnerClass().x;
String s3 = Outer2.NestedInterface.x;
String s4 = new Outer2.NestedClass().x;
}
}
Run Code Online (Sandbox Code Playgroud)
你能告诉我,为什么我们可以访问Outer1.InnerInterface.x,并Outer2.NestedInterface.x以同样的方式?内部接口默认是静态的?我正试图建立一些联系,以使它们更清晰.
我正在通过阅读 SG Ganesh 和 Tushar Sharma 撰写的书来学习 OCJP 考试。第346页有一段文字说:
\n\n\n如果您尝试更改 throws 子句会怎样?有多种方法可以更改重写方法中的 throws 子句,包括以下几种
\n\n
:不提供任何 throws 子句。
\n b.列出要抛出的更一般的检查异常。
\n c. 除了基本方法中给定的已检查异常之外,还列出更多已检查异常。
\n 如果尝试这三种情况中的任何一种,\xe2\x80\x99 将收到编译器错误。例如,尝试不在实现 IntReader 接口的类的 readIntFromFile() 方法中提供 throws 子句。Run Code Online (Sandbox Code Playgroud)\n\npublic int readIntFromFile() {\n Scanner consoleScanner = new Scanner(new File("integer.txt"));\n return consoleScanner.nextInt();\n}\n你\xe2\x80\x99会得到这个编译器错误:\xe2\x80\x9cun报告异常FileNotFoundException; 必须被捕获或声明为抛出。\xe2\x80\x9d
\n\n
\n 总而言之,基类方法\xe2\x80\x99s throws 子句是它提供给该方法的调用者的契约:
\n 它表示调用者应该处理列出的异常或在其 throws 子句中声明这些异常。当重写基本方法时,派生方法也应遵守该约定。基本方法的调用者准备只处理基本方法中列出的异常,因此重写方法不能抛出更一般的异常或除列出的已检查异常之外的异常。
\n 但是,请注意,派生类方法\xe2\x80\x99s throws 子句应遵循基方法\xe2\x80\x99s throws 子句的约定的讨论仅限于受检查的异常。与基类 method\xe2\x80\x99s throws 子句相比,仍可以在合约中添加或删除未经检查的异常。例如,请考虑以下情况:Run Code Online (Sandbox Code Playgroud)public int readIntFromFile() throws IOException, NoSuchElementException {\n Scanner consoleScanner = new Scanner(new File("integer.txt"));\n …