1、子类父类代码块执行顺序
父类静态代码块 、子类静态代码块
父类非静态代码块、父类构造函数
子类非静态代码块、子类构造函数
2、初始化过程顺序
父类中的静态成员变量和静态代码块
子类中的静态成员变量和静态代码块
父类中普通成员变量和代码块,再执行父类的构造方法
子类中普通成员变量和代码块,再执行子类的构造方法
3、ArrayList和LinkList区别
ArrayList实现了基于动态数据的数据结构,对于访问set和get占优,便于查询
LinkList实现了基于链表的数据结构,对于新增和删除操作比较占优
4、HashMap(非线程安全)
key-value都是存储在Entry数组中
HashMap实际上是一个“散链表”的数据结构,是数组和链表的结合体,并允许使用null值和null键。它的底层是一个数组结构,数组的每一项是一个链表,当新建一个HashMap时,就会初始化一个数组。
5、在socket编程中
getInetAddress():获取主机名和IP地址
getLocalAddress():获取本地IP地址
getReuseAddress():复用地址,返回布尔类型
6、一般关系数据模型和对象数据模型之间有以下对应关系
表对应类
记录对应对象
表的字段对于类的属性
7、Java引用类型
强引用:一直存在
软引用:内存不足时回收
弱引用:JVM开始进行垃圾回收时回收
虚引用:随时可能被回收
8、full GC出发条件
老年代满:循环上万的字符串处理;不断创建对象;在一段代码内申请上百M的内存
持久代满:动态加载了大量Java类而导致溢出
System.gc() 显示调用
上一个gc后个heap的各域分配策略动态变化
9、反射
class类在java.lang包下
动态代理可以通过接口与类实现,通过反射形成新的代理类,该代理类增强了原来的类方法
反射可以强制访问private类型和成员变量
反射并不能对类进行修改,只能对类进行访问
反射机制对永生堆要求较多
即使使用缓存,反射的效率也比调用类的方法低
java反射机制使用 java.lang.class 或 java.lang.reflect.Constructor 的 newInstance()方法时被调用
10、构造器的执行
(构造器方法的优先级比一般代码块低)
new关键字自动调用
类内部 this.构造方法名()
子类 super.父类构造方法名()
反射机制对于任意一个类,都能知道类的所有属性和方法,包括构造方法
11、多个catch语句应该把父类放后面,子类放在前面
例如:
catch(FileNotFoundException)
catch(IOException)
catch(Exception)
12、拆箱问题
包装类“==”运算遇到算术运算的情况下不会自动拆箱
包装类“equals()”方法不处理数据转型
Integer和int类型在==比较时会自动拆箱
Long与long进行==比较时也会自动拆箱
不同类型之间进行比较,如果一方为包装类,则会自动拆箱,如果两方都为包装类,则不会拆箱,且不能比较,编译会报错