当前位置: 首页 > news >正文

Windows系统及Ubuntu系统安装Java

Java语言简介

Java是一种高级编程语言,Java语言的创始可以追溯到1990年代初,当时任职于Sun Microsystems(后来被甲骨文公司收购)的詹姆斯·高斯林(James Gosling)等人开始开发一种名为“Oak”(名字来源于詹姆斯·高斯林办公室前的一棵橡树)的编程语言。这一项目的初衷是设计一个可以在各种消费电子产品上运行的编程语言,以便更好地控制和通信。然而,随着互联网的兴起,他们意识到Oak在互联网上的应用前景,于是对Oak进行了改造,由于“Oak”已被其他公司注册,因此Sun公司不得不为这门新语言寻找一个新的名字。并最终于1995年5月以Java(Java的中文名叫“爪哇”,这个名字来源于盛产咖啡的爪哇岛。因此Java语言的Logo也被设计为一杯热气腾腾的咖啡)的名称正式发布。
Java具有跨平台性、面向对象、健壮性、安全性、可移植性等特点,广泛应用于企业级应用开发、移动应用开发、大数据处理、云计算等领域。Java程序可以在不同的操作系统上运行,只需编译一次,就可以在任何支持Java虚拟机(JVM)的平台上运行,接下来介绍下Java语言的几个关键概念:

  • JDK

Java Development Kit(JDK)是Java语言的软件开发工具包,主要用于开发Java应用程序。JDK主要由Java开发工具(JDT)、Java平台标准类库(Java ClassLibrary)和Java虚拟机(JVM)等部分组成。其中,JDT提供了Java开发所需的各种工具,如编译器、调试器、重构工具等;Java平台标准类库则提供了Java应用程序所需的类库和接口,包括输入输出、网络通信、多线程等功能;JVM则是Java运行环境的核心,负责执行Java字节码。JDK具有跨平台性、面向对象、安全性、多线程和丰富的API等特点,是Java开发的核心工具包。

  • JRE

Java Runtime Environment(JRE)是Java的运行环境,不是开发环境,所以不包括任何开发工具(如编译器和调试器)。JRE包括Java虚拟机(JVM)、运行时类库(runtime class libraries)和Java应用程序启动器(Javapplicationlancher),这些都是运行Java程序的必要组成部分。通过JRE,Java开发人员可以向用户发布他们开发的程序,供用户使用。JRE是Java程序运行的基础环境,只要安装了JRE,Java应用程序就可以正确运行。

  • JVM

Java Virtual Machine(JVM)是Java虚拟机的缩写,是一种用于计算设备的规范,它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

  • Java SE

Java SE(Java Standard Edition,Java标准版)是Java技术的核心和基础,由Sun Microsystems公司于1995年推出。Java SE是Java ME和Java EE编程的基础,提供了一个程序开发环境,包括开发与运行Java软件的编译器等开发工具、软件库及Java虚拟机。Java SE广泛应用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序,并为Java EE和Java ME提供了基础。

  • Java EE

Java EE(Java Platform, Enterprise Edition)是sun公司(现Oracle公司)推出的企业级应用程序版本,以前称为J2EE。Java EE是在Java SE的基础上构建的,提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(SOA)和Web 3.0应用程序。Java EE提供了丰富的API和框架,如JDBC、EJB、Java RMI、JNDI、JMS等,用于开发、部署和管理企业级分布式系统、Web应用等。随着技术的发展,Java EE在2018年被更名为Jakarta EE,由开源组织Eclipse基金会管理。

  • Java ME
    Java ME(Java Platform, Micro Edition),是专为嵌入式消费电子设备优化的Java技术子集。它通过对Java技术的裁剪和优化,提供了适应资源受限设备(如移动电话、机顶盒等)的编程环境。Java ME具备资源限制优化、性能要求优化、API优化及工具支持等特点,尽管在移动设备领域的应用逐渐减少,但在特定嵌入式设备开发中仍发挥重要作用。

  • 长期支持版本
    长期支持的Java版本(LTS,Long-Term Support)是Java社区为开发者提供的具有长期维护和更新支持的Java版本,其中Java 8、Java 11和Java 17是关键的LTS版本。这些版本不仅引入了诸如Lambda表达式、Stream API、HTTP Client API、密封类、模式匹配等重要特性,还享受了长期的安全更新和关键补丁支持。Java 8的支持周期直到2025年,Java 11则至2026年,而Java 17作为当前最新的LTS版本,也将根据Oracle的官方政策获得至少三年的支持。选择LTS版本进行开发,有助于确保应用程序的稳定性和安全性,同时降低企业的维护成本。

