java基础知识点

133 阅读3分钟

Java中类及方法的加载顺序

  1. 父类的静态字段->父类静态代码块->子类静态字段->子类静态代码块-> 父类成员变量(非静态字段)->父类非静态代码块->父类构造器->子类成员变量->子类非静态代码块->子类构造器

接口和抽象类的区别

  1. 可以实现多个接口,但只能实现一个抽象类
  2. 接口中的变量是public static final类型的,而抽象类没有限定
  3. 抽象类可以编写构造方法,接口不能编写抽象方法
  4. 继承抽象类不用继承抽象类中的所有方法(但需要继承所有的抽象方法),而实现接口时需实现所有的方法(除默认方法外的方法)
  5. 抽象类可有main方法,接口没有
  6. 抽象类可以有默认的方法实现

String 、StringBuffer和StringBuilder的区别

  1. String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
  2. 在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全
  3. 使用场景:
  • String:适用于少量的字符串操作的情况
  • StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
  • StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

String.valueOf和Integer.toString的区别

  1. toString方法需保证对象不为空,否则会抛出空指针错误
  2. valueOf对空指针的情况已经进行了处理,如果为空的时候会变成“null”字符串

方法重载(overload)

  1. 方法名字相同,参数不一样(参数类型不一样,参数的个数一样,个数相同但所对应的类型不相同)
  2. 方法参数列表一样,方法返回值不一样,不能构成方法重载,因为方法编译器无法区分这两个方法(主要根据名字和参数列表区分) 例如 int max(int a,int b) void(int a , int b)不能构成
  3. 方法修饰符可以不一样

方法重写(override)

  1. 方法名,参数列表,返回值类型都必须相同
  2. 访问修饰符必须大于或等于被重写的方法
  3. 重写的方法中,不能抛出新的异常或者更大的异常
  4. 重写方法只存在于具有继承关系的子类中,父类中的private方法不会发生重写
  5. 非静态方法不能重写成静态方法

Linkedlist和Arraylist的区别(主要就区别Arraylist是底层实现是数组与链表之间的区别)

  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针
  3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
  4. 对于遍历ArrayList适合使用fori循环进行遍历(实现了RandomAccess标志,空接口,只做标记使用),对于遍历Linkedlist使用迭代器访问比较合适。