【八股学习】Java基础——面向对象、反射、异常

1、面向对象

三大特性 —— 封装、继承、多态

封装

封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。

实现方式:private关键字,实现私有化。public公开可以暴露的方法和属性。

继承

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能但不能选择性地继承父类

多态

具体表现为父类的引用指向子类的实例

  • 对象类型和引用类型之间具有继承(类)/实现(接口)的关系
  • 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定
  • 多态不能调用“只在子类存在但在父类不存在”的方法
  • 如果子类重写了父类的方法,真正执行的是子类重写的方法,如果子类没有重写父类的方法,执行的是父类的方法

接口和抽象类

共同点:

  • 接口和抽象类都不能直接实例化,只有实现和继承后才能创建具体对象
  • 接口和抽象类都可以包含抽象方法,其没有方法体,要在子类或实现类中实现

不同点:

  • 接口主要用于对类的行为进行约束,抽象类主要用于代码复用
  • 一个类只能继承一个类(包括抽象类),但一个类可以实现多个接口,一个接口也可以继承多个其他接口
  • 接口中的成员变量只能是 public static final (默认)类型的,不能被修改且必须有初始值。抽象类的成员变量可以有任何修饰符,可以在子类中被重新定义或赋值
  • 接口中,可以有 public abstract(默认)、defaultstatic方法和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 MachineErrorOOM等。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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值