Java中不可不知道的几个重要知识点
Java的几个重要知识点
接口
接口是更加抽象的抽象类
接口不能被实例化
接口中所有的方法都是 public 方法
接口中的抽象方法可以不用abstract
接口的字段都是 public static final 的常量
除了抽象类,实现接口的类必须实现接口的所有方法
接口与抽象类
每个类只能继承一个类,但一个类可以同时实现多个接口
接口不能继承其他的类,但可以继承多个别的接口
interface A extends B, C{}
实现接口与继承类
接口与继承解决的问题不同
继承价值主要在于解决代码的复用性和可维护性
接口价值主要在于设计号各种规范,让其他类实现这些方法
接口比继承更加灵活
接口一定程度上实现代码解耦
接口的多态特性
多态参数
多态数组
多态传递(实现的接口实现了另一个接口)
lambda 表达式
内部类
内部类的分类
定义在外部类的局部位置(方法中、代码块)
(1)局部内部类 (有类名)
(2)匿名内部类(没有类名)
定义在外部类的成员位置
(1)成员内部类
(2)静态内部类 (static)
局部内部类
可以直接访问内部类的所有成员,包括私有的
不能添加访问修饰符,相当于一个局部变量,但可以用final
作用域仅在定义它的方法或代码块
外部类和局部内部类的成员重名时,要访问外部类的成员时可以使用 (外部类名.this.成员)
匿名内部类
既是一个类的定义,同时本身也是一个对象
可以直接访问内部类的所有成员,包括私有的
不能添加访问修饰符,相当于一个局部变量
匿名内部类不能有构造器,但可以提供对象初始化代码块
作用域仅在定义它的方法或代码块
外部其他类不能访问匿名内部类
常用于参数传递
//基于类的匿名内部类
Father father = new Father("jack") {
@Override
public void test() {
//匿名内部类重写了方法
}
}
//基于抽象类的匿名内部类
//基于接口的匿名内部类
new Comparator() {
@Override
public int compare() {
//重写方法
}
}
成员内部类
成员内部类定义外部类的成员位置,并且没有static
可以添加访问修饰符
作用域与其他成员变量一样
外部类访问成员内部类时须创建对象再访问
外部类和局部内部类的成员重名时,要访问外部类的成员时可以使用 (外部类名.this.成员)
静态内部类
定义于外部类的成员位置,并且有static修饰 (有static修饰的成员内部类)
异常
执行过程中所发生的异常事件可以分为两大类
Error(错误):JVM无法解决的严重问题,如StackOverflowError和OOM
Exception:因编程错误或偶然的外在因素导致的一般性问题
编译器检查不出来,一般是编程时的逻辑错误
编译器要求的必须处置的异常,否则不能通过编译
编译异常
运行时异常
异常处理
try-catch-finally
捕获异常,自行处理
如果try块中没有出现异常,则执行try块中的所有语句,不再执行catch块,若有finally,最后还要执行finally块中语句
如果出现了异常,则try块中剩下的语句不在执行,将执行catch块,最后执行finally块
try{
return 1;
} catch Exception e {
return 2;
} finally {
return 3;
}
//try 块中没有出现异常,catch块不执行,因为有finally块中的return(finally必须执行),所以finally中return执行,try中return不执行
try{
//出现异常
return 1;
} catch Exception e {
return 2;
} finally {
return 3;
}
//try 中出现异常,try中return不再执行, 又因为finally有return,所以catch中return不执行,finally中return被执行
try{
//出现异常
return 1;
} catch Exception e {
int a = 1;
return a;
} finally {
a += 1;
}
//try 中出现异常, catch被执行,执行到return时会将 a = 1保存为临时变量 temp = 1;最后finally修改后再执行catch块中的语句,并将临时变量返回,而不是修改后的a
throws/throw
抛出异常,交给调用者处理
throw和throws的区别
-try-with-resources(带资源的try语句)
try (Resource res = ...) //res实现了Closeable接口(AutoCloseable的子接口)
{
work with res ...
}
try 退出时,会自动调用res.close(),自动关闭资源(无论是否出现异常)
try-with-resource也可以有catch、finally语句,这些语句将在资源被关闭后执行
自定义异常
自定义类继承Exception或RuntimeException
继承Exception则属于编译异常
继承RuntimeException则属于运行异常
class AgeException extends RuntimeException {
public AgeException(String message) {
super(message);
}
}