1. 面向对象三大特性
面向对象三大特性主要分为封装,继承,多态。封装就是将属性和行为进行封装提高代码的可维护性,继承就是子类继承父类可以重写父类中的方法提高代码的可重用性,多态就是同一个方法在执行不同子类时有不同的行为提高系统的扩展性。
2. 重载和重写的区别
重载同一个方法传入不同参数有不同的返回结果,重写子类重写父类的方法
重载的参数个数、参数类型、参数顺序、返回值类型都可以不同方法名得相同。
重写的参数个数、参数类型、参数顺序、返回值类型都必须相同。
3. 字符串底层是一个什么样的数据结构
字符串底层是通过static final修饰的字符数组。
4. String 、StringBuilder 、StringBuffer 的区别?
String底层通过static final修饰的字符数组,长度不可变的,可以看成线程安全的
StringBuilder 是可变的字符串线程非安全的。
StringBuffer是线程安全的底层主要通过Synchronized实现线程安全的
5.synchronized怎么实现线程安全的
synchronized主要通过锁机制来实现线程安全的,只能由一个线程可以获取锁其他线程就会被阻塞等待线程释放锁,synchronized可以加在代码块上,也可以加在静态方法上,也可以加载非静态方法上,加在静态方法上锁住整个类,只能有一个线程可以访问这个类的静态方法,加在非静态方法上锁住的就是当前对象实例(this)
6. equals() 与 == 的区别?
==对于基本数据类型比较的是值,对于引用数据类型比较的是地址
equals对于没有重写的比较的是地址,重写equals比较多是值
7. hashCode()是什么
hashCode()就是用来获取hash值的
8. 为啥重写equals()一定要重写hashCode()
因为如果不重写hashCode()方法就违反了两对象相等,hashCode不等的规定,也会导致一些常用的集合出现问题,比如hashMap如果不重写hashCode就会导致key值不唯一。
9. 是否可以继承String类? 为什么用final修饰?
String类不能继承因为被final修饰,主要为了保证String类的安全性和效率。
10. java中的访问修饰符
私有的:只能在当前类中访问
默认的 : 只能访问同一个包下
受保护的 只能在同一个包下访问及其子类
public :都可以访问到
11. final有什么用?和finally,finalize有什么区别?
final可以作用方法,变量,类上。作用在方法上这个方法不能被重载,作用在变量上这个变量不能被修改作用在类上该类不能被继承。
finally不管执行try还是catch都会执行finally
finalize是用在垃圾回收器中的方法。
12. this和super的区别
this表示本类的其他构造方法。
super表示调用其父类的构造方法
13. 局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final?
主要是为了保证生命周期的一致性,当方法结束后非final修饰的变量会被销毁,而局部内部类对局部变量的引用仍然存在,调用局部变量时就会出错
14.Java中创建对象的方式有哪些
通过new关键字
同过反序列化的方式
使用clone()方法
15.接⼝和抽象类的区别
抽象类中又构造方法,接口中没有构造方法
抽象类可以有普通的方法,接口中只能有构造方法
抽象类可以普通变量,接口中只能由被static final修饰的变量
一个类可以实现多个接口,但是只能继承一个抽象类
16.深拷⻉和浅拷⻉
深拷贝就是会拷贝基本数据类型的值也会拷贝实例对象的引用地址所指向的对象。深拷贝的对象拷贝出来的对象不会共用同一个内存空间。
浅拷贝就是会拷贝基本数据类型的值和实例对象的引用地址。拷贝出来的对象和旧对象共用同一个内存空间。
17.Java中的异常体系是怎样的
他有一个顶级父类Throwable下面有两个子类error和Exception
error就是会导致程序终止的错误
Exception 分为编译时异常和运行时异常
常见的运行时异常有
空指针异常
类转换异常
算术运算符异常
数组下标越界异常
数据库异常
参数不合法异常
18. throw 和 throws 的区别?
throw是一定会抛出异常调用者一定会要进行处理
throws是可能抛出异常调用者可以不进行处理继续往上抛
19.什么是反射?
反射就是在运行过程中可以获取到类的属性和方法,反射就是将类中的属性方法封装成对象
20. 有哪些方式可以获取class对象
1.通过类名.class()
2. class.forname()
3.getClass()
21.Collection 和 Collections 有什么区别?
Collection是最基本的集合接口下面有两个接口list和set。list他是有序可重复,set是无序不可重复的
Collections:是集合的一个工具类
22.JDK8有哪些新特性
1.Lambda表达式
2. Stream流
3. 接口的默认的方法
4.引入Optional
5.日期API
23.Stream流的理解
Stream流主要就是以流的方式来操作数组或集合的,Stream流分为中间操作比如filter,map,flatMap等方法都是惰性求职不会立即执行,以及终止操作比如max,min,count, toArry等方法都是终止操作他们会触发整个流的处理。