接口
接口(interface)是一种特殊的抽象类,本质上不是一个类,里面只能包含常量和方法的定义(不允许实现),接口就是一套未实现方法的集合。
声明语法:
[修饰符] <interface> 接口名称{
[常量定义]
[抽象方法的定义]
接口(标准)和抽象类(类)的区别
-
接口通常表示对行为(动词,或形容词)的抽象;抽象类一般为对具备相同的属性的类(名词)的抽象
-
接口中只允许常量和抽象方法;抽象类中具备普通的类所有特征,同时也支持抽象方法
-
接口允许多实现,接口允许继承多个接口;抽象类只能单继承
-
接口不存在构造器,无法实例化;抽象类虽然存在构造器,但是也无法实例
JDK8基于接口的新特性
JDK版本更新迭代后新版本的JDK中对于接口新增很多新特性,比如:接口默认方法,静态方法,函数式接口等。
默认方法:将一些实现类只需选择性实现的方法定义为default方法,这样一来,这些子类(实现类)就可以不一定实现
静态方法:在接口直接将方法定义为静态的已实现方法,这样一来,就无需创建接口的实现类来调用,直接通过接口名.方法()即可调用
函数式接口(@FunctionalInterface)与lambda表达式:所谓函数式接口是JDK8中新增的一种概念,表名一个接口中只存在一个未实现方法(可以包含默认方法,静态方法和从Object中继承的方法、 @FunctionalInterface是注解,用于检查接口是否只包含一个未实现的方法。
内部类
内部类(innerClass),表示的是在一个类的定义中允许出现其他类的声明,这些其他类通常称之为内部类(或:寄生类,类属类),内部类可以访问外部类中的成员(属性,方法),内部类提供了比方法更为强大的封装特性;Java中的内部类分为以下几种:
成员内部、局部内部类、静态内部类、匿名内部类;
成员内部类:成员内部类的权限类似于成员变量,是在类结构的最顶层定义,跟全局变量,方法属于一个访问级别
局部内部类:java中的内部类还能在构造器,普通方法,语句块中定义,这些内部类称之为局部内部类,局部内部类的使用范围只能在声明区域,局部内部类不能使用访问修饰符修饰,因为在方法级别已经定义的访问权限
静态内部类:在将成员内部类使用static修饰,从而使得在外界需要使用当前类的内部类时,只需要通过外部类的名称.内部类即可访问
匿名内部类:匿名内部类,顾名思义就是没有名字的内部类,所在在使用时一般只能使用一次,匿名内部类的作用简化代码的编写。
异常异常概述
Java中将程序执行出现的一些意外情况分为两种:错误、异常
错误 :错误一般是JVM虚拟出现的一些内存不足,或者资源耗尽的系统级别错误(比如:栈溢出,JVM错误等),这些问题对于程序员来说无法从根本上解决。
异常:异常指的是程序在编译或者执行过程中出现的一些外在因素导致的问题(比如:数组索引越界,空指针异常,类型转换异常等),这些问题程序员一般是可以解决的,因此异常需要重点关注。
异常分类
分为编译异常和运行时异常
编译异常:编译异常也称之一般异常,检查异常;这种类型异常一般表现为在编译期间,由编译器直接抛出,需要由程序员进行手动处理。
运行时异常:在编译期间正常通过,在JVM执行程序时,出现的异常称之为运行时(Runtime)异常,运行时异常是所有异常中最常见的异常
异常处理
异常处理分为两类,异常抛出和异常捕获
异常抛出:异常抛出通常使用throws关键字,在方法的声明上将有可能出现的异常抛给下一级的调用者处理,异常抛出是一种实际开发中非常常见的处理异常的方式。
异常捕获:由于异常的抛出是一种临时性解决方案,最终异常还是需要有处理机制,因此异常的捕获就是为了解决这些问题而存在的另一种异常处理方案。