java基础知识点
Java中类及方法的加载顺序
- 父类的静态字段->父类静态代码块->子类静态字段->子类静态代码块->
父类成员变量(非静态字段)->父类非静态代码块->父类构造器->子类成员变量->子类非静态代码块->子类构造器
接口和抽象类的区别
- 可以实现多个接口,但只能实现一个抽象类
- 接口中的变量是public static final类型的,而抽象类没有限定
- 抽象类可以编写构造方法,接口不能编写抽象方法
- 继承抽象类不用继承抽象类中的所有方法(但需要继承所有的抽象方法),而实现接口时需实现所有的方法(除默认方法外的方法)
- 抽象类可有main方法,接口没有
- 抽象类可以有默认的方法实现
String 、StringBuffer和StringBuilder的区别
- String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
- 在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
- 使用场景:
- String:适用于少量的字符串操作的情况
- StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
- StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
String.valueOf和Integer.toString的区别
- toString方法需保证对象不为空,否则会抛出空指针错误
- valueOf对空指针的情况已经进行了处理,如果为空的时候会变成“null”字符串
方法重载(overload)
- 方法名字相同,参数不一样(参数类型不一样,参数的个数一样,个数相同但所对应的类型不相同)
- 方法参数列表一样,方法返回值不一样,不能构成方法重载,因为方法编译器无法区分这两个方法(主要根据名字和参数列表区分)
例如 int max(int a,int b) void(int a , int b)不能构成
- 方法修饰符可以不一样
方法重写(override)
- 方法名,参数列表,返回值类型都必须相同
- 访问修饰符必须大于或等于被重写的方法
- 重写的方法中,不能抛出新的异常或者更大的异常
- 重写方法只存在于具有继承关系的子类中,父类中的private方法不会发生重写
- 非静态方法不能重写成静态方法
Linkedlist和Arraylist的区别(主要就区别Arraylist是底层实现是数组与链表之间的区别)
- ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
- 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针
- 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
- 对于遍历ArrayList适合使用fori循环进行遍历(实现了RandomAccess标志,空接口,只做标记使用),对于遍历Linkedlist使用迭代器访问比较合适。