JDK 和 JRE 、final 与 static 、堆和栈

一、JDK 和 JRE 的区别?
JDK:java development kit (java开发工具)

JRE:java runtime environment (java运行时环境)

JVM:java virtuak machine (java虚拟机)

1、jdk--开发环境(核心)
Java development kit的缩写,意思是Java开发工具,我们写文档做PPT需要office 办公软件,开发当然需要开发工具了,说到开发工具大家肯定会想到Eclipse,但是如果直接安装Eclipse你会发现它是运行不起来 是会报错的,只有安装了JDK,配置好了环境变量和path才可以运行成功。这点相信很多人都深有体会。

jdk主要包含三个部分:

第一部分是Java运行时环境,JVM

第二部分是Java的基础类库,这个类库的数量还是相当可观的

第三部分是Java的开发工具,它们都是辅助你更好地使用Java的利器

2、jre--运行环境
① jdk中的jre

如下图:jdk中包含的jre,在jre的bin目录里有个jvm.dll,既然JRE是运行时环境,那么运行在哪?肯定是JVM虚拟机上了。另,jre的lib目录中放的是一些JAVA类库的class文件,已经打包成jar文件。

② 第二个JRE(独立出来的运行时环境)

如下图,不管是JDK中的JRE还是JRE既然是运行时环境必须有JVM。所以JVM也是有两个的。

3、JVM——转换环境
java virtuak machine (java虚拟机)的缩写。

大家一提到JAVA的优点就会想到:一次编译,随处运行,说白了就是跨平台性好,这点JVM功不可没。

Java的程序也就是我们编译的代码都会编译为class文件,class文件就是在jvm上运行的文件,只有JVM还不能完全支持class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。

JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改的运行。

JVM也是一门很深的学问,感兴趣的同学可以深入研究,只有好处,没有坏处。

其实有时候面试官问JDK和JRE的区别的目的不是想让你解释什么名词的,而是想看看你的基础和研究Java的深浅,还有另一方面就是你是不是经常喜欢问为什么。
尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili

package org.example.printABC; public class syncPrint { private static Object lock = new Object(); private static int state = 0; public void print(char c,int n, int orderNum){ for (int i = 0; i < n; ) { try{ synchronized (lock){ while (state % 3 != orderNum){ lock.wait(); } System.out.printf(Thread.currentThread().getName() + ": " + c); state++; i++; } } catch (InterruptedException e) { throw new RuntimeException(e); } finally { lock.notifyAll(); } } } public static void main(String[] args) { syncPrint syn = new syncPrint(); new Thread(()->syn.print('A',10, 0)).start(); new Thread(()->syn.print('B',10, 1)).start(); new Thread(()->syn.print('C',10, 2)).start(); } } D:\java\jdk\bin\java.exe "-javaagent:D:\IntelliJ IDEA Community Edition 2024.2.3\lib\idea_rt.jar=55740:D:\IntelliJ IDEA Community Edition 2024.2.3\bin" -Dfile.encoding=UTF-8 -classpath D:\java\jdk\jre\lib\charsets.jar;D:\java\jdk\jre\lib\deploy.jar;D:\java\jdk\jre\lib\ext\access-bridge-64.jar;D:\java\jdk\jre\lib\ext\cldrdata.jar;D:\java\jdk\jre\lib\ext\dnsns.jar;D:\java\jdk\jre\lib\ext\jaccess.jar;D:\java\jdk\jre\lib\ext\jfxrt.jar;D:\java\jdk\jre\lib\ext\localedata.jar;D:\java\jdk\jre\lib\ext\nashorn.jar;D:\java\jdk\jre\lib\ext\sunec.jar;D:\java\jdk\jre\lib\ext\sunjce_provider.jar;D:\java\jdk\jre\lib\ext\sunmscapi.jar;D:\java\jdk\jre\lib\ext\sunpkcs11.jar;D:\java\jdk\jre\lib\ext\zipfs.jar;D:\java\jdk\jre\lib\javaws.jar;D:\java\jdk\jre\lib\jce.jar;D:\java\jdk\jre\lib\jfr.jar;D:\java\jdk\jre\lib\jfxswt.jar;D:\java\jdk\jre\lib\jsse.jar;D:\java\jdk\jre\lib\management-agent.jar;D:\java\jdk\jre\lib\plugin.jar;D:\java\jdk\jre\lib\resources.jar;D:\java\jdk\jre\lib\rt.jar;C:\Users\80389738\IdeaProjects\test\target\classes org.example.printABC.syncPrint Thread-0: AThread-1: BException in thread "Thread-0" Exception in thread "Thread-1" java.lang.IllegalMonitorStateException at java.lang.Object.notifyAll(Native Method) at org.example.printABC.syncPrint.print(syncPrint.java:21) at org.example.printABC.syncPrint.lambda$main$1(syncPrint.java:30) at java.lang.Thread.run(Thread.java:748) java.lang.IllegalMonitorStateException at java.lang.Object.notifyAll(Native Method) at org.example.printABC.syncPrint.print(syncPrint.java:21) at org.example.printABC.syncPrint.lambda$main$0(syncPrint.java:29) at java.lang.Thread.run(Thread.java:748) 进程已结束,退出代码为 130
07-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值