我们可以在没有import语句的情况下访问内置类

时间:2014-06-25 14:04:58

标签: java

我创建了一个类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)。 我所做的是,而不是在这里改变拼写,我写了另一个代码(后者)。在这里,我写了正确的算术拼写并尝试编译它。它给了我两个错误:

  1. incompatible types (required : Throwable found: Exception )
  2. cannot find symbol(ArithemticException.java)
  3. 我的怀疑是:

    1. 我们如何轻松更改内置类(Exception)?是因为它是一个抽象类吗?

    2. 即使我可以直接访问它(即没有使用' import'语句),我也不会更改异常名称(ArithemticException)。我只是简单地把它放在一个' catch'声明。那么,为什么其他没有“进口”的节目呢?声明能够访问它。 (我也没有创建任何软件包,说它们受到软件包保护)

    3. 上一个程序没有编译,还有其他程序出现错误,找不到符号' 。

1 个答案:

答案 0 :(得分:2)

  

我们如何轻松更改内置类(Exception)

你不能。

如果导入您自己的类Exception而没有任何明确的import语句,则会发生这种情况,因为它与Except7位于同一个包中。因此,在编译Except7时,编译器使用yourPackage.Exception,而不是java.lang.Exception

另请参阅JLS: Chapter 7. Packages

  

包由许多编译单元组成(第7.3节)。编译单元自动访问其包中声明的所有类型,并自动导入预定义包java.lang中声明的所有公共类型。

另见String class make confusion