java基础
安全性
java不支持指针,不能访问程序以外的资源
面向对象
- 封装:代码和数据结合起来,封装单元是类。
- 多态:允许一个接口访问一类动作,接口有多个实现。
- 继承:一个对象获取另一个对象属性,方法。
数据类型
类型 | 占用2进制位数 | 范围 |
---|---|---|
byte | 8 | -27~2-1 (128) |
short | 16 | -215~215-1 (32768) |
int | 32 | -231~231-1 (214...) |
long | 64 | -263~263-1 (922...) |
float | 32 | - |
double | 64 | - |
char | 8 | - |
关键字
标志符
开头:字母,美元符,下划线
后面:数字,字母,美元符,下划线
切记不能以数字开头
集合与数据结构
IO和网络
多线程(并发与锁,死锁)
异常
简单算法,复杂度
JVM
类文件结构
类加载
字节码执行引擎
- MethodHandle 模拟 invokevirtual 实现动态方法调用
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
/**
* @author :Created By huan
* @date :Created in 11/13/19 12:16 PM
*/
public class MethodHandleTest {
static class ClassA {
public void println(String s) {
System.out.println("ClassA:" + s);
}
}
public static void main(String[] args) throws Throwable {
Object obj = System.currentTimeMillis() % 2 == 0 ? System.out : new ClassA();
getPrintlnMH(obj).invokeExact("hello");
}
public static MethodHandle getPrintlnMH(Object reveiver) throws NoSuchMethodException, IllegalAccessException {
MethodType methodType = MethodType.methodType(void.class, String.class);
return MethodHandles.lookup().findVirtual(reveiver.getClass(), "println", methodType).bindTo(reveiver);
}
}