1、面向对象
三大特性 —— 封装、继承、多态
封装
封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。
实现方式:private关键字,实现私有化。public公开可以暴露的方法和属性。
继承
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
多态
具体表现为父类的引用指向子类的实例。
- 对象类型和引用类型之间具有继承(类)/实现(接口)的关系
- 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定;
- 多态不能调用“只在子类存在但在父类不存在”的方法
- 如果子类重写了父类的方法,真正执行的是子类重写的方法,如果子类没有重写父类的方法,执行的是父类的方法
接口和抽象类
共同点:
- 接口和抽象类都不能直接实例化,只有实现和继承后才能创建具体对象
- 接口和抽象类都可以包含抽象方法,其没有方法体,要在子类或实现类中实现
不同点:
- 接口主要用于对类的行为进行约束,抽象类主要用于代码复用
- 一个类只能继承一个类(包括抽象类),但一个类可以实现多个接口,一个接口也可以继承多个其他接口
- 接口中的成员变量只能是
public static final(默认)类型的,不能被修改且必须有初始值。抽象类的成员变量可以有任何修饰符,可以在子类中被重新定义或赋值 - 接口中,可以有
public abstract(默认)、default、static方法和private方法;抽象类中可以有抽象方法和非抽象方法
接口static方法:无法在实现类中被覆盖,只能通过接口名直接调用
接口default方法:可以在实现类中被覆盖,可以不更改实现类的情况下向现有接口添加新功能
接口private方法:接口内部共享代码,给default或static方法来调用
由于可见性,我们知道,接口只能是 public ,而抽象类可以是 public 或者 protected

深拷贝、浅拷贝、引用拷贝
引用拷贝:不会在堆上创建新的对象,只是创建一个新的引用指向同一个对象。
浅拷贝:会在堆上创建一个新的对象,但是其对象内部的引用类型的属性,会直接复制对象的引用地址,也就是拷贝对象和原对象共用一个内部对象。
深拷贝:完全复制整个对象,包括对象的内部对象。

1、异常
所有异常都来自Throwable类,其还有两个子类:
Exception
程序本身可以处理的异常,通过catch来捕获并处理,又可以分为如下两类:
Checked Exception
受到异常检查,Java编译过程中,如果这个类型的异常没有被catch或者throws处理,无法通过编译。除了运行时异常和其子类外都是受检查异常。有:IO相关、SQLException、ClassNotFoundException。
Unchecked Exception
编译过程中不进行处理也可以通过编译。常见的有:

Error
程序无法处理的错误,不建议通过catch捕获处理。典型的有:Virtual MachineError、OOM等。JVM遇到这些错误会选择线程终止。
Throwable类常用方法
String getMessage()
返回异常发生时的详细信息
String toString()
返回异常发生时的简要描述
String getLocalizedMessage()
可以通过子类覆盖这个方法,打印本地化信息,如果没有重写则与getMessage结果相同
void printStackTrace()
在控制台上打印 Throwable 对象封装的异常信息
try-catch-finally
- try块:用于捕获异常。其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。
- catch块:用于处理 try 捕获到的异常。
- finally 块:无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try 块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行。
注意事项: 如果finally和try中都有return,那么try中的return会失效,因为其中的本地变量会被finally执行后return的结果替代。
finally不执行的情况
虚拟机在finally之前被终止的情况,代码不会被执行
System.exit(1)
当前程序所在的线程死亡和CPU关闭也会导致其不执行。
try-with-resources 语句
以读取文件代码为例
如果有多个资源需要关闭,只需要在不同的资源中间加上“;”即可
try (Scanner scanner = new Scanner(new File("test.txt"))) {
while (scanner.hasNext()) {
System.out.println(scanner.nextLine());
}
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
}
1620

被折叠的 条评论
为什么被折叠?



