包和接口
包是多个类的容器,保持类的名称空间相互隔离
通过使用关键字interface,Java可以将接口从其实现中完全抽象出来
Java使用文件系统目录存储包
Java提供的所有标准类都存储在名为java的包中,基本的语言函数存储在java包的java.lang子包中,编译器隐式地为所有程序导入java.lang包。
使用关键字interface,可以从类的实现中完全抽象出类的接口。
接口类的修饰符,(两种默认访问级别和public)
JDK 8为接口添加了一个特性(JDK 8之前,接口只能定义“有什么”,而不能定义“如何实现”),可以在接口方法中添加默认实现,因此,现在接口可以指定一些行为。然而,默认实现只是构成了一种特殊 用途,接口最初的目的没变
在接口中可以声明变量,它们被隐式的标识为final和static,所有方法和变量都隐式地声明为public
实现接口的方法必须被声明为public
可将变量声明为使用接口而不是类的对象引用(运行时动态查询)会造成严重的负担,在性能要求苛刻的代码中少用
部分实现:如果类包含了一个接口,但是没有实现该接口定义的全部方法,那么必须将类声明为abstract
嵌套接口:可以将接口声明为某个类或另外一个接口的成员(可以被声明为public、private、protected),顶级接口只能声明为(public或默认访问级别)
在封装范围之外使用嵌套接口,必须使用包含嵌套接口的类或接口的名称进行限定(完全限定)
接口中的变量:可以使用接口将共享的常量导入到多个类中,具体方法是简单地声明包含变量的接口,并将变量初始化为期望的值。当在类中包含这种接口时,所有这些变量在作用域内都会被作为常量
接口可以通过关键字extends继承另一个接口,语法和继承类相同
开发默认方法的主要动机是提供一种扩展接口的方法,而不破坏现有代码,另一个动机是希望在接口中指定本质上可选的方法
添加默认方法并没有改变接口关键特征:不能维护状态信息。接口仍然不能有实例变量。因此,接口与类之间决定性的区别是类可以维护状态信息,而接口不可以。
为接口定义默认方法,类似于为类定义方法。主要区别是,声明前面加关键字default
Java 8 为接口添加了另一项新功能:定义一个或更多个静态方法。(实现接口的类或子接口不会集成接口中的静态方法)
异常处理
异常是运行时在代码序列中引起的非正常状况
异常可以由Java运行时系统生成,也可以通过代码手动生成。由Java抛出的异常与那些违反Java语言规则或Java执行环境约束的基础性错误有关。手动生成的异常通常用于向方法的调用者报告某些错误条件。
从JDK 7开始,try语句增加了一种支持自动资源管理的新形式。这种新形式的try被称为带资源的try
所有异常类型都是内置类Throwable的子类。它有两个子类,将异常分为两个不同分支。
Exception:可以用于用户程序应当捕获的异常情况,也可以用于创建自定义异常类型的子类。它有RuntimeException子类,这种类型的异常是自动定义的。
Error:定义了在常规环境下不希望由程序捕获的异常。由Java运行时系统使用,以指示运行时环境本身出现了某些错误。
Java运行时系统提供的默认异常处理程序很有用,但是通常希望自己处理异常。自己处理异常有两个优点:第一,允许修复错误;第二,阻止程序自动终止。
异常构造函数(不带参数或带一个字符串参数)
如果方法可能引发自身不进行处理的异常,就必有指明throws这种行为,以便方法调用者能够保卫自己以防备上述异常。除了Error和RuntimeException及其子类类型的异常之外,对于所有其它类型的异常这都是必需的。
方法返回之前都会执行finally子句
RuntimeException标准类型的子类(未经检查的异常),编译器不检查方法是否处理 或抛出这些异常
从JDK 1.4开始,链式异常这一特性被包含进了异常子系统。通过链式异常,可以为异常关联另一个异常。第二个异常描述第一个异常的原因
从JDK 7开始,异常系统添加了3特性。带资源的try语句,多重捕获(ArithmeticException | ArrayIndexOutOfBoundsException e),重新抛出
转载请注明:学时网 » java8学习笔记总结(二)