JAVA基础知识
1. 八种数据类型
| 数据类型 | 包装类 | 字节 | 示例 |
|---|---|---|---|
| double | Double | 8位 | 0.0D |
| float | Float | 4位 | 0.0F |
| long | Long | 8位 | 1L |
| int | Integer | 4位 | 1 |
| short | Short | 2位 | (short)1 |
| byte | byte | 1位 | (byte)0 |
| char | Character | 2位 | null\u0000 |
| boolean | Boolean | -- | false |
2.引用数据类型
- 类
- 接口
- 数组
3.Switch是否可以使用String作为参数
Jdk7.0 之前 byte short char int 可以强转
Jdk7.0 之后 整形 枚举类型 boolean 字符串都可以
4.equals与==的区别
== 比较的是对象的地址
equals 比较的时间对象的内容
5.自动装箱 ,常量池
自动装箱: 基本数据类型=>对象类型
自动拆箱: 对象类型=>基本数据类型
常量池:Byte Short Integer Long Character 在自动装箱时对于值从-128-127之间的值(共享),会在内存中被重用
6.Object有哪些公用方法
- clone()
- hashCode()
- equals()
- notify()
- wait()
- notifyAll()
- getClass()
- toString()
- finalize()
7.Java的四种引用
- 强引用: 使用普遍的引用,内存空间不住了,一般垃圾和回收期绝不会回收它
- 软引用: 弱引用可用来实现内存敏感的高速缓存,内存空间不足了,就会回收这些对象的内存
- 弱引用: 具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存
- 虚引用: 虚引用并不会决定对象的生命周期.如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收
8.HashCode的作用
Java中的hashCode方法就是根据一定的规则将与对象相关的信息(对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值,降低equals的调用,实现存放的值不会重复
9.ArrayList、LinkedList、Vector的作用
| 名称 | 线程是否安全 | 实现方式 | 扩容 | 适合 |
|---|---|---|---|---|
| ArrayList | 不安全 | 数组 | 自动扩容50% | 查找 |
| LinkedList | 不安全 | 链表 | 删除 | 插入 |
| Vector | 安全 | 数组 | 自动扩容100% | 查找 |
10.String StringBuffer StringBuilder
| 名称 | 线程是否安全 | 描述 | 对象信息 | 适合 | 补充说明 |
|---|---|---|---|---|---|
| String | -- | final修饰的字符串常量 | String对象一旦创建之后是不可更改的 | -- | |
| StringBuffer | 安全 | 字符串常量 | 对象可变 | 适合多线程下字符串缓冲区大量操作 | 继承AbstractStringBuilder 容量为16 |
| StringBuilder | 不安全 | 字符串常量 | 对象可变 | 适合单线程下字符缓冲区大量操作 | 继承AbstractStringBuilder 容量为16 |
11.Map Set List Queue Stack的特点与用法
| 名称 | 实现方式 | 线程是否安全 | 描述 | 是否有序 |
|---|---|---|---|---|
| HashMap | 键值对 | 不安全 | 不能存储null值 | 无序 |
| HashTable | 键值对 | 安全 | 可以存储null值 | 无序 |
| TreeMap | 键值对 | 有序 | ||
| ArrayList | 数组 | 不安全 | ||
| LinkedList | 链表 | 不安全 | ||
| Vector | 数组 | 安全 | ||
| Stack | 后进先出的栈 |
12.Collection与Collections的区别
Collection是各种集合结构的父接口
Collections包含有各种有关集合操作的静态方法
13.try?catch?finally执行
finally 中的return也会执行 除非中途遇到JVM退出
14.Exception和Error
两者都是Throwable的子类
Exception 之处了合理的应用程序想要捕获的条件
Error用于只是合理的应用程序不应该视图捕获的严重问题.大多数这样的错误都是异常条件
OOM中
- Java heap溢出
- 虚拟机栈和本地方法栈溢出
- 运行时常量池溢出
- 方法溢出
SOF(StackOverflowError) 当应用程序递归太深发生堆栈溢出时,抛出该错误
15.OOP的三个特征和含义
封装: 可见性封装,set get读写,将类的某些特征隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的访问和操作
继承: 子类继承父类,可以得到父类的全部属性和方法(除了父类中的构造方法),JAVA中的多继承可以通过接口来实现
多态: 已是编译时多态,另外一种是运行时多态,编译时多态通过方法的重载来实现,运行时多态通过方法的重写来实现
16.重载(Override)和重写(Overload)
| 名称 | 描述 | 相同 | 不同 |
|---|---|---|---|
| 重写(Override) | 子类覆盖父类的方法子类抛出的异常不能超过父类响应方法抛出的异常子类方法的访问级别不能低于弗雷响应方法的访问级别 | 返回类型|参数|参数类型|抛出异常 | |
| 重载(Overload) | 方法名 | 参数个数|参数数量 |
17.interface与abstract类的区别
| 名称 | interface | abstract |
|---|---|---|
| 构造方法 | -- | 有 |
| 普通成员变量 | -- | 有 |
| 非抽象的普通方法 | -- | 有 |
| 静态方法 | -- | 有 |
| 静态成员变量 | 只能切默认为public static final | 任意类型 |
| 访问类型 | 只能为public 默认为public abstract | public protected |
| 继承与实现 | 一个类可以实现多个接口 | 单继承 |
18.静态内部类和非静态内部类
| 名称 | static class | not static class |
|---|---|---|
| 指向外部类的引用 | 需要 | 不需要 |
| 描述 | 可以访问外部类的静态成员不能访问外部类的非静态成员 | 访问外部类的静态和非静态成员 |
19.foreach和for
对于数组 相差不大
对于链表 for循环效率比foreach低
20.IO与NIO
| 名称 | IO | NIO |
|---|---|---|
| 是否阻塞 | 阻塞 | 非阻塞 |
| 面向 | 流 | 缓冲区(块) |
| 描述 | 管道(Channel) 缓冲(Buffer) 选择器(Selector) | |
| 应用 | 少连接 大数据 | 多连接 少数据 |
21.XML解析方式
DOM: 将整个XML文档转化成DOM树存放在内存中
SAX: 采用事件驱动,通过事件处理函数实现对XML文档的访问