A. 正确。Java 的异常确实被分为查抄型异常(Checked Exceptions)和非查抄型异常(Unchecked Exceptions)。查抄型异常在编译时会被查抄,如果方法可能抛出查抄型异常,但调用者没有捕捉或声明抛出这个异常,则编译时会报错。非查抄型异常则包括运行时异常(RuntimeException)和错误(Error),这些异常在编译时不会被查抄,通常由 JVM 在运行时抛出,如数组越界(ArrayIndexOutOfBoundsException)、空指针异常(NullPointerException)等。
B. 错误。Exception 类是 Java 异常体系的根类,它自己不黑白查抄型异常。它包罗了查抄型异常和非查抄型异常(如运行时异常)。因此,上层代码在处理 Exception 或其子类的异常时,是否需要处理(捕捉或声明抛出)取决于该异常是否为查抄型异常。
C. 错误。RuntimeException 及其子类黑白查抄型异常。这意味着,如果你的方法可能抛出 RuntimeException 或其子类异常,你不需要在方法的签名中声明这个异常,调用者也不需要捕捉或声明抛出这个异常。
D. 错误。Java 中,不是从 RuntimeException 类派生的异常,有可能是查抄型异常(如 IOException、SQLException 等),也有可能是错误(如 Error 类及其子类)。只有查抄型异常在语法上需要被处理(捕捉或声明抛出),错误通常是由 JVM 抛出的,表现更严重的问题,如内存溢出(OutOfMemoryError)等,这些通常不被应用代码捕捉处理。
A. 说法错误。内部类(包括非静态内部类)确实可以访问外部类的成员,包括私有成员。这是由于内部类持有外部类的一个隐式引用(对于非静态内部类),这个引用允许内部类访问外部类的所有成员,无论这些成员是私有的、受掩护的、包私有的还是公共的。
B. 说法正确。静态内部类是使用static修饰的内部类,它确实与外部类的实例无关。由于它是静态的,因此不需要外部类的实例就可以创建其实例,而且可以直接通过外部类名加.来访问静态内部类(以及它的静态成员)。
C. 说法正确。局部内部类是定义在外部类的方法中的类,它确实只能在方法内部使用,而且其作用域仅限于包罗它的方法或代码块。由于这种内部类没有自己的类名(由于它不是顶级类),因此它不能被方法外的其他类访问。
D. 说法正确。静态内部类可以包罗静态成员和非静态成员,这是由于它是一个独立的类(只是被嵌套在外部类内部)。然而,由于静态内部类与外部类的实例无关,因此它只能访问外部类的静态成员(通过外部类名访问)。它不能访问外部类的非静态成员,由于那些成员依靠于外部类的特定实例。