首页 > 编程语言 >java核心基础 第一章 基石篇

java核心基础 第一章 基石篇

时间:2024-12-11 09:32:16浏览次数:6  
标签:java 字节 程序 HelloWorld 第一章 JVM Java 基石

内容概述

在java的世界里,我们离不开三个核心的概念,这是java世界的基石。他们分别是java语言、JVM、JDK。

本章的学习目标是深刻理解java语言、JVM、和JDK。

并额外需要理解一个classpath这个概念。以及要知道java程序运行时都需要经历哪些环节。


前置阅读

本章涉及到的一些术语如下:

1.java源代码

使用java语言书写的内容称为java源代码。存储java源代码的文档叫做java源文件。java源文件通常以.java后缀命名。它包含了程序的逻辑和结构。源代码是人类编写的,具有可读性,使用英语单词和标准编程语法。

2.java字节码

字节码是java源代码的最终形态。字节码是可以被JVM直接执行的指令集。Java的字节码是Java源代码通过Java编译器(javac)编译后生成的一种中间代码形式。它不是特定于某一种计算机硬件的机器代码,而是一种平台无关的指令集,可以在任何支持Java虚拟机(JVM)的设备上运行。因此,Java程序具备了"一次编写,到处运行"的跨平台特性。

3.java程序

java程序其实就是字节码的集合。我们使用java语言写程序时,可能会需要写很多很多的源文件,这些源文件编译后就会产生很多的字节码文件,他们一起组成了java程序。

4.编译

编译是java开发中的一个环节,他的核心任务是把java源代码转化成java字节码。编译的过程一般会经历词法分析、语法分析、语义分析、生成字节码、验证字节码、优化字节码这几个步骤。

5.环境变量

环境变量本身是操作系统当中的一个概念,何为环境?在java开发中我们可以把我们使用的操作系统理解为环境。何为变量?他是一个标识符,它存储在操作系统里,我们可以给他设置一个字符串,作为它的值。

JAVA_HOME变量

  • 作用:指定Java开发工具包(JDK)或Java运行时环境(JRE)的安装路径。对于开发Java程序的用户和系统,设置JAVA_HOME变量可以方便程序访问JDK。
  • 示例JAVA_HOME=D:\Program Files\Java\jdk1.8.0_431
  • 常见用途JAVA_HOME也被许多Java工具(如Maven、Tomcat等)用来确定Java安装路径。

对于我们的初学者来说,可以不用太纠结这个变量的意义。


基础概念

一.java语言

即是语言,那么它的核心任务就是表达,表达什么呢?表达的是开发者的思想、解决问题的步骤和方法。那么java语言就是定义了一套如何进行这种表达的规范。这就是java语言。

二.JVM   Java Virtual Machine

全称Java Virtual Machine,翻译过来就是java虚拟机。它的核心任务是执行java程序。既然有执行程序的能力,那么它在设计上应该是与真实的计算机系统的核心是一样的。即叫它虚拟机,那么它就是用计算机程序模拟真实计算机系统的一个实现。也就是说JVM也是一个运行在真实计算机上的一个程序,这个JVM程序的任务就是运行java程序。由此可见java程序并不直接运行在真实的物理计算机上。

三.JDK Java Development Kit

全称Java Development Kit,翻译过来就是java开发工具。即是工具,那它就是服务于java开发工作的。它主要包括了以下内容:

  • 一套工具集,例如javac(编译器)、java(jvm启动器)等。
  • 一个可以运行java程序的JVM,例如hotspot虚拟机。
  • java基础库。

我们在平时的工作中可能还有遇到jre这个东西,它的全称叫做Java Runtime Environment,翻译过来就是java运行时环境。其实他就是jdk的精简版,它仅保留了一个可以运行java程序的JVM和一些运行java程序时必要的工具。它不具备开发的能力,它只能运行一个已经开发好的java程序。


实践

这里我们要写一个java程序,并编译运行它。来体会java语言、jvm、jdk他们的作用和他们之间的关系。以及运行java程序的各个环节。并引入classpath这个概念。


安装JDK

做java开发的第一个任务就是安装jdk,jdk有很多的版本,但是我们在这个阶段先不要在意其版本,可以随便找一个版本下载下来,然后把版本这个概念从你的脑海中移除掉,你就把他当作是上面讲到的JDK即可。这里我们就使用oracle维护的jdk1.8.0_431来学习,本专栏余下的章节也都基于这个jdk进行讲解。

jdk的下载,你可以自行到oracle的官网上下载,大版本选择jdk8就行。也可以从我的csdn资源上下载。下面时两种下载方式的链接

CSDN资源下载:https://download.csdn.net/download/yjy000/90100162

Oracle下载:Java Downloads | Oracle Australia

注意去oracle官网下载最好下载压缩版,这样在后面的讲解中能更具象的认识jdk。下载下来后是下面这样一个zip压缩包,里面包含了jdk所有的内容。

a80e49b1125a42539cd390f2639d668a.png

现在我们把这个文件解压一下看看里面的目录结构。

00f8b3631d6743df89ba6bd431549d72.png

