我创建了一个类Exception
(知道已经存在一个具有相同名称的内置子类),如下所示:
class Exception {
public static void main(String args[]) {
int i=8;
try{
int a = args.length;
int g = i/a;
} catch(ArithemticException e){
System.out.println("here is the error:"+e);
}
}
}
class Except7 {
static int h;
public static void main(String args[]) {
try{
int h = 9 / 0;
System.out.println("//");
} catch(ArithmeticException e) {
h = 4;
System.out.println(h);
} catch(Exception e) {
System.out.println("h");
}
}
}
您可能已经注意到,我在先前的代码中写了“算术”的错误拼写,所以可以肯定的是,编译器显示了一个错误,即找不到该symbol(ArithemticException e
)。我所做的是,我没有在这里更改拼写,而是编写了另一段代码(后者)。在这里,我编写了正确的算术拼写并尝试对其进行编译。它给了我两个错误:
incompatible types (required : Throwable found: Exception )
cannot find symbol(ArithemticException.java)
我的怀疑是:
我们如何如此轻松地更改一个内置类(Exception)?是因为它是一个抽象类?
即使我可以直接访问它(即不使用'import'语句),我也不倾向于更改异常的名称(ArithemticException)。我只是将其放在“ catch”语句中。然后,为什么没有“ import”语句的其他程序也可以访问它。(我也没有创建任何程序包,也就是说它们是受程序包保护的)
先前的程序未编译,其他程序仍出现“找不到符号”错误。
我们如何如此轻松地更改内置类(Exception)
你不能。
发生的事情是,您自己的类Exception
是在没有任何显式import语句的情况下导入的,因为它与处于同一包中Except7
。因此,在编译时Except7
,编译器使用yourPackage.Exception
,而不是java.lang.Exception
。
另请参见JLS:第7章。Packages:
一个包由多个编译单元组成(第7.3节)。编译单元可以自动访问其包中声明的所有类型,还可以自动导入预定义包java.lang中声明的所有公共类型。
另请参见字符串类使混乱
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句