总结java面试知识点
Java
一门面向对象编程语言 功能强大 简单易用
继承: 子继承父
封装:就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口
多态:允许不同子类型的对象对同一消息作出不同的响应 用同样的对象引用调用同样的方法但是做了不同的事情
方法重载实现的就是编译时的多态
方法重写实现的是运行时的多态
四大特性 就加上抽象
goto 和 const 是目前无法使用的关键字
==与equals的区别
最大的区别就是一个是方法 一个是运算符
基础数据类型 ==比较的是数值是否相等
引用类型 ==比较的是对象的地址值是否相等
equals 用来比较方法两个对象的内容是否相等
break 和 continue都是用来控制循环的语句
break 用于完全结束一个循环 跳出循环体执行循环后面的语句
continue 用于跳出本次循环 执行下次循环
空指针异常 下标越界异常 安全异常 算术异常 类转换异常 非法参数异常
error 和 exception 父类都是throwable类
throw 语句在方法体内 表示抛出异常 由方法体内的语法处理
throws 语句在方法声明后面 表示抛出异常 由该方法的调用者来进行异常的处理
final 修饰的类不可继承
finally 异常处理语句结构的一部分 表示总是执行
finalize 方法
String 的length方法 与编码有关
获取时间
Calendar
get(Calendar.year)
获取从 1970 年 1 月 1 日 0 时 0 分 0 秒到现在的毫秒数
Calendar.getInstance().getTimeInMillis()
String 是引用类型,底层是char数组实现
String类的常用方法
length 获取字符串长度
indexof 查找第一次出现的位置
lastindexof 查找最后一次出现的位置
trim 返回去除前后空格的字符串
equals 将该字符串与指定对象比较 返回true或false
toLowerCase 大写
toUpperCase 小写
charAt 获取字符串指定位置的字符
split 割为子字符串 返回字符串数组
ArrayList 内部是用object[]实现的
Array 数组 固定大小
ArrayList 底层结构是数组 访问快 增删慢 可动态扩容
LinkedList 底层结构是链表型 增删块 访问慢
Voctor 底层结构是数组 线程安全的 增删慢 查询慢
如何实现 Array 和 List 之间的转换?
Array 转 List: Arrays. asList(array) ;
List 转 Array:List 的 toArray() 方法。
HashMap 是线程不安全 是一个接口 Map的一个子接口
是将键映射到值的对象,不允许键值重复 允许空键和空值
由于非线程安全 HashMap的效率要比HashTable的效率高一些
HashTable 是线程安全的一个集合
不允许null 值作为一个key值或者Value值
间接相互制约可以称为互斥 直接相互制约可以称为同步
线程池 事先将多个线程对象放到一个容器中 当使用的时候就不用new线程 而是去池中拿线程即可
节省开辟子线程的时间 提高代码执行效率
启动一个线程是调用start()方法 run()方法是线程启动后要进行回调的方法
多线程
实现一
继承 Thread类
start()启动方法
多线程中 main方法和 Thread类的run方法同时运行互补影响
实现二
实现Runnable接口
重写run方法
.currentThread方法 //获取当前run方法的线程
.getName方法 //获取当前线程的名称
wait()和sleep()方法的本质区别:
1、sleep是Thread类的方法,wait是Object类中定义的方法,两个方法都会影响线程的执行行为,但是本质上是有区别的
2、wait():当线程等待状态为真,其他程序申请线程时,该线程会释放线程锁;如果该线程调用notify()方法,本线程会进入对象锁定池准备,获取对象锁进入运行状态。
3、.sleep();程序暂停执行指定的时间,释放cpu资源,在调用sleep()方法的过程中,线程不会释放对象锁。当指定时间到了,就会自动恢复运行状态。
4、sleep()方法可以在任何地方使用;wait()方法则只能在同步方法或同步块中使用;
控制线程 sleep(long m