jdk提供的工具都在bin目录下。

安装jdk其实就是把压缩包里面的内容解压出来,就安装成功了。为了方便使用,我们需要配置一下环境变量,以便我们能够在任何地方打开一个命令行就能使用jdk提供的各种工具了。

下面我们来简单配置一下这个刚下载下来的jdk

配置环境变量PATH

PATH是操作系统里面的一个标准的环境变量,他是干什么用的呢?当我在命令行里输入一个程序名称时,比如我输入javac这个程序,那么操作系统去哪里找这个程序呢?就是通过PATH指定的一系列路径里去搜索,找到了就执行这个程序,找不到就会提示错误信息。

所以配置环境变量的目的仅仅是为了方便使用,不要把他想的太复杂。配置环境变量后,我们在任何地方随便打开一个命令行输入java命令都可以成功执行,如果不配置的话,你想要执行java命令就得输入它的绝对路径。仅此而已。

现在我们把刚才解压的jdk的路径添加到PATH这个变量里面去,特别注意要在你解压的路径后面加上\bin,因为jdk提供的工具都在这个bin目录下。

12cfba74d0df4300910e267f3d15584b.png

然后一路点击确定。然后我们打开命令行,在里面输入java -version,观察其输出。

3ff5fa72b5b441578713cd5108512a50.png

可以看到是我们刚才下载的那个版本。说明jdk安装成功。接下来我们要开发一个java程序。


用java语言写代码

我们创建一个干净的空目录。如下:

E:\jcourse\lession1

我们在这个目录里创建一个HelloWorld.java的源文件

aff78ffab9214811945cf07338f5a4f4.png

然后在这个文件里输入以下内容,保存。这里我们不深入探讨java的语法与书写规则,如果你是零基础的话,这里直接复制粘贴进去就行,关于语法与程序结构相关的内容我们将再第二章详细讲解。这里我们只是通过这个程序来了解JDK、JVM、和java语言之间的关系,以及他们是如何配合运作的。

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

代码解析:

public class HelloWorld        定义一个名为HelloWorld的类

public stati void main(String[] args)        定义了一个main方法。

System.out.println("HelloWorld!")        向命令行窗口打印HelloWorld!字符串。

main方法是Java程序执行的入口。

编译HelloWorld.java

java源代码是无法被直接运行的,我们要想在JVM中运行我们写的程序就必须把我们写的源代码转化成java字节码,这是通过编译这一步来完成的,编译源代码我们需要用到一个工具,叫做java编译器,这个编译器是JDK提供的,它就是javac.exe程序,存在于jdk的bin目录下。

f6ac1f3c9346455f85d5f17a95f02b41.png

编译一个java源文件很简单,只需要输入以下命令即可:

javac HelloWorld.java

我们必须要进入到HelloWorld.java所在的目录执行如下的命令,当然如果你不进入到这个目录下你就需要输入HelloWorld.java的完整的绝对路径。

c98301fee1c749c286b5eed090157539.png

可以看到命令执行完成后没有任何的输出,说明编译成功了,在这个目录下会生成一个HelloWorld.class文件,.class文件里存储的内容就是java字节码。

283e3d5d22ff4430a429cdcd8874f009.png

现在我们的第一个java程序就开发完成了,它只包含了一个HelloWorld.class文件。现在我们就要来执行这个程序了。


执行java程序

要想运行我们写的程序,我们就必须启动一个JVM,在jdk的bin目录下有一个java.exe程序,这就是用来启动JVM的启动器。

58b38448540a4885aa9a67711ac8b9c3.png

JVM运行一个java程序,他都干了些什么。

我们说过java程序就是字节码的集合,那么很明显JVM要想运行这些字节码就必须要知道这些字节码是什么,所以JVM运行java程序的第一步就是加载本程序包含的所有字节码文件。

那么JVM去哪里加载这些文件呢?这里我们就要引出classpath这个概念了。classpath指的就是JVM去哪里加载字节码文件,它是java命令的一个参数。例如:

java -classpath <path/to/class>

 

这样JVM在启动的时候就会去path/to/class这个路径下面加载class文件了。如果没有指定-classpath怎么办呢?没关系,java有一个默认的classpath,那就是当前目录,也就是你在哪里执行的java命令哪里就是当前目录。

比如,我现在进入到下面的目录里

E:\jcourse\lession1

这里有我编译好的HelloWorld.class文件,那么我就可以直接执行:

java HelloWorld

java命令后面跟的参数是一个类名,而且这个类里面必须包含一个main方法。我们写的这个程序正符合这样的要求。这个命令执行后会产生如下效果:

1. java在当前路径,也就是E:\jcourse\lession1下搜索所有的.class文件,并将其加载进JVM里。

2. 通过HelloWorld这个名称找到对应的类。

3. 找到HelloWorld这个类后,运行其中定义的main方法。

我们就得到了下面的输出结果。

f8ffeeb9785242cf92a3dfbc9cee65bc.png

可以看到我们写的程序运行了。


下面我们来做另外一个实验

首先我们把我们的命令行切换到其他的目录下,比如:

