我创建了一个类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");
}
}
}
你可能已经注意到我写了错误的算术'算术'在前面的代码中,编译器显示错误,它无法找到此符号(ArithemticException e
)。
我所做的是,而不是在这里改变拼写,我写了另一个代码(后者)。在这里,我写了正确的算术拼写并尝试编译它。它给了我两个错误:
incompatible types (required : Throwable found: Exception )
cannot find symbol(ArithemticException.java)
我的怀疑是:
我们如何轻松更改内置类(Exception)?是因为它是一个抽象类吗?
即使我可以直接访问它(即没有使用' import'语句),我也不会更改异常名称(ArithemticException)。我只是简单地把它放在一个' catch'声明。那么,为什么其他没有“进口”的节目呢?声明能够访问它。 (我也没有创建任何软件包,说它们受到软件包保护)
上一个程序没有编译,还有其他程序出现错误,找不到符号' 。
答案 0 :(得分:2)
我们如何轻松更改内置类(Exception)
你不能。
如果导入您自己的类Exception
而没有任何明确的import语句,则会发生这种情况,因为它与Except7
位于同一个包中。因此,在编译Except7
时,编译器使用yourPackage.Exception
,而不是java.lang.Exception
。
包由许多编译单元组成(第7.3节)。编译单元自动访问其包中声明的所有类型,并自动导入预定义包java.lang中声明的所有公共类型。