总结来说,JDK是Java开发工具包,JRE是Java运行环境,JVM是Java虚拟机,Java SE是Java标准版,Java EE是Java企业级版本。这些组成部分共同构成了Java技术的生态系统,支持Java应用程序的开发、部署和运行。

Windows系统安装Java

直接进入官网,直接点击.msi文件的下载链接即可,在安装时勾选上自动添加环境变量
JDK17 .msi文件下载链接:JDK17 Download
JDK官方下载地址:JDK Download
在这里插入图片描述
安装完成后在cmd中输入命令即可查看是否安装成功:

java --version

Ubuntu系统安装Java

在Ubuntu系统中,安装JDK更为方便,先输入命令使系统连接到配置的软件源(repositories),下载并更新这些源中最新可用的软件包列表。随后更新的软件包列表,检查系统中已安装的软件包是否有新版本可用。如果有,它会下载并安装这些新版本,同时处理任何必要的依赖关系变化。

sudo apt update

随后更新的软件包列表,检查系统中已安装的软件包是否有新版本可用。如果有的话会下载并安装这些新版本,同时处理任何必要的依赖关系变化。

sudo apt upgrade

接下来安装OpenJDK,这里我安装的java17:

sudo apt install openjdk-17-jdk

安装完成后输入命令查看是否安装成功:

java --version

在这里插入图片描述

运行一段测试代码

这里先介绍下常见的Java开发工具(IDE),在选择Java IDE时,开发者需要考虑多个因素,包括个人偏好、项目需求、团队协作等。不同的IDE在用户界面设计、插件生态系统、社区支持等方面各有千秋,因此选择适合自己的IDE:

  1. IntelliJ IDEA

    • 由JetBrains开发,以其智能的代码辅助、强大的重构功能和与Git等版本控制系统的无缝集成而闻名。
    • 支持多种编程语言和框架,特别适合Java开发者使用,能够极大提高开发效率。
    • 提供了旗舰版(付费)和社区版(免费)两种版本。
  2. Eclipse

    • 一款免费开源的集成开发环境(IDE),最初由IBM开发,现由Eclipse基金会管理。
    • 支持多种编程语言,如Java、C/C++、PHP等,通过插件可以支持更多语言和框架。
    • 拥有丰富的插件生态系统,几乎任何想要的功能都可以通过安装相应的插件来实现。
    • 在学术和研究环境中特别受欢迎。
  3. NetBeans

    • 另一个免费开源的IDE,支持多种编程语言,包括Java、PHP、C/C++等。
    • 以其对Maven项目的出色支持而闻名,提供了便捷的项目配置、依赖管理和构建自动化功能。
    • 特别适合使用Maven的Java开发者,以及需要快速开发GUI应用的开发者。
    • 其GUI构建器允许开发者通过拖放组件来设计图形界面,降低了GUI开发的复杂性。
  4. Visual Studio Code (VS Code)

    • 由微软开发的一款轻量级、跨平台的代码编辑器,虽然不是传统意义上的IDE,但通过插件可以支持Java等多种编程语言和框架。
    • 提供了智能的代码补全、调试、版本控制等功能,是前端开发者的常用工具之一。
    • 对于Java开发,通过安装相应的扩展插件(如Java Extension Pack)也能获得很好的支持。

个人使用的是VS Code,因为更加的灵活多变一些;在校学生推荐在JetBrains官网注册后使用IDEA,相较其他IDE操作更方便一些。

安装完IDE后新建一个名为Student.java的文件,将以下代码复制到文件中,需要注意的是,文件中的类名必须和文件名相同:

