https://www.yuque.com/docs/share/31deed7b-935a-4cf7-bcf3-8107bee40404?#0ea5e531
1. 面向对象
封装,继承,多态
- 多态是指父类的某个方法被子类重写时,可以产生自己的功能行为,同一个操作作用于不同对象,可以有不同的解释,产生不同的执行结果。
- 静态方法与静态成员变量可以被继承,但是不能被重写。它对子类隐藏,因此静态方法也不能实现多态
- 为什么Java里的匿名内部类只能访问final修饰的外部变量?
1 | 因为匿名内部类最终用会编译成一个单独的类,而被该类使用的变量会以构造函数参数的形式传递给该类,例如:Integer paramInteger, |
- 描述一下Java的异常体系?
- Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时, Java虚拟机(JVM)一般会选择线程终止。
- Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常,程序中应当尽可能去处理这些异常。运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,
这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的, 程序应该从逻辑角度尽可能避免这类异常的发生。
2. 设计模式
3. 集合框架
ArrayList , LinkedList , HashMap , LinkedHashMap , SparseArray , ArrayMap ,
HashMap中的名词解释
HashMap源码解析
4. 反射
反射慢主要因为反射是动态类型,导致没办法运用JVM的一些优化措施。
- 如何防止反射、序列化攻击单例?
5. 注解
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记。程序可以利用ava的反射机制来了解你的类及各种元素上有无何种标记,针对不同的标记,就去做相
应的事件。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
6. 泛型
泛型是为了参数化类型。
为什么使用泛型?
- 相对于使用Object这种简单粗暴的方式,泛型提供了一种参数化的能力,使得数据的类型可以像参数一样被传递进来,这提供了一种扩展能力。
- 当数据类型确定以后,提供了一种类型检测机制,只有相匹配的数据才可以正常赋值,否则编译错误,增强了安全性。
- 泛型提高了代码的可读性,不必等到运行时采取执行类型转换,在编写代码阶段,程序员就可以通过参数书写正确的数据类型。
除了用 表示泛型外,还有 <?> 这种形式。? 被称为通配符。
• 被称作无限定的通配符。
• 被称作有上限的通配符。
• 被称作有下限的通配符。
Java里的反射为何会消耗性能?
反射慢主要因为反射是动态类型,导致没办法运用JVM的一些优化措施。
Java的类型擦除,知道它的原理吗?
泛型信息只存在代码编译阶段,在进入JVM之前,与泛型相关的信息都会被擦除掉。