Java原子性操作:
- 除了long和double之外的基本类型的赋值操作
- 所有引用reference的赋值操作
- java.concurrent.Atomic.*包中所有类的一切操作
Java异常类
- Error: 不希望由程序捕获或者是程序无法处理的错误,由Java虚拟机生成并抛出
- Exception: 需要被try catch捕获或者throws抛出
- throws: 方法名上声明要抛出异常
- throw: 方法内抛出异常
- 子类重写父类方法时异常类型要与父类方法一致或者是其子类
final重写
class Car extends Vehicle
{
public static void main (String[] args)
{
new Car(). run();
}
private final void run()
{
System. out. println ("Car");
}
}
class Vehicle
{
private final void run()
{
System. out. println("Vehicle");
}
}
虽然Vehicle的run方法被final修饰,但是其是private方法,因此Car无法继承该方法,因此直接运行Car的run方法没有错
try-catch-finally
- 必须在 try 之后添加 catch 或 finally 块。try 块后可同时接 catch 和 finally 块,但至少有一个块。
- 必须遵循块顺序:若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。
- catch 块与相应的异常类的类型相关。
- 一个 try 块可能有多个 catch 块。若如此,则执行第一个匹配块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或 其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块
- 可嵌套 try-catch-finally 结构。
- 在 try-catch-finally 结构中,可重新抛出异常。
Object类
默认方法: getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(), wait(), finalize()
floor/ceil/round方法
Math.floor(-4.2) = -5.0
Math.ceil(-4.2) = -4
Math.round(-4.6) = -5 | Math.round(-4.5) = -4
Main函数
问: jre 判断程序是否执行结束的标准是?
Servlet
object类
Object o = 'f';//正确,'f'自动转换为包装类,包装类继承Object
Double d = 100;//错误,自动装箱类型不匹配,100自动装箱为Integer
JVM运行时内存
哈希冲突解决方法
- 开放地址法
- 链地址法
- 二次哈希
- 建立公共溢出区
HashMap
HashMap底层使用数组+链表+红黑树(JDK1.8)实现
- 当前索引数组为空,则将键值对以链表形式插入。
- 当前索引数组已经存在,则判断当前链表是红黑树还时链表,然后插入。如果是链表插入到最后一个,判断长度是否大于8,大于8将链表转成红黑树。
- 使用链地址法解决冲突
Java关键字
true、false、null都不是关键字
goto、const都是保留的关键字
abstract continue for new
switch default if package
synchronized do goto private
this break double implements
protected throw byte else
import public throws case
enum instanceof return transient
catch extends int short
try char final interface
static void class finally
long strictfp volatile const
float native super while
boolean assert
类型转换
// boolean 类型不能强制转换为其他类型
int other = (int)true;
// += 有自动强转的效果
byte a = 1;
byte b = 1;
// a + b会被装换被int,导致左边byte,右边int
a = a + b;
// 可以改为
a += b;a = (byte)a + b;