Java基础知识总结


1. substring()方法

String类的substring()方法在JDK6与JDK7的区别:

  • JDK6:截取的String对象会共享字符数组 (对于从很长的字符串中截取很小的字符串时,可能会引起内存泄漏,因为内部使用的字符数组不能被回收)
  • JDK7:截取的String对象会创建新的字符数组

2. Integer缓存机制

  • 当整数在-128到127范围时,会使用缓存的Integer对象,而不会新建对象。
  • 缓存机制只有在自动装箱场景下有用。如:Integer i = 10
  • Byte, Short, Long, Character都有类似缓存机制。Character适用范围为0127.

3. 浮点型

4. SynchronizedList与Vector区别

  • SynchronizedList可以将所有List的子类转成线程安全类
  • SynchronizedList遍历时需要手动进行同步,Vector的遍历方法加了同步锁
  • SynchronizedList可以指定锁定的对象

5. 常见垃圾回收器

  • 串行回收器 (-XX:+UseSerialGC)

    Young:

    • 串行

    • 复制算法: 1个Eden区,2个Survivor

    Old:

    • 串行

    • 标记压缩算法

  • 并行回收器 (-XX:+UseParallelGC)

    Young:

    • 多CPU并行

    • 复制算法 (与串行相同)

    Old:与串行回收器相同

  • 并行压缩回收器(-XX:+UseParallelOldGC)

    Young: 与并行回收器相同

    Old:并行

  • 并发标识清理回收器(CMS)-XX:+UseConcMarkSweepGC

    Young: 与并行回收器相同

    Old:并发

6. 类型自动提升

当表达式中包含多个基本类型时,会发生自动提升

  • byteshortchar会被提升为int
  • 提升到与表达式中最高等级操作数同样的类型:
    byte -> short
    char -> int -> long -> float -> double

7. 隐式类型转换

复合赋值运算符(如+=-=*=)会进行隐式类型转换。

  • 会自动将计算结果值强制类型转换为左侧变量的类型

    e.g,:

      short i = 5;
      i += 2; //不等于 i = i + 2, 会报编译错误

8. 类型擦除

当把有泛型类型的对象赋值给一个没有泛型类型的变量(原始类型),泛型类型信息将被擦除。

9. switch语句

  • switch语句只支持:byte, char, short, int, Character, Byte, Short, Integer, String, enum

  • switch语句中使用枚举类时,case分支中访问枚举值时不能使用枚举类名作为限定,而要直接使用枚举值。

11. if/else语句

if/else语句使用的基本规则:总是优先把包含范围小的条件放在前面

12. 循环语句

如果在for, while或do循环中不使用花括号时,第一个语句不能是局部变量声明语句

13. instanceof

  • 如果引用变量为null,则永远返回false

    String s = null;
    boolean result = s instanceof String  // 返回false
  • 编译时判断编译类型,运行时才判断引用变量引用的对象实际类型

14. 单例模式

单例模式的类一般需要实现一个私有的readResolve()方法,防止反序列化时产生新的对象。

15. 方法重载

  • 调用方法时传入的实际参数会被向上转型为方法的形参类型
  • 编译时匹配类型更精确的方法进行调用,即传入参数与形参类型更接近
  • 如果多个参数匹配结果产生冲突,则无法通过编译
  • 被重载的方法必须改变参数列表,其他修改是optional的

16. 方法重写

  • 参数列表必须完全与被重写方法的相同。
  • 返回类型必须是被重写方法的相同类型或派生类型(子类,实现类)
  • 访问权限不能比被重写方法低
  • 子类必须具有访问父类方法的权限,才能重写父类方法
  • final方法不能被重写

17. 非静态内部类

  • 编译器会默认为内部类的构造器添加外部类作为第一个参数
  • 不能有静态成员变量

18. static

  • 只能用于修饰类内部成员:Field,方法,内部类,初始化块,内部枚举类
  • 静态方法由变量的声明类型调用
  • 静态内部类无法访问外部类的非静态成员

19. 异常

  • catch捕获多个异常时,应先捕获子类异常,再捕获父类异常,否则会报编译错误
  • 可以在程序任何地方catch 任何运行时异常(RuntimeException及其子类异常),或者异常超类Exception
  • catch只能捕获try块内程序可能抛出的非运行时异常或其父类异常
  • 子类重写父类方法时,不能声明抛出比父类方法类型更多,范围更大的异常

20. 性能测试工具

  • LoadRunner
  • JMeter

21. 自动化测试工具

  • WinRunner
  • QTP
  • Selenium

文章作者: yglong
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yglong !
评论
  目录