java环境
JDK
Java Development Kit java开发者工具
运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre
jdk里的javac.exe是开发者需要,用户不需要的
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运行环境
JRE
Java Runtime Environment java运行时环境
目录:jdk->jre
JVM
Java Virtual Machine java虚拟机
-
目录:jdk->jre->bin===jvm
-
目录:jdk->jre->lib===jvm需要的类库
-
bin + lin===JRE
JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
JDK卸载
- 删除java安装目录
- 环境变量里删除JAVA_HOME
- 删除path下关于java的目录
- 查看java版本:java -version
JDK安装
环境变量配置
- 环境变量->系统变量
- 新建->变量名:JAVA_HOME,变量值:jdk安装路径
- Path新增
- %JAVA_HOME%\bin
- %JAVA_HOME%\jre\bin
程序运行机制
源程序(.java)----编译器--->字节码文件(.class)---类加载器,字节码校验器,解释器--->操作系统平台
-
加载:类加载器(ClassLoader)和子类把编译好的.class文件读入内存(通常创建字节数组读入.class文件),产生与被加载器对应的Class对象
-
连接
- 验证:确保类信息符合jvm规范,安全
- 准备:为静态变量分配内存并设置默认的初始值
- 解析:符号引用(常量名)替换为直接引用(地址)
-
初始化:有直接父类,先初始化父类,依次执行其他初始化语句
-
执行类构造器clinit方法,收集类中所有类变量赋值动作和静态代码块中的语句合并起来(类构造器是构造类信息)
-
父类没有初始化就先初始化父类
-
类的主动引用:会发生类的初始化
- 先初始化main
- new 对象
- 调用类的静态成员(除了final常量)和静态方法
- Class.forName反射调用
- 父类没有初始就先初始化父类
-
类的被动引用,不会发生类的初始化
- 通过子类引用父类的静态变量,不会导致子类初始化
- 通过数组定义类引用,不会发生此类初始化
- 引用常量不会发生类初始化(常量在连接阶段就存入调用类的常量池中了)
-
-
虚拟机会保证一个类的clinit方法在多线程环境中被正确加锁和同步
-
-
类加载器
自定义类加载器->系统类加载器->扩展类加载器->根加载器(c/c++)->
//1.系统类加载器
ClassLoader sysCl=ClassLoader.getSystemClassLoader();
//2.系统类加载器的父类->扩展类加载器
ClassLoader parent=sysCl.getParent();
//3.扩展类加载器的父类->根加载器(引导类加载器)
ClassLoader parent1=parent.getParent();//c/c++开发,无法获得,null
//系统类加载可以加载的路径:
System.getProperty("java.class.path");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY