第01章_Java语言概述

news/2024/11/15 20:26:42/文章来源:https://www.cnblogs.com/joey-wang/p/18424972

1 Java 语言概述

1.1 Java 概述

  • SUN (Stanford University Network,斯坦福大学网络公司 ) 1995年 推出的一门高级编程语言。
  • 是一种面向 Internet 的编程语言。Java 一开始富有吸引力是因为 Java 程序可以在 Web浏览器 中运行。这些Java程序被称为 Java小程序 (applet),内嵌在 HTML 代码中。
  • 伴随着互联网的迅猛发展,以及 Java 技术在 web 方面的不断成熟,已经成为 Web 应用程序的首选开发语言。

1.2 Java 技术体系平台

[!danger] Android 开发不等同于 Java ME 的开发

  • Java SE (Java Standard Edition) 标准版
    • 支持面向桌面级应用 (如Windows下的应用程序) 的 Java 平台,即定位个人计算机的应用开发。
    • 包括用户界面接口 AWT 及 Swing,网络功能与国际化、图像处理能力以及输入输出支持等。
    • 此版本以前称为 J2SE
  • Java EE (Java Enterprise Edition) 企业版
    • 为开发企业环境下的应用程序提供的一套解决方案,即定位在服务器端的Web应用开发
    • JavaEE 是 JavaSE 的扩展,增加了用于服务器开发的类库。如:Servlet 能够延伸服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP 是一种可以将 Java 程序代码内嵌在网页内的技术。
    • 版本以前称为 J2EE
  • Java ME (Java Micro Edition) 小型版
    • 支持 Java 程序运行在移动终端(手机、机顶盒)上的平台,即定位在消费性电子产品的应用开发。
    • JavaME 是 JavaSE 的内伸,精简了 JavaSE 的核心类库,同时也提供自己的扩展类。增加了适合微小装置的类库:javax.microedition.io.* 等。
    • 此版本以前称为 J2ME

1.3 Java 开发环境搭建

1.3.1 JDK 🆚 JRE 🆚 JVM

  • JDK (Java Development Kit):是 Java 程序开发工具包,包含JRE 和开发人员使用的工具。
  • **JRE ** (Java Runtime Environment):是 Java 程序的运行时环境,包含JVM 和运行时所需要的核心类库
  • JVM (Java Virtual Machine ,Java虚拟机):是个虚拟的计算机,具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。
    • Java 代码都运行在 JVM 之上,是 JVM 使得 Java 程序具备了跨平台性
    • JVM 负责进行内存的管理 (内存分配与回收)❗️虽然但是,Java 程序仍可能出现内存溢出和内存泄漏问题

🌰 Java 8.0 Platform:

[!note] 小结

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

JRE = JVM + Java SE 标准类库

1.3.2 JDK 版本选择

  • JRebel 于 2022 年 4 月前后发布的《2022 年Java生态系统状况报告》中,Java11占比最多,其次是 Java8。
  • Spring Boot 3.0 需要使用 java17 和 spring6.0,所以如果企业选型最新 springboot3. 0作为架构,则需使用 jdk17。

2020年 Java8 的占比还是最高的,可能是因为 Java11及更高版本的默认 GC 采用 G1 算法,而 Java8 不是。 (G1是最受欢迎的GC算法)

1.3.3 JDK 环境配置

官方下载地址

macOS 需下载 dmg 扩展,按照指引安装后,默认安装目录为 /Library/Java/JavaVirtualMachines

jdk-1.8.jdk/Contents/Home 中,bin 目录存放的是开发工具、lib目录存放的是 jar 包,src 目录存放的是源码。

# 1 查看当前环境变量
export# 2 配置环境变量, .zshrc 或者 .zprofile 都行
$ vim ~/.zshrcJAVA_HOME_8=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
JAVA_HOME_11=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
export JAVA_HOME=JAVA_HOME_8
PATH="$PATH:$JAVA_HOME/bin"# ==== 则通过命令 jdk8 或者 jdk11 切换版本 ====
alias jdk8="export JAVA_HOME=$JAVA_HOME_8 && echo current JDK has switched to oracle jdk version 1.8. && java -version"
alias jdk11="export JAVA_HOME=$JAVA_HOME_11 && echo current JDK has switched to openjdk version 11. && java -version"$ source ~/.zshrc# 3 查看是否配置成功
$ java -version
java version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)# (optional) 切换 jdk 版本
$ jdk8
current JDK has switched to oracle jdk version 1.8.
java version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)

2 Java 开发

Java程序开发三步骤:编写编译运行

  • 将 Java 代码编写到扩展名为 .java 的源文件中
  • 通过 javac 命令对该 java 文件进行编译,生成一个或多个字节码文件
  • 通过 java 命令对生成的 class 文件进行运行

[!danger] 注意点

  • 一个源文件可包含多个类,但只能有一个 public 类;且要求源文件名与 public 类名一致,否则编译报错
  • 一个源文件包含多个类时,编译后会生成多个 .class 字节码文件
  • main 方法是 Java 程序的入口,必须写在 public 类中,这样 JVM 才能从外部调用它

2.1 命令行编译运行

// HelloWorld.java
public class HelloWorld {public static void main(String[] args) {System.out.println("HelloWorld!!");}
}
$ javac HelloWorld.java   # javac 源文件名,可通过 -encoding utf-8 指定源文件的字符编码
$ java HelloWorld         # java 主类名

2.2 文档注释

文档注释内容可以被 JDK 提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。

/**
文档注释。这是我的第一个Java程序!^_^
@author songhk
@version 1.0
*/
public class HelloWorld{/**Java程序的入口@param args main方法的命令参数*/public static void main(String[] args){System.out.println("hello");}
}
$ javadoc -d mydoc -author -version HelloWorld.java

