【JavaSE】第一个Java程序

前提引入

在JavaSE的系列中,将从第一个Java程序开始叙述,系统的把JavaSE的内容总结一次。毕竟这是第二次学习JavaSE的内容,因此感触也相对比较深一些。在JavaSE的初步计划中,大概有十一到十三篇文章,大致有:第一个Java程序、变量与运算符、流程控制、面向对象(封装、继承、多态)、异常、常用API、泛型、输入输出流、反射以及注解等。

Java开发环境

在第一个Java程序引入之前,先对Java的开发环境进行一个简单的介绍,毕竟有了开发环境,才可以进行代码的书写:

JDK:Java开发者工具;

JRE:Java运行时环境;

JVM:Java虚拟机。

上述表明,JDK是程序员开发时需要的工具,因此要先安装一下JDK。JDK现在是每半年发行一个版本,因为刚开始学习不必要使用最新版本,可以使用11或者17甚至8也是可以的。

JDK = JRE + 开发者工具集 (例如Java编译工具等);

JRE = JVM + JavaSE标准类库。

即三者具有如图关系:

Java核心机制:JVM

在Java开发环境中,最重要的组成部分就是JVM了。如果是第一次接触Java的同学可能对此没啥感觉,但是当对编程有了一定的了解之后,再回来重新学习,那么就会认识到JVM的重要性。

JVM,即Java Virtual Machine,Java虚拟机;它是一个虚拟的计算机,是Java程序的运行环境。JVM具有指令集并使用不同的存储区域,负责执行命令、管理数据、内存以及寄存器等。

功能一

实现Java程序的跨平台性

指令集

Java语言属于高级编程语言,要经过编译器编译成可执行程序,而对于最底层来说,即机器指令序列,也就是大家所熟知的二进制编码;也就是说,软件最终都会成为机器熟悉的一些指令,而这些指令又形成了一个集合,自然又会出现不同的指令集。

假若现在有n种语言,m种指令集;如果再出现一种语言,那么势必要有m种对应关系去对应m种指令集;如果新出现一种指令集,那么势必要有n种对应关系去对应n种语言。但是,JVM的出现,大大减少这种关系的存在,如果出现一种新的语言,JVM直接去进行对应;如果出现一种新的指令集,那么也是JVM直接去进行对应,本来m * n的关系现在变成了m + n的关系,如下图:

功能二

实现内存管理(内存分配,内存回收)

内存泄漏和内存溢出

内存泄漏:所谓内存泄漏,即某块内存,在使用完成之后,本该进行回收,但是确并没有回收走,依旧处在被使用的状态中。

内存溢出:所谓内存溢出,即某程序约定的只有2G的内存空间,但是在运行过程中,使用的内存超过2G,也就是超过规定的内存空间,导致程序被挂掉。

  • Java程序在运行过程中,涉及到运算数据的分配、存储等都由JVM来完成;
  • Java消除了程序员回收无用内存空间的职责,提供了一种系统级线程跟踪存储空间的分配情况,在存储空间达到相应阈值时,检查并释放可被释放的存储器空间;
  • GC的自动回收,提供了内存空间的利用效率,也提高了编程人员的效率,很大程度上减少了因为没有释放空间而引起的内存泄漏。

Java程序开发步骤

  1. 编写程序:将Java代码编写到以.java为扩展名的源文件中;
  2. 编译:使用javac命令对该java程序进行编译,生成一个或者多个字节码文件;
  3. 运行:使用java命令对生成的.class文件进行运行。

第一个Java程序

在学习编程的过程中,无论是哪一种语言,一般都是先编写一段“hello world”程序,以此来入门某种语言,Java当然也不例外。

a. 编写代码

创建一个后缀为.java的文件,将Java代码编写到文件中。

如果创建好的文件中没有发现后缀名,那么就点击“查看”中的“文件扩展名”进行勾选即可,如图:

 上述操作完成之后,将后缀名修改,改成如图所示即可(由于我的电脑上安装了一个插件,因而图标进行了转换,但是不安装也无伤大雅,最后都会使用IDEA等进行代码书写):

上述操作全部完成之后,进行代码书写:

public class helloworld {
	
	public static void main(String[] args) {
		System.out.println("hello world");
	}
	
}

 在上述代码中,public是一种限定符,使用大白话就好像你的日记只能给自己看,其他人不能看,而获得一个好成绩之后所有人都可以看的这种情况,而public表示的就是所有代码都可以用public包含的所有代码。