// 定义Student类  
public class Student {  // 成员变量(属性)  private String name;  private int age;  private String studentId;  // 构造方法  public Student(String name, int age, String studentId) {  this.name = name;  this.age = age;  this.studentId = studentId;  }  // 获取名字方法  public String getName() {  return name;  }  // 设置名字方法  public void setName(String name) {  this.name = name;  }  // 获取年龄方法  public int getAge() {  return age;  }  // 设置年龄方法  public void setAge(int age) {  this.age = age;  }  // 获取学生ID方法  public String getStudentId() {  return studentId;  }  // 设置学生ID方法  public void setStudentId(String studentId) {  this.studentId = studentId;  }  // 打印学生信息方法  public void printStudentInfo() {  System.out.println("Student Name: " + name);  System.out.println("Student Age: " + age);  System.out.println("Student ID: " + studentId);  }  // 主方法,用于测试Student类  public static void main(String[] args) {  // 创建一个Student对象  Student student1 = new Student("GGBond", 16, "114514");  // 调用对象方法  student1.printStudentInfo();  // 修改对象的属性  student1.setName("Mio Mo");  student1.setAge(21);  // 再次调用对象方法,查看修改后的属性  student1.printStudentInfo();  }  
}

这里我推荐采用终端运行的方式,在终端中输入命令,使用编译工具javac将 Java 源代码(以 .java 为扩展名的文件)编译成 Java 字节码(bytecode):

javac Student.java

命令运行后会编译出Student.class字节码文件,当运行一个 Java 程序时,JVM 会加载 .class 文件,通过解释或即时编译(JIT,把字节码转换成机器码)来执行程序。
在这里插入图片描述
再输入命令来运行字节码:

java Student

Java运行成功!
在这里插入图片描述

相关文章:

Windows系统及Ubuntu系统安装Java

Java语言简介 Java是一种高级编程语言,Java语言的创始可以追溯到1990年代初,当时任职于Sun Microsystems(后来被甲骨文公司收购)的詹姆斯高斯林(James Gosling)等人开始开发一种名为“Oak”(名字来源于詹姆…...

uni-data-select 使用 localdata 传入数据出现 不回显 | 下拉显示错误的 解决方法

目录 1. 问题所示2. 正确Demo3. 下拉显示错误(Bug复现)4. 下拉不回显(Bug复现)1. 问题所示 uni-app的下拉框uni-data-select 使用 localdata 传入数据 主要总结正确的Demo以及复现一些Bug 数据不回显数据不显示下拉选项2. 正确Demo 详细的基本知识推荐阅读:uni-app中的…...

图解 TCP 四次挥手|深度解析|为什么是四次|为什么要等2MSL

写在前面 今天我们来图解一下TCP的四次挥手、深度解析为什么是四次? 上一片文章我们已经介绍了TCP的三次握手 解析四次挥手 数据传输完毕之后,通信的双方都可释放连接。现在客户端A和服务端B都处于ESTABLISHED状态。 第一次挥手 客户端A的应用进…...

DevExpress中文教程:如何将WinForms数据网格连接到ASP. NET Core WebAPI服务?

日前DevExpress官方发布了DevExpress WinForms的后续版本——将.NET桌面客户端连接到安全后端Web API服务(EF Core with OData),在本文中我们将进一步演示如何使用一个更简单的服务来设置DevExpress WinForms数据网格。 P.S:DevExpress WinForms拥有180…...

SpringBoot3核心特性-核心原理

目录 传送门前言一、事件和监听器1、生命周期监听2、事件触发时机 二、自动配置原理1、入门理解1.1、自动配置流程1.2、SPI机制1.3、功能开关 2、进阶理解2.1、 SpringBootApplication2.2、 完整启动加载流程 三、自定义starter1、业务代码2、基本抽取3、使用EnableXxx机制4、完…...

Linux:RPM软件包管理以及yum软件包仓库

挂载光驱设备 RPM软件包管理 RPM软件包简介 区分软件名和软件包名 软件名:firefox 软件包名:firefox-52.7.0-1.el7.centos.x86_64.rpm 查询软件信息 查询软件(参数为软件名) ]# rpm -qa #当前系统中所有已安装的软件包 ]# r…...

pod介绍与配置

1、pod概念介绍 Pod 是 kubernetes 基本调度单位。每个 Pod 中可以运 行一个或多个容器,共享 Pod 的文件系统、IP 和网络等资源,每个 Pod 只有一个 IP。 2、使用 yaml或json 文件创建 Pod 声明式文件方式创建 Pod,支持 yaml 和 json 1&…...