3 JVM 的内存划分

为 JVM 提高运算效率,对内存空间进行了不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式。

区域名称 作用
虚拟机栈 用于存储正在执行的每个 Java 方法的局部变量表等。
局部变量表存放了编译期可知长度的各种基本数据类型、对象引用 (reference 类型,它不等同于对象本身,是对象在堆内存的首地址),方法执行完自动释放。
堆内存 存储对象实例 (包括数组对象),new来创建的,都存储在堆内存。
方法区 存储已被虚拟机加载的类信息、常量、(静态变量)、即时编译器编译后的代码等数据。
本地方法栈 当程序中调用了 native 的本地方法时,本地方法执行期间的内存区域。
程序计数器 程序计数器是 CPU 中的寄存器,它包含每一个线程下一条要执行的指令的地址。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android-kotlin相关构建下载慢的问题处理建议

我们在导入其他的android项目获取需要手动改变android的依赖版本比如gradle版本,kotlin版本等等,点击同步构建时会发现需要很长的时间,有时还会失去连接,这是因为我们在国内的网络访问外网又没有梯子的情况下导致的 下载是解决这种情况的一些建议 1.使用梯子(有更好,没有…

一个.NET开源、快速、低延迟的异步套接字服务器和客户端库

前言 最近有不少小伙伴在问:.NET有什么值得推荐的网络通信框架?今天大姚给大家分享一个.NET开源、免费(MIT License)、快速、低延迟的异步套接字服务器和客户端库:NetCoreServer。 项目介绍 NetCoreServer是一个.NET开源、免费(MIT License)、快速、低延迟的异步套接字服…

VMware vCenter Server 7.0U3s 发布下载,新增功能概览

VMware vCenter Server 7.0U3s 发布下载,新增功能概览VMware vCenter Server 7.0U3s 下载 - 集中管理 vSphere 环境 Server Management Software | vCenter | 集中管理 vSphere 环境 请访问原文链接:https://sysin.org/blog/vmware-vcenter-7-u3/,查看最新版。原创作品,转载…

读构建可扩展分布式系统:方法与实践11强一致性

强一致性1. 强一致性 1.1. 最终一致数据库通过跨多台机器分区和复制数据集来获得可扩展性,其代价是要跨副本维持强数据一致性以及允许冲突写入1.1.1. 在更新数据对象后,不同的客户端可能会看到该对象的旧值或新值,直到所有副本都收敛到最新值1.2. 另一类分布式数据库提供一种…

提升软件测试效率与灵活性:探索Mock测试的重要性

Mock测试是测试过程中的一种方法,用于替代那些难以构造或获取的对象,通过创建虚拟对象来进行测试。所谓难以构造的对象如何理解呢? 举例来说,像HttpServletRequest这样的对象需要在具有servlet容器环境的情况下才能创建和获取。而难以获取的对象则是指需要准备相关环境才能…

《机器人SLAM导航核心技术与实战》第1季:第9章_视觉SLAM系统

《机器人SLAM导航核心技术与实战》第1季:第9章_视觉SLAM系统 视频讲解【第1季】9.第9章_视觉SLAM系统-视频讲解【第1季】9.1.第9章_视觉SLAM系统_ORB-SLAM2算法(上)-视频讲解【第1季】9.1.第9章_视觉SLAM系统_ORB-SLAM2算法(下)-视频讲解【第1季】9.2.第9章_视觉SLAM系统_…

Centos7.9 使用 Kubeadm 自动化部署 K8S 集群(一个脚本)

目录一、环境准备1、硬件准备(虚拟主机)2、操作系统版本3、硬件配置4、网络二、注意点1、主机命名格式2、网络插件 flannel 镜像拉取2.1、主机生成公私钥2.2、为啥有 Github 还用 Gitee2.3、将主机公钥添加到 Gitee2.3.1、复制主机上的公钥2.3.2、登录码云2.3.3、设置 -->…

Codeforces Round 974 (Div. 3)

拿小小号打的DIV3,中间看了会儿b站摸鱼,结果尼玛最后几点钟G没写完。。。A. Robin Helps 模拟题 int T, n, k;signed main(void) {for (read(T); T; T--) {read(n), read(k); int ans = 0; ll sum = 0;for (int i = 1; i <= n; i++) {int x; read(x);if (x >= k) sum +…

CSP-S 2024 初赛解析

时间紧任务重,可能有误,烦请指正 QwQ 题目内代码可能有些许错误,应该不大影响查看吧,这个难改就不改哩第1题 (2分) 在Linux系统中,如果你想显示当前工作目录的路径,应该使用哪个命令?( ) A. pwd B. cd C. ls D. echopwd 可以显示当前的工作路径 cd 表示切换工作路径 l…

CSP-J 2024 初赛解析

时间紧任务重,可能有误,烦请指正 QwQ第1题 (2分) 32 位 int 类型的存储范围是? A. -2147483647 ~ +2147483647 B. -2147483647 ~ +2147483648 C. -2147483648 ~ +2147483647 D. -2147483648 ~ +214748364832 位 int 类型,除最高位为符号位外,剩下 31 位均为数字。但 0 的二…

《MySQL 进阶篇》二十:锁

MySQL 锁的分类,表锁和行锁有哪些类型?Author: ACatSmiling Since: 2024-09-21锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(比如订单、金额等),就需要保证这个…

《MySQL 进阶篇》二十一:MVCC

MySQL 是如何处理并发问题的?什么是 MVCC?MVCC 的原理是什么?Author: ACatSmiling Since: 2024-09-21什么是 MVCC MVCC:Multiversion Concurrency Control,多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在 InnoDB 的事…