class表示一个类,这个是在面向对象中会仔细讲解,大致和C语言中的结构体类似。

helloworld就是类名。

其中的就算main函数,和C语言的main函数相同,表示程序的入口,在main函数前面的public、static以及void等都是一些修饰符,在后续学习中会慢慢接触到。

b. 编译

当代码书写完成之后,使用javac命令进行编译,就会生成.class字节码文件。

上述图中可以发现,当使用javac命令之后,就会生成一个.class文件。

生成.class文件之后,只要电脑上安装有JVM,那么就可以运行该java程序,无需再次编译,这就是java的口号:一次编译,到处运行。

c. 运行

当生成.class文件,使用java命令就可以对java程序进行运行。

注意

1. 一个java文件中可以声明多个类,但是最多只能有一个类使用public进行声明,且要求声明的类名与文件名相同。

2. 在使用javac命令时,注意后面跟着的是该程序的文件名,而非类名;当一个java程序中有多个类时,就会生成多个字节码文件。

如上图所示,java程序的文件名是helloworld,因而javac命令后面跟着的就是该名字;而编译完成之后,该文件会生成两个.class文件,而.class文件的名字则是跟java程序中的类名相同。

3. 编译完成之后,使用java程序进行运行时,就不再是以前的文件名,而是.class对应的文件名,但是也有例外,第四条中进行叙述。

4. 在Java中是严格区分大小写的,而windows并不具体区分大小写,因此如果两个类名相同咋办?请看如下例子:

上述例子表明,在windows系统中,如果一个java文件中有大小写不同但字母相同的程序,最后编译时只会生成一个字节码文件,并且文件名是以第一个类名命名的;但是通过java命令发现,使用helloworld是无法运行的,只有使用HelloWorld才可以运行,因此表明了如果存在两个命名相同的类,那么生成的字节码文件名是以第一个类命名,但是其中的内容确是第二个类的内容。

在本篇文章中,是第一个java程序的书写,下篇文章是对变量与运算符的简单介绍;刚入门时,建议大家可以配合视频观看,而并非只看一些书籍,毕竟书籍虽然深度比较深,但还是比较晦涩难懂,这篇文章到这里就结束了,感谢各位的观看。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker 安装手册

docker 安装手册 第一步卸载旧的docker (如果安装过Docker否则跳过此步) 以防万一最好执行一遍 yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 第二步,安装相关…

ROS第 11 课 参数的使用与编程方法

文章目录 第 11 课 参数的使用与编程方法1.服务模型2.rosparam参数2.1 rosparam详细参数2.2 运行海龟例程2.3 rosparam的使用 3.编程方法3.1 编写控制程序 4.运行程序 第 11 课 参数的使用与编程方法 1.服务模型 &emap;&emsp在ROS master当中有一个参数服务器&#x…

Linux系统Shell脚本 ----- 编程规范和变量详细解读(一)

一、程序编程风格 面向过程语言 开发的时候 需要 一步一步 执行 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理 问题规模小&#…

imgaug库图像增强指南(35):【iaa.Fog】——轻松创建自然雾气场景

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…

gin如何实现热更新

什么是热更新? 一种不需要用户关闭应用或重新启动设备就能进行的软件更新技术。它可以快速地在线修复或升级应用程序的错误或功能,从而减少用户的等待时间并提高用户体验。 如何优雅停止服务? Go 1.8版本之后, http.Server 内置…

Unity中URP下的SimpleLit的 BlinnPhong高光反射计算

文章目录 前言一、回顾Blinn-Phong光照模型1、Blinn-Phong模型: 二、URP下的SimpleLit的 BlinnPhong1、输入参数2、程序体计算 前言 在上篇文章中,我们分析了 URP下的SimpleLit的 Lambert漫反射计算。 Unity中URP下的SimpleLit的 Lambert漫反射计算 我…

Unity - 简单音频

