JDK中包含了JRE和编译java源码所需的javac编译工具,以及java程序调试和分析的工具,而JRE只是提供给了一个运行环境,如果需要编译调试和运行java程序则需要安装JDK,如果只是运行java程序,只需要安装JRE。
一次编译、处处运行?
由于jvm对于不同的系统都做了适配有不同版本的jvm,这样使得编译后的.class文件能够在不同的系统都能够运行。

图解:JDK包含JRE和JVM,JRE包含JVM ,编译生成的.class文件会交给对应的jvm,jvm会调用lib类库进行class文件的解释,将.class文件翻译成机器码,映射到操作系统,最终使java程序能够运行。
1)final修饰成员变量 (分为类变量和实例成员变量)
//定义时赋值final static int a;static {//2、在静态代码块中赋值a = 0;}
//1、定义时赋值final int b = 0;final int c;{//2、在非静态代码块中赋值c = 1;}
2)final修饰局部变量时可以不赋初值,但在使用时必须给定值。
补充:
静态代码块
属于类中的代码块,它会随着类的创建而自动执行一次,仅在类的初始化之前执行一次,可用于在类的创建之前初始化一些方法。
非静态代码块(构造代码块)
属于对象中的代码块,它会随着对象的创建而执行,并且在构造器执行前执行,只有创建对象才会触发
3)final修饰基本类型和引用类型
//1、定义时赋值final int b = 0;final int c;{//2、在非静态代码块中赋值c = 1;}