JAVA基础题练习查漏补缺(自用)

1、访问修饰符之间的区别

当问及访问修饰符的时候,要马上想它们能覆盖的四种范围,由小到大是:本类、同包、子包、其他包。再从访问修饰符的覆盖范围由小到大进行说明:

private:本类

protected:本类以及同包

default(不写修饰符时):本类、同包、子包

public:本类、同包、子包、其他包

2、深拷贝和浅拷贝区别是什么

区别在于对于引用类型的复制:

浅拷贝:对于 基本数据类型 直接复制数据值;对于 引用数据类型 复制它的引用地址,新旧对象指向同一个内存地址,修改其中一个对象的值,另一个对象的值随之改变。

深拷贝:对于 基础数据类型 直接复制数据值;对于 引用数据类型 开辟新的内存空间,在新的内存空间里复制一个一模一样的对象,新老对象不共享内存,修改其中一个对象的值,不会影响另一个对象。

深拷贝相比于浅拷贝速度较慢并且花销较大。

3、关于父类子类初始化问题

静态变量只会初始化(执行)一次。

当有父类时,完整的初始化顺序为:父类静态变量(静态代码块)->子类静态变量(静态代码块)->父类非静态变量(非静态代码块)->父类构造器 ->子类非静态变量(非静态代码块)->子类构造器 。

要记住在这里面构造器是最后完成初始化的。

4、编译时多态和运行时多态

多态分为两种情况:编译时多态和运行时多态。如果在编译时能够确定执行多态方法

中的哪一个,称为编译时多态,否则称为运行时多态。

参考文章:(16条消息) Java 编译时多态和运行时多态_若明天不见-CSDN博客_java运行时多态和编译时多态

5、抽象类(abstract class)和接口(interface)有什么区别

继承:抽象类只能单继承,接口可以多“继承”(一个类可以实现多个接口)。

有无构造方法:抽象类可以有构造方法,接口中不能有构造方法。

有无成员变量:抽象类中可以有成员变量,接口中没有成员变量,只能有常量(默认就是 public static final)

修饰符:抽象类中的抽象方法类型可以是任意修饰符,Java 8 之前接口中的方法只能是 public 类型,Java 9 支持 private 类型。

抽象类中可以包含非抽象的方法,在 Java 7 之前接口中的所有方法都是抽象的,在 Java 8 之后,接口支持非抽象方法:default 方法、静态方法等。Java 9 支持私有方法、私有静态方法。

设计思想的区别:

接口是自上而下的抽象过程,接口规范了某些行为,是对某一行为的抽象。我需要这个行为,我就去实现某个接口,但是具体这个行为怎么实现,完全由自己决定。

抽象类是自下而上的抽象过程,抽象类提供了通用实现,是对某一类事物的抽象。我们在写实现类的时候,发现某些实现类具有几乎相同的实现,因此我们将这些相同的实现抽取出来成为抽象类,然后如果有一些差异点,则可以提供抽象方法来支持自定义实现。

有一个形象的比方:

普通类像亲爹 ,他有啥都是你的。

抽象类像叔伯,有一部分会给你,还能指导你做事的方法。

接口像干爹,可以给你指引方法,但是做成啥样得你自己努力实现。

6、Error 和 Exception 有什么区别

Error(错误)和 Exception(异常)都是 java.lang.Throwable 类的子类,在 Java 代码中只有继承了 Throwable 类的实例才能被 throw 或者 catch。

Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类,Exception 是程序正常运行过程中可以预料到的意外情况,并且应该被开发者捕获,进行相应的处理。Error 是指正常情况下不大可能出现的情况,绝大部分的 Error 都会导致程序处于非正常、不可恢复状态。所以不需要被开发者捕获。

Error 错误是任何处理技术都无法恢复的情况,肯定会导致程序非正常终止。并且 Error 错误属于未检查类型,大多数发生在运行时。Exception 又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源码里必须显示的进行捕获处理,这里是编译期检查的一部分。不检查异常就是所谓的运行时异常,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译器强制要求。

以下是常见的 Error 和 Exception:

1)运行时异常(RuntimeException):

  • NullPropagation:空指针异常;
  • ClassCastException:类型强制转换异常
  • IllegalArgumentException:传递非法参数异常
  • IndexOutOfBoundsException:下标越界异常
  • NumberFormatException:数字格式异常
  • ConcurrentModificationException的异常:并发修改异常


2)非运行时异常:

  • ClassNotFoundException:找不到指定 class 的异常
  • IOException:IO 操作异常


3)错误(Error):

  • NoClassDefFoundError:找不到 class 定义异常
  • StackOverflowError:深递归导致栈被耗尽而抛出的异常
  • OutOfMemoryError:内存溢出异常

文章主要参考:(16条消息) Java 基础高频面试题(2021年最新版)_程序员囧辉-CSDN博客_java基础知识面试并加上了自己的理解以及其他大佬的见解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值