目录
[一,== 与 equals 的区别?](#一,== 与 equals 的区别?)
[四,请问你对Java 反射有了解吗?](#四,请问你对Java 反射有了解吗?)
一,== 与 equals 的区别?
==是一个运算符 ,equals 是 Object 类的方法
用于基本类型的变量比较时: ==比较的是值是否相等,equals不能直接用于基本数据类型的比较,需要转换为其对应的包装类型。
用于引用类型的比较时。==和 equals 都是比较栈内存中的地址是否相等。但是通常会重写 equals 方法去实现对象内容的比较。
二,接口和抽象类的区别?
它们的共同点是:都不能实例化对象
基于JDK1.8之后
它们的不同点是:
抽象类一般用于抽取子类中的共同方法和属性,接口一般用于指定实现类的规范
抽象类可以有构造方法,作用是用给抽象父类中中的属性赋值;接口中不能有构造方法
接口中不能含有静态代码块,而抽象类可以有静态代码块
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
三,请说出几个常见的异常?
Java中的异常分为运行时异常和编译时异常两大类:
运行时异常都是 RuntimeException 类及其子类异常,这类异常的特点是不强行要求程序员进行处理,常见的有
NullPointerException 空指针异常,调用了未经初始化的对象或者是不存在的对象
IndexOutOfBoundsException 数组角标越界异常,常见于操作数组对象时发生
ClassCastException 数据类型转换异常
NoSuchMethodException 方法不存在异常
非运行时异常,也叫编译异常(CheckedException),是 Exception 的子类但不是 RuntimeException的子类,类型上都属于及其子类
它要求程序员在编写代码的过程中提供异常处理方案,否则编译不通过,常见的有:IOException和SQLException等
四,请问你对Java 反射有了解吗?
反射是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法,并且可以调用它的任意一个方法它主要应用于大量的框架底层,比如 Spring/Spring Boot、MyBatis 等等
五,浅拷贝和深拷贝区别?
- 浅拷贝 :被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对"主"对象进行拷贝,但不会复制主对象里面的对象。"里面的对象"会在原来的对象和它的副本之间共享。
- 深拷贝 :深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。简而言之,深拷贝把要复制的对象所引用的对象都复制了一遍