JAVA特性

面向对象

GC,自动管理内存

平台无关, 一次编译,到处运行

编译型加解释型,编译成 .class 由JVM解释运行运行。

减少代码效验速度。

Java 编译型和解释型并存

解释型: 源代码翻译一句执行一句。

编译型: 源代码 → 二进制可执行程序→ 再执行。省去动态解释过程。

传统是编译成字节码,JVM再逐行解释为机器码。JIT 将热点机器码保存下来,不需要再进行解释,直接执行。

使用 javap -c 包名

java → class→java for windows(JVM→ 机器码)

JVM 如何加载 .class 文件

class Loader 加载到 (Runtime Data Area)内存中, execution engine 解析命令, native interface(加载 native 方法)

反射

在运行状态中,知道类的所有方法和属性,并可以调用。

public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        Class rc = Class.forName("com.interview.javabasic.reflect.Robot");
        Robot r = (Robot) rc.newInstance();
        System.out.println("Class name is " + rc.getName());
        Method getHello = rc.getDeclaredMethod("getHello", String.class);
        getHello.setAccessible(true);
        Object str = getHello.invoke(r,"Bobs");
        System.out.println("getHello result  is "+ str);
        Method sayHi = rc.getMethod("sayHi", String.class);
        sayHi.invoke(r, "Welcome");
        Field name = rc.getDeclaredField("name");
        name.setAccessible(true);
        name.set(r, "Alice");
        sayHi.invoke(r, "Welcome");
    }