【Taro】初识 Taro

笔记来源:编程导航。 概述 Taro 官方文档:https://taro-docs.jd.com/docs/ (跨端开发框架) Taro 官方框架兼容的组件库: taro-ui:https://taro-ui.jd.com/#/ (最推荐,兼容性最好&…...

【设计模式-备忘录】

备忘录模式(Memento Pattern)是一种行为型设计模式,用于保存对象的内部状态,以便在将来某个时间可以恢复到该状态,而不暴露对象的内部实现细节。备忘录模式特别适合在需要支持撤销(Undo)操作的应…...

【数据结构】排序算法系列——快速排序(附源码+图解)

快速排序 接下来我们将要介绍的是排序中最为重要的算法之一——快速排序。 快速排序(英语:Quicksort),又称分区交换排序(partition-exchange sort),最早由东尼霍尔提出。快速排序通常明显比其…...

Arthas thread(查看当前JVM的线程堆栈信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.2 thread(查看当前JVM的线程堆栈信息)举例1:展示[数字]线程的运行堆栈,命令:thread 线程ID举例2:找出当前阻塞其他线程的线程 二、命令列表 2.1 jvm相关命令 2.…...

Tomcat_WebApp

Tomcat的目录的介绍 /bin: 这个目录包含启动和关闭 Tomcat 的脚本。 startup.bat / startup.sh:用于启动 Tomcat(.bat 文件是 Windows 系统用的,.sh 文件是 Linux/Unix 系统用的)。shutdown.bat / shutdown.sh&#xf…...

代码随想录算法训练营Day10

150. 逆波兰表达式求值 力扣题目链接&#xff1b;. - 力扣&#xff08;LeetCode&#xff09; Collection——Deque——LInkedList类 class Solution {public int evalRPN(String[] tokens) {Deque<Integer> myquenew LinkedList<>();for(String a:tokens){if(a.…...

十个服务器中毒的常见特征及其检测方法

服务器作为企业的核心资源&#xff0c;其安全性至关重要。一旦服务器被病毒入侵&#xff0c;不仅会影响系统的正常运行&#xff0c;还可能导致数据泄露等严重后果。以下是十种常见的服务器中毒特征及其检测方法。 1. 系统性能下降 病毒常常占用大量的CPU和内存资源&#xff0…...

LeetCode 每周算法 6(图论、回溯)

LeetCode 每周算法 6&#xff08;图论、回溯&#xff09; 图论算法&#xff1a; class Solution: def dfs(self, grid: List[List[str]], r: int, c: int) -> None: """ 深度优先搜索函数&#xff0c;用于遍历并标记与当前位置(r, c)相连的所有陆地&…...

Selenium元素定位:深入探索与实践

目录 一、引言 二、Selenium元素定位基础 1. WebDriver与元素定位 2. 定位策略概览 三、ID定位 1. 特点与优势 2. 示例代码 四、Class Name定位 1. 特点与限制 2. 示例代码 五、XPath定位 1. 特点与优势 2. 示例代码 3. XPath高级用法 六、CSS Selector定位 1.…...

前端开发——(1)使用vercel进行网页开发

前端开发——&#xff08;1&#xff09;使用Vercel进行网页开发 在现代前端开发中&#xff0c;选择一个高效的部署平台至关重要。Vercel 提供了快速、简便的部署方式&#xff0c;特别适合静态网站和 Next.js 应用。本文将带你逐步了解如何使用 Vercel 部署并运行你的网页项目。…...

故障诊断│GWO-DBN灰狼算法优化深度置信网络故障诊断

1.引言 随着人工智能技术的快速发展&#xff0c;深度学习已经成为解决复杂问题的热门方法之一。深度置信网络&#xff08;DBN&#xff09;作为深度学习中应用比较广泛的一种算法&#xff0c;被广泛应用于分类和回归预测等问题中。然而&#xff0c;DBN的训练过程通常需要大量的…...

【工具】Windows|两款开源桌面窗口管理小工具Deskpins和WindowTop

总结 Deskpins 功能单一&#xff0c;拖到窗口上窗口就可以置顶并且标记钉子标签&#xff0c;大小 104 KB&#xff0c;开源位置&#xff1a;https://github.com/thewhitegrizzli/DeskPins/releases WindowTop 功能完善全面强大&#xff0c;包括透明度、置顶、选区置顶等一系列功…...

【Unity杂谈】iOS 18中文字体显示问题的调查

一、问题现象 最近苹果iOS 18系统正式版推送&#xff0c;周围升级系统的同事越来越多&#xff0c;有些同事发现&#xff0c;iOS 18上很多游戏&#xff08;尤其是海外游戏&#xff09;的中文版&#xff0c;显示的字很奇怪&#xff0c;就像一些字被“吞掉了”&#xff0c;无法显示…...

后端-navicat查找语句(单表与多表)

表格字段设置如图 语句&#xff1a; 1.输出 1.输出name和age列 SELECT name,age from student 1.2.全部输出 select * from student 2.where子语句 1.运算符&#xff1a; 等于 >大于 >大于等于 <小于 <小于等于 ! <>不等于 select * from stude…...

基于springboot的在线视频点播系统

文未可获取一份本项目的java源码和数据库参考。 国外研究现状&#xff1a; 与传统媒体不同的是&#xff0c;新媒体在理念和应用上都采用了新颖的媒介或媒体。新媒体是指应用在数字技术、在传统媒体基础上改造、或者更新换代而来的媒介或媒体。新兴媒体与传统媒体在理念和应用…...

笔记整理—内核!启动!—kernel部分(8)动态编译链接库与BSP文件

linux的C语言程序是用编译的&#xff0c;但是如果要在开发板上运行的话就不能使用默认的ubuntu提供的gcc编译器&#xff0c;而是使用arm-linux版本的一类的编译器。我们可以用file xx去查看一个程序的架构。 &#xff08;arm架构&#xff09; &#xff08;intel的80386架构&…...

Cpp类和对象(中续)(5)

文章目录 前言一、赋值运算符重载运算符重载赋值运算符重载赋值运算符不可重载为全局函数前置和后置的重载 二、const修饰成员函数三、取地址及const取地址操作符重载四、日期类的实现构造函数日期 天数日期 天数日期 - 天数日期 - 天数日期类的大小比较日期类 > 日期类日…...

深度学习02-pytorch-01-张量的创建

深度学习 pytorch 框架 是目前最热门的。 深度学习 pytorch 框架相当于 机器学习阶段的 numpy sklearn 它将数据封装成张量(Tensor)来进行处理&#xff0c;其实就是数组。也就是numpy 里面的 ndarray . pip install torch1.10.0 -i https://pypi.tuna.tsinghua.edu.cn/simp…...

pg入门9—pg中的extentions是什么

在 PostgreSQL&#xff08;PG&#xff09;中&#xff0c;Extension&#xff08;扩展&#xff09; 是一组预先打包的功能模块&#xff0c;可以轻松地添加到数据库中以扩展其功能。这些扩展通常包含新的数据类型、函数、索引方法、操作符以及其他数据库增强功能。通过扩展&#x…...

JAVA:Nginx(轻量级的Web服务器、反向代理服务器)--(1)

一、Nginx:起因 nginx为什么为开发出来,起因是什么 总述:NGINX 的开发起因源于上世纪 90 年代末至 2000 年代初的互联网快速发展。当时,互联网流量急剧增长,特别是像 Apache 这样的传统 Web 服务器在高并发连接处理方面开始显现出瓶颈。 举例子:Apache 的 "每个连接…...

互斥锁和自旋锁

1、锁&#xff1a; 自旋锁与‌互斥锁的区别主要体现在以下几个方面&#xff1a; 1. 实现方式 ‌互斥锁‌&#xff1a;属于‌sleep-waiting类型的锁。当一个线程尝试获取已被其他线程持有的互斥锁时&#xff0c;该线程会被阻塞&#xff08;进入睡眠状态&#xff09;&#xff…...

救生圈检测系统源码分享

救生圈检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…...

容器技术--Dockerfile 构建镜像

Dockerfile dockerfile 是一系列命令&参数构成的脚本,这些命令应用于基础镜像,最终创建一个新的镜像,可以提供一致的运行环境。【也可以登录容器,自己安装软件,最后commit为镜像】 命令 FROM 指定基础镜像(必须),如FROM ubuntu;每一个指令就生成一层镜像;RUN 运…...