曾经沧海难为水,除却巫山不是云。|

Joey-Wang

园龄:4年3个月粉丝:17关注:0

2024-09-22 10:06阅读: 10评论: 0推荐: 0

第01章_Java语言概述

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 ~/.zshrc

JAVA_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 中的寄存器,它包含每一个线程下一条要执行的指令的地址。

本文作者:Joey-Wang

本文链接:https://www.cnblogs.com/joey-wang/p/18424972

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Joey-Wang  阅读(10)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开