D:\workspace\bgzs

好了,现在我们的状态变成了下面这样

D:\workspace\bgzs                我的命令行所在的目录。

E:\jcourse\lession1                我的java程序,也就是HelloWorld.class所在的目录。

现在我们再次执行下面的命令,看看会发生什么。

java HelloWorld

5a01b7c2219e48089d9befebba4cca04.png

可以看到,java告诉我们无法找到类HelloWorld。这是因为我们没有给java指定classpath,那么java就会在当前路径(D:\workspace\bgzs)下加载class文件,但是我们的class文件并不在这里,而是在E:\jcourse\lession1 这里。所以出现这个问题也就解释通了。下面我们给java指定正确的classpath后再执行一次看看是什么效果。

java -classpath E:\jcourse\lession1 HelloWorld

d3be6572775c4cfe8ea0b0aab7f568ff.png

可以看到,我们写的java程序又正常运行了。

总结

三大核心基石

java语言是程序员用来写java源代码的一套规范,它为java程序提供最原始的素材,也就是我们用java语言编写的一个个的java源文件,这些源文件通过JDK提供的工具,被编译成一个个的字节码文件,这些字节码文件共同组成了java程序。然后JVM加载这些字节码文件去运行这个java程序。这就是java世界里的三大基石的作用以及他们互相之间的联系。

classpath

classpath是java命令的一个参数,它指定了一个路径也可以是多个路径或者java的库文件(jar文件),这些路径、jar文件里包含了class文件。classpath指示JVM去哪里加载这些class文件。

java程序运行的流程

1. 我们要执行java命令,并告诉java命令,class path在哪里,要运行的主类的类名是什么。

2. java在执行的时候会启动一个JVM,并告诉JVM去哪里加载class文件,以及要执行的主类是什么。

3. JVM启动后,去classpath指定的地方加载class文件,然后找到主类,并执行主类里面的main方法。

以上就是本章的所有内容,如有不明可以给作者发私信留言等。

 

 

标签:java,字节,程序,HelloWorld,第一章,JVM,Java,基石
From: https://blog.csdn.net/yjy000/article/details/144309384

相关文章

  • 认识java
    认识JAVAJAVA简介主要特性以下是Java的一些主要特性以下是Java的一些其他特性Java开发环境Java程序结构学习Java学习Java通常涉及以下几个步骤JAVA简介Java是由SunMicrosystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由Ja......
  • 校园二手物品交易市场系统|Java|SSM|VUE| 前后端分离
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetom......
  • 校园点餐系统|Java|SSM|JSP| 前后端分离
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetom......
  • 摊位管理系统|Java|SSM|JSP| 前后端分离
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetom......
  • Java 转 C之错误处理
    提纲:从Java转向C的错误处理概念概述Java异常机制与C返回值/errno的对比C中错误处理的常用方式详解函数返回值errno全局错误码自定义错误码setjmp/longjmp模拟异常常见错误码列表(POSIX环境为例)Java与C的错误处理示例对比全量示例:从文件读数据并处理错误......
  • 【java】在word指定书签处插入多个字符串
    1. 插入多个字符串,不加换行符/***插入字符串列表**@paramnode*@parambookmarkName书签名称*@paramlist*/publicstaticvoidwriteStringList(Nodenode,StringbookmarkName,List<String>list){try{......
  • 什么是 Java 中的 JIT(Just-In-Time)?
    Java中的JIT(Just-In-Time)编译器1.JIT的定义JIT(Just-In-Time)编译器是一种用于Java虚拟机(JVM)的动态编译技术。它在Java程序运行时,将Java字节码(Bytecode)转换为本地机器代码,从而提高程序的运行效率。位置:JIT是JVM的一部分,内嵌在JVM内部。目标:提升字节码执行的速度......
  • A306 基于Java+jsp+SQL的社交论坛 BBS 源码 文档
    社交论坛的设计与实现1.摘要2.开发目的和意义2.1系统开发目的2.2系统开发意义3.系统功能设计4.系统界面截图5.源码获取1.摘要摘要随着信息技术的快速发展,人与人之间交流方式越来越先进。在当今时代,QQ、留言板、博客、微信等已成为人们彼此沟通、交流信息的主要......
  • 【JAVA项目】基于ssm的【汽车在线销售系统】
    【JAVA项目】基于ssm的【汽车在线销售系统】技术简介:采用JSP技术、B/S架构、SSM框架、MySQL技术等实现。系统简介:首页汽车在线销售系统模块如下:首页、汽车信息、新闻资讯、留言反馈、我的收藏管理等功能。管理员输入个人的账号、密码登录系统,这时候系统的数据库就会在进行查......
  • 你了解 Java 的类加载器吗?
    Java类加载器(ClassLoader)Java中的类加载器是用于加载.class文件到JVM中的组件,它的核心作用是将字节码(.class文件)加载到内存,并且使它能够被JVM执行。类加载器决定了类的加载顺序和加载方式,是Java应用程序在运行时执行的重要部分。1.类加载器的基本概念类加载器:Java......