“Test_04” AudioTest public class AudioTest : MonoBehaviour {// 声明音频// AudioClippublic AudioClip music;public AudioClip se;// 声明播放器组件private AudioSource player;void Start(){// 获取播放器组件player GetComponent<AudioSource>();// 赋值…

UI设计中的插画运用优势(下)

6. 插画赋予设计以美学价值&#xff0c;更容易被接受 即使所有人都在分析和争论产品的可用性和易用性&#xff0c;大家在对美的追求上&#xff0c;始终保持着一致的态度。一个设计是否具备可取性&#xff0c;是否能够通过甲方、客户和实际用户&#xff0c;是每个设计人都需要面…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(1)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

2024美赛数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 模型…

性能优化-HVX 指令介绍

「发表于知乎专栏《移动端算法优化》」 本文主要介绍了 HVX 指令相关的知识&#xff0c;包括 HVX 寄存器相关内容&#xff0c;指令的背景依赖&#xff0c;部分常用 intrinsic HVX 指令。具体指令的详细内容及使用还需阅读 HVX 的指令文档&#xff0c;以及细致的实践操作。 &…

表达式计算

四则运算表达式可以用表达式树表达&#xff0c;如下图后序遍历 现给你一个字符串&#xff0c;代表一个后序遍历形式的四则运算表达式&#xff0c;请计算出表达式的结果&#xff1a;(只输出整数部分) 注&#xff1a;除法只保留整数部分&#xff1b;5/4 1 输入&#xff1a; 一个…

使用 YApi 管理 API 文档,测试, mock

随着互联网的发展&#xff0c;API变的至关重要。根据统计&#xff0c;目前市面上有上千万的开发者&#xff0c;互联网项目超过10亿&#xff0c;保守统计涉及的 API 数量大约有 100 亿。这么大基数的API&#xff0c;只要解决某些共有的痛点&#xff0c;将会是非常有意义的事情。…

SpringCloud中服务间通信(应用间通信)-亲测有效-源码下载-连载2

1、微服务概述 本案例主要解决微服务之间的相互调用问题 如果已经理解什么是微服务&#xff0c;可以直接跳到实战。 本案例采用springBoot3.1.7springCloud2022.0.4版本测试 本案例使用springboot2.7.x版本测试代码相同 1、微服务是分布式架构&#xff0c;那么为什么要需要…

中仕教育:选调生和考研可以一起准备吗?

研究生入学考试&#xff0c;是本科生们提升学历继续深造的主要途径。而选调生&#xff0c;是指通过考试选拔的优秀应届毕业生&#xff0c;经过锻炼后分配到各级工作。这两者作为大部分人选择的方向&#xff0c;发展前景都是比较好的。 考研和选调生可以一起准备吗? 是可以的…

业务逻辑漏洞—验证码绕过

验证码绕过第一关&#xff1a; 前端验证码绕过&#xff1a; 打开pikachu靶场&#xff1a; 输入错误的验证码时会出现弹窗&#xff08;alert&#xff09;此时我们猜测这可能存在着前端限制 如果验证码有前端限制&#xff08;只在前端有作用&#xff09;&#xff0c;不影响后…

opencv#29 图像噪声的产生

在上一节的图像卷积我们了解到图像卷积可以用于去除图像中的噪声&#xff0c;那么对于现实生活中每一张采集到的图像都会包含噪声&#xff0c;也就是我们通过相机无法得到不包含噪声的图像&#xff0c;如果我想衡量噪声去除能力的强弱&#xff0c;就必须在一张不含噪声的图像中…

架构篇09:架构设计原则案例

文章目录 淘宝案例手机QQ案例小结 我们先复习一下架构设计的三条核心原则&#xff1a;合适原则、简单原则和演化原则。 我们在架构设计实践中&#xff0c;应该时刻谨记这三条设计原则&#xff0c;指导我们设计出合适的架构&#xff0c;即使是代表中国互联网技术最顶尖水平的 BA…

51单片机1-6

目录 单片机介绍 点亮一个LED 流水灯参考代码 点亮流水LEDplus版本 独立按键 独立按键控制LED亮灭 静态数码管 静态数码管显示 动态数码管显示 模块化编程 调试工具 矩阵键盘 矩阵键盘显示数据 矩阵键盘密码锁 学习B站江协科技课程笔记。 安装keil&#xff0c;下…

docker容器下php框架laravel的使用问题与解决方案

DB_CONNECTIONmysqlDB_HOSTlocalhost DB_CONNECTIONmysqlDB_HOSTdocker33-mysql-1 容器中只有数据库结构 进入MySQL容器内&#xff0c;创建表结构&#xff0c;添加数据 代码层面需要转换成数组 $query->get([*])->toArray(); 分页数据框架会返回带有data的数据&#xf…