接口
接口,在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
内部类接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类
作用:
看起来并不相关的类内对象若有统一的行为,即可设置一个接口。
接口的声明
语法格式如下:
内部类接口有以下特性:
1.接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
2.接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
3.接口中的方法都是公有的。
接口的实现
利用接口设计类的过程,称为接口的实现。使用implements关键字。
语法:
public class 类名称 implements 接口名称{
//在类体中实现接口的方法
//本类声明的更多变量和方法
}
注意:
- 必须实现接口中的所有方法。
- 来自接口的方法必须声明成public。
以下是一个利用接口计算面积的例子:
运行结果:
实现多个接口的语法:
- 一个类可以实现多个接口,通过这种机制可实现对设计的多重继承。
- 实现多个接口的语法如下:
[类修饰符] pclass 类名称 implements 接口1,接口2,.....
{
....
}
接口的扩展
- 实现一个接口的类也必须实现其超接口。
- 接口扩展的语法
interface 子接口名称 extends 超口的名称1,超接口的名称2,....
{
....
}
抽象类和接口的区别
-
抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
-
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
-
接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
-
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
匿名类
匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。匿名类相当于在定义类的同时再新建这个类的实例
匿名类有两种:
1、与子类有关的匿名类
2、与接口有关的匿名类
匿名类特点
- 它必须继承一个类或者实现一个接口,而不能显示的使用extends或者implements,没有父类。
- 匿名类没有构造方法。通过new<父类名> 创建对象,匿名类定义与创建对象是同时进行的。
- 匿名类只能一次性的创建,并有父类句柄持有。
- 匿名类不需要初始化,只有默认的构造方法
内部类
将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。
成员内部类
class Person{
double age;
public height(double age){
this.age = age;
}
class student{ //内部类
public void heightSahpe(){
System.out.println("heightSahpe");
}
}
}
Person称为外部类。成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:
外部类.this.成员变量
外部类.this.成员方法
在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问:
以下代码演示外部类如何访问内部类方法:
运行结果:
局域内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
局域内部类不能私有化和静态化。
匿名内部类
使用匿名内部类的前提条件:必须继承一个父类或实现一个接口。
注意:
- 无法引用匿名内部类
- 匿名内部类不能有构造方法
- 一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
- 匿名内部类不能是public,protected,private
静态内部类
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。它不能使用外部类的非static成员变量或者方法。
异常处理
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 【相当于C语言中的bug】
- Java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了:
- 该运行错误的信息
- 处理错误的方法
- 每当java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。
异常发生的原因有很多,通常包含以下几大类
- 用户输入了非法数据。
- 要打开的文件不存在。
- 网络通信时连接中断,或者JVM内存溢出。
捕获异常
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。
如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
通过throws抛出异常
定义一个方法的时候可以使用throws关键字声明。使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理。
finally关键字
finally 关键字用来创建在 try 代码块后面执行的代码块。 无论是否发生异常,finally 代码块中的代码总会被执行。 在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
finally 代码块出现在 catch 代码块最后,语法如下:
注意:
- catch 不能独立于 try 存在。
- 在 try/catch 后面添加 finally 块并非强制性要求的。
- try 代码后不能既没 catch 块也没 finally 块。
- try, catch, finally 块之间不能添加任何代码。
集合
集合用于容纳常规编程运行时所需的对象。Java集合类存放于 java.util 包中,是一个用来存放对象的容器。