1、Java简介+DOS命令+java的编译运行(字节码/机器码、JRE/JVM/JDK/JIT的区别)+一个简单的Java程序

news2024/9/20 5:28:14

前言:本文属于黑马程序员和javaguide的混合笔记,仅作学习分享使用,建议感兴趣的小伙伴去看黑马原视频或javaguide原文。如有侵权,请联系删除。

Java类型:

  • JavaSE 标准版:以前称为J2SE,主要用来开发桌面应用程序或简单的服务器应用程序。
  • JavaEE 企业版:建立在 Java SE 的基础上,包含了支持企业级应用程序开发和部署的标准和规范(如Servlet、Jsp、JDBC、JPA等),以前称为J2EE。 可以用于构建分布式、可移植、健壮安全的服务端 Java 应用程序,例如 Web 应用程序。
  • JavaME 微型版:以前称为J2ME,主要用于开发嵌入式设备的应用程序

java语言特性:

底层:C++编写

最重要的特性如下:

  • 可移植性(可移植到如Linuxwindows等不同的系统,其中通过JVM,即Java虚拟机实现)
  • 编译与解释并存
  • 面向对象(封装、继承、多态)
  • 安全性(防范运行时堆栈溢出,未经授权读写文件,破坏自己的进程空间之外的内存等)
  • 支持多线程(最开始的C++ 语言没有内置的多线程机制)

其他特性如下(主要是和C++比,毕竟底层是C++编写的,两者都是面向对象的语言):

  • java类内只有单继承,但支持接口之间的多继承。 C++支持多重继承。
  • java无指针。 所以不能用指针直接访问内存,内存更安全。
  • java无操作符重载,只支持方法重载。C++支持操作符和方法重载。
  • java具有可靠性,具备自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。

DOS命令:

window+R+cmd+回车 启动DOS窗口

清屏 cls

复制 选择任意内容 即可复制成功

显示该路径下所有子路径 dir

切换路径 cd(后面如果直接加文件名,则不能是上级路径。如果要访问上级路径,需要输入访问的文件的绝对路径)

相对路径:表示该路径将当前所在的路径作为出发点的路径

如:34519\Pictures>

绝对路径:表示该路径将某个磁盘的盘符下作为出发点的路径

如:C:\Users\34519\Pictures>

返回上级 cd ..

返回根目录 cd \

切换盘符 c:d:

java的编译与运行

一段java代码的编译与运行全流程如下:
在这里插入图片描述

.javajava源文件
.class:可以看作类文件,或者说字节码文件(并不是纯粹的二进制文件)
机器码:机器可理解的代码,纯二进制文件。

那么首先就是.java文件通过javac编译生成多个.class文件,即字节码文件。然后启动JVMJVM启动类加载器ClassLoader。后者去搜索.class文件并将其装载到JVM中。最后转为机器码由操作系统识别并运行。

机器码 vs 字节码

由上述过程可以看到机器码和字节码是不同的东西,可以看成:.class文件 = 字节码 ≠ 机器码

java编译(主要用JDK编译)

JDK(java开发工具包)

JDK是一个功能齐全的 Java 开发工具包,供开发者使用,用于创建和编译 Java 程序。它包含了 JRE,以及编译器 javac 和其他工具,如jdb(调试器)、javap(反编译工具)等。
不同编程语言(JavaGroovyKotlin…)有各自的编译器,如下:
在这里插入图片描述

java解释(主要用JVM解释)

JVM(Java 虚拟机)

是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(WindowsLinuxmacOS),目的是使用相同的字节码,它们都会给出相同的结果(机器码),这也是 Java 语言**“一次编译,随处运行”**的关键所在。

具体来说是 JVM 启动 类加载器 Class Loader,首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了 JIT(Just in Time Compilation) 编译器,而 JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言

在这里插入图片描述
请注意:JVM 并不是只有一种!只要满足 JVM 规范,每个公司、组织或者个人都可以开发自己的专属 JVM。 也就是说我们平时接触到的 HotSpot VM 仅仅是是 JVM 规范的一种实现而已。

