Java基础

https://www.yuque.com/docs/share/31deed7b-935a-4cf7-bcf3-8107bee40404?#0ea5e531

1. 面向对象

封装,继承,多态

  • 多态是指父类的某个方法被子类重写时,可以产生自己的功能行为,同一个操作作用于不同对象,可以有不同的解释,产生不同的执行结果。
  • 静态方法与静态成员变量可以被继承,但是不能被重写。它对子类隐藏,因此静态方法也不能实现多态
  • 为什么Java里的匿名内部类只能访问final修饰的外部变量?
1
2
3
因为匿名内部类最终用会编译成一个单独的类,而被该类使用的变量会以构造函数参数的形式传递给该类,例如:Integer paramInteger,
如果变量不定义成final的,paramInteger在匿名内部类被可以被修改,进而造成和外部的paramInteger不一致的问题,为了避免这种不一致的情况,
因为Java规定匿名内部类只能访问final修饰的外部变量。
  • 描述一下Java的异常体系?
  1. Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时, Java虚拟机(JVM)一般会选择线程终止。
  2. Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常,程序中应当尽可能去处理这些异常。运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,
    这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的, 程序应该从逻辑角度尽可能避免这类异常的发生。

2. 设计模式

3. 集合框架

ArrayList , LinkedList , HashMap , LinkedHashMap , SparseArray , ArrayMap ,

HashMap中的名词解释

HashMap源码解析

4. 反射

反射慢主要因为反射是动态类型,导致没办法运用JVM的一些优化措施。

  • 如何防止反射、序列化攻击单例?

5. 注解

注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记。程序可以利用ava的反射机制来了解你的类及各种元素上有无何种标记,针对不同的标记,就去做相
应的事件。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。

6. 泛型

泛型是为了参数化类型。

为什么使用泛型?

  1. 相对于使用Object这种简单粗暴的方式,泛型提供了一种参数化的能力,使得数据的类型可以像参数一样被传递进来,这提供了一种扩展能力。
  2. 当数据类型确定以后,提供了一种类型检测机制,只有相匹配的数据才可以正常赋值,否则编译错误,增强了安全性。
  3. 泛型提高了代码的可读性,不必等到运行时采取执行类型转换,在编写代码阶段,程序员就可以通过参数书写正确的数据类型。

除了用 表示泛型外,还有 <?> 这种形式。? 被称为通配符。
• 被称作无限定的通配符。
• 被称作有上限的通配符。
• 被称作有下限的通配符。

Java里的反射为何会消耗性能?

反射慢主要因为反射是动态类型,导致没办法运用JVM的一些优化措施。

Java的类型擦除,知道它的原理吗?

泛型信息只存在代码编译阶段,在进入JVM之前,与泛型相关的信息都会被擦除掉。