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文档的访问