JRE(Java运行环境)

JRE 是运行 .class文件所需的环境,主要包含以下两个部分:JVMJava 基础类库(Class Library

JVM 也就是我们上面提到的 Java 虚拟机。
Java 基础类库:一组标准的类库,提供常用的功能和 API(如 I/O 操作、网络通信、数据结构等)。

JVM vs JDK vs JRE vs JIT

所以,关系最终总结如下:
在这里插入图片描述

在这里插入图片描述

一个简单的Java程序的特点:

每个文件只能包含一个public类(也可以没有),如果有,源文件名与该public类的名字相同。
主类是指包含main方法的类,自身不一定要是public类。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2097037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握一招:‌输入什么命令,‌轻松查看电脑IP地址?‌

在日常使用电脑的过程中,‌无论是进行网络设置、‌远程连接还是解决网络问题,‌了解并查看自己的电脑IP地址都是一项基础且重要的操作。‌对于许多用户来说,‌可能并不清楚如何快速准确地获取这一信息。‌本文将为你揭秘一个简单实用的命令&a…

【数据结构与算法】:十大经典排序算法

文章目录 前言一、冒泡排序(Bubble Sort)1.1 冒泡排序原理1.2 冒泡排序代码1.3 输出结果 二、选择排序(Selection Sort)2.1 选择排序原理2.2 选择排序代码2.3 输出结果 三、插入排序(Insertion Sort)3.1 插…

可重入VI,VI模板和动态VI之间的差异 转

可重入VI 当您想要同时运行同一VI的多个实例时,将使用可重入VI。当VI不可重入时,VI只有一个数据空间。因此,一次只能有一个调用者运行VI,因此调用者可能必须“等待轮到它”时才能使用VI。这是VI的默认选项,但您可以将V…

精通大模型:八本必读书籍,一篇搞定所有知识点!

如果你想深入了解大模型领域,无论是为了学术研究还是实际应用,选择合适的书籍是非常重要的。以下是精选的八本大模型相关书籍,涵盖了从基础理论到高级实践的内容,可以帮助你构建全面的知识体系。 《大模型应用开发极简入门》 简介…

Hadoop之HDFS的原理和常用命令及API(java)

1、简介 书接上回,上篇博文中介绍如何安装Hadoop和基本配置,本文介绍Hadoop中分布式文件组件--HDFS,在HDFS中,有namenode、datanode、secondnamenode这三个角色,本文将详细介绍这几个组件是如何进行协作的,…

PHP一键预约便捷高效咨询小程序系统源码

一键预约,开启便捷高效咨询新时代 —— 你的专属咨询小程序 🚀 【开篇:告别繁琐,拥抱便捷新体验】 在这个快节奏的时代,时间就是金钱,效率就是生命。你还在为寻找咨询服务而四处奔波,或是为了预…

社区团购小程序系统源码+界面diy+分销+团长+供应商+拼团+菜谱+秒杀+预售+配送,开启社区营销新模式

社区团购小程序类似美团优选,兴盛优选平台.是一款针对小区居民开发的在线购物平台,旨在为用户提供便捷、实惠的购物体验;同时还提供了“限时抢购”和“优惠券营销”等多种实惠的购物体验,是小区居民们的不二之选。 一、 特点与优势 社区化运…

SprinBoot+Vue健康管管理微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

k8s - Volume 简介和HostPath的使用

K8S 的持久化 K8S 实现持久化存储的方法有很多种 例如 卷 (Volume), 持久卷(PV), 临时卷(EV) 等, 还有很多不常用的选项上图没有列出来 其中Volume 本身也分很多种 包括 Secret, configMap(之前的文章covered了), hostPath, emptyDir等 本文主要focus…

[工具使用]ellisys

工具打开: 1.连接ellisys电源,ellisys Computer接口USB连接电脑,Logic接口与板子出信号的GPIO口连接 工具配置 1.点击"Configure" 2.在打开的Recording options中选择Wireless选项卡 2.选择Wired选项卡​ i.勾选Logic transit…

十五、多线程(基础)

文章目录 一、线程介绍1.1 程序1.2 进程1.3 线程 二、线程使用2.1 创建线程的两种方式2.2 继承Thread类创建线程2.3 实现Runnable接口创建线程2.4 多线程执行2.5 继承Thread vs 实现 Runnable的区别2.6 线程终止 三、线程方法3.1 常用方法3.2 用户线程和守护线程 四、线程生命周…

MindSearch CPU-only 版部署

准备 创建环境 申请获取硅基流动 API Key 测试 hugging face 上传 /workspaces/codespaces-blank git clone https://huggingface.co/spaces/<你的名字>/<仓库名称>把token挂到仓库上&#xff0c;让自己有写权限 务必先初始化 git init git remote add space h…

打架监测识别摄像机

打架监测识别摄像机 是一种基于人工智能和图像识别技术的智能监控设备&#xff0c;旨在实时监测环境中的暴力冲突和打架行为。这种摄像机通常被广泛应用于监狱、学校、公共交通和其他管理需要的场所&#xff0c;以预防和控制不良事件的发生。 打架监测识别摄像机能够自动识别出…

try里面放return,finally还会执行吗?

引言 喜欢请点赞&#xff0c;支持点在看。 关注牛马圈&#xff0c;干货不间断。 趣聊 今天&#xff0c;在与同事讨论编程语言特性时&#xff0c;我们谈到了一个有趣的话题&#xff1a;在JavaScript中&#xff0c;finally块中的return语句是否会覆盖try块中的return。我首先通过…

【STM32项目设计】STM32F411健康助手--硬件SPI (硬件NSS/CS)驱动st7735--1.8寸TFT显示屏(1)

#include "lcd_driver.h"static uint16_t SPI_TIMEOUT_UserCallback(uint8_t errorCode);//液晶IO初始化配置 void LCD_Driver_Init(void) {SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;/* 使能 LCD_SPI 及GPIO 时钟 *//*!< SPI_LCD…

程序员学CFA——财务报告与分析(七)

财务报告与分析&#xff08;七&#xff09; 存货存货的初始确认简介初始确认存货的初始入账成本费用化支出 发出存货的计量发出存货的计价方法个别计价法先进先出法后进先出法加权平均法总结对比 存货盘点方法实地盘存法永续盘存法总结归纳 后进先出法的特殊问题后进先出储备后…

安全测试|AWVS渗透测试神器工具详解,零基础入门到精通,收藏这一篇就够了

前言 Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的自动化网络漏洞扫描工具&#xff0c;它通过网络爬虫测试你的网站安全&#xff0c;检测流行安全漏洞。它可以扫描任何可通过Web浏览器访问的和遵循HTTP/HTTPS规则的Web站点和Web应用程序。适用于任何中小型和大型…

终于有人将多模态重点内容做成了动画

CLIP是入门多模态的最佳选择&#xff0c;后续多模态模型基本上都延续了它的思想&#xff1a;分别用图像编码器和文本编码器将图像和文本编码到一个共享的特征空间中&#xff0c;然后通过多模态融合方法将配对的图像文本特征向量拉进。 [1] 给定 ↳ 一个包含3个文本-图像对的小…

C++期末知识点概述

《大学 C知识点概述》 在大学的计算机课程中&#xff0c;C作为一门重要的编程语言&#xff0c;有着广泛的应用和丰富的知识点。 一、基础语法 数据类型&#xff1a;C包含多种数据类型&#xff0c;如整数类型&#xff08;int、short、long 等&#xff09;、浮点类型&#xff…

shell脚本编写之传参

我们知道命令可以带参数&#xff0c;同样脚本文件运行时也可以带有参数。 1、脚本内获取参数 脚本内获取参数的格式为&#xff1a;$n n代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数&#xff0c;以此类推。 举例&#xff0c;仍然…