一、Java基础常识
1、java发展简史
版本 | 发行时间 | 说明 |
Java 1.0 | 1996.01.23 | Sun 公司发布 Java 的第一个开发工具包 ,发布内容包括Sun Classic VM、Applet、AWT |
Java 1.1 | 1997.02.19 | 发布内容包括JAR、JDBC、JavaBeans、RMI、Inner Class、Reflection |
Java 1.2 | 1998.12.08 | Java 拆分成:J2SE(标准版)、J2EE(企业版)、 J2ME(小型版) 发布内容包括EJB、Java Plug-in、Java IDL、Swing、JIT |
Java 1.3 | 2000.05.08 | JNDI 提升到平台级 |
Java 1.4 | 2004.02.06 | 发布内容包括正则表达式、异常链、NIO、日志类、XML、XSLT 装换器 |
Java 5.0 | 2004.09.30 | 版本号从 1.4 直接更新至 5.0, 平台更名为 JavaSE、JavaEE、JavaME 发布内容包括自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环;Java Memory Model,java.util.concurrent |
Java 6.0 | 2006.12.11 | 2009.04.20 Oracle 宣布收购 SUN 公司 |
Java 7.0 | 2011.07.02 | 发布内容包括G1、可并行的类加载框架、加强对非 Java 语言调用的支持等 |
Java 8.0 | 2014.03.18 | 此版本是继 Java 5.0 以来变化最大的版本。是长期 支持版本(LTS)。 新增Lambda、时间 API、日期 API、移除 HotSpot 永久代等新特性 |
Java 9.0 | 2017.09.22 | 此版本开始,每半年更新一次;Java 9.0 开始不 再支持 windows 32 位系统 ,发布内容包括Jigsaw 模块化;HotSpot 日志系统、HTTP 2 客户端 API 等 |
Java 10.0 | 2017.09.22 | 内部重构:同一源仓库、同一垃圾收集器接口、同一即使编译器接口等 |
Java 11.0 | 2018.09.25 | JDK 安装包取消独立 JRE 安装包,是长期支持版本 (LTS) 发布内容包括LTS、ZGC、Lambda 类型推断 |
Java 12.0 | 2019.03.19 | 发布内容包括Switch 表达式扩展、G1收集器优化;Shenandoah GC |
Java 13.0 | 2019.09.17 | 发布内容包括动态 CDS 档案、ZGC优化,释放内存还给操作系统、socket底层实现引入NIO等 |
Java 14.0 | 2020.03.17 | 发布内容包括打包工具、instanceof 的模式匹配、Switch 表达式-标准化、 JFR 事件流 、 外部存储器访问 API 等 |
Java 15.0 | 2020.09 | 发布内容包括EdDSA数字签名算法 、密封类(预览)、 隐藏类 、 废弃 RMI 激活机制、移除 Nashorn JavaScript引擎等 |
Java 16.0 | 2021.03 | 该版本相当于是将JDK14、JDK15的一些特性进行了正式引入,如instanceof模式匹配(Pattern matching)、record的引入等最终到JDK16变成了final版本 |
Java 17.0 | 2021.09 | 是一个LTS版本,发布内容包括增强型伪随机数生成器、 强封装JDK的内部API 等,主要是对前几个版本的整合和完善。 |
Java 18.0 | 2022.03 | 发布内容包括设置UTF-8为JavaAPI 的默认字符集、引入 jwebserver、重新实现核心的方法反射、地址解析 SPI等 |
Java 19.0 | 2022.09 | 发布内容包括虚拟线程(预览)、外部函数和内存 API(预览)、switch 模式匹配、结构化并发(孵化)等 |
Java 20.0 | 2023.03 | 发布内容包括虚拟线程、矢量API提案、结构化并发、外部函数和内存(FFM)API、记录模式(预览) |
Java 21.0 | 2023.09 | 是一个长期支持(LTS)版本,发布的内容包括:字符串模板、扩展 Z 垃圾收集器(ZGC)、虚拟线程、作用域值、密钥封装机制(KEM)的API接口、结构化并发 API 等15项新增内容 |
2、Java体系结构图
3、java技术体系平台
1)、javaSE(Java Standard Editio) 标准版 :
- 此版本以前称为 J2SE ,从JDK 5.0开始,改名为Java SE。
- 包括用户界面接口 AWT 及 Swing,网络功能与国际化、图像处理能力以及 输入输出支持等提供了完整的Java核心API
- 支持面向桌面级应用(如 Windows 下的应用程序)的 Java 平台,即定位 个人计算机的应用开发
2)、javaEE(Java Enterprise Edition) 企业版:主要用于开发J2EE
- 版本以前称为 J2EE ,从JDK 5.0开始,改名为Java EE,从2018年2月26日开始,J2EE改名为Jakarta EE
- 为开发企业环境下的应用程序提供的一套解决方案,即定位在服务器端的 Web 应用开发
- JavaEE 是 JavaSE 的扩展,增加了用于服务器开发的类库,包含了诸Servlet、Jsp等技术
3)、javaME(Java Micro Editio):主要用于移动设备、嵌入式设备上的java应用程序,
- 此版本以前称为 J2ME,从JDK 5.0开始,改名为Java ME
- 支持 Java 程序运行在移动终端(手机、机顶盒)上的平台,即定位在消 费性电子产品的应用开发
- JavaME 是 JavaSE 的内伸,精简了 JavaSE 的核心类库,同时也提供自己的 扩展类。增加了适合微小装置的类库:javax.microedition.io.*等
4)、JavaSE、Java EE及Java ME三者之间的关系
4、java特性(特点)
- 简单性:Java语言的简单性体现在它的语法与C语言和C++语言很相似,很多程序员能够轻松地学习Java。Java没有复杂的特性,比如操作符的重载和多继承,而且Java语言不使用指针,避免了程序员需要管理内存的问题。所以,Java语言的学习和编写代码非常方便和简单
- 跨平台性:Java的特点之一就是跨平台性,它可以在不同的计算机上运行。Java源程序代码经过编译后生成二进制字节码,这些字节码与平台无关,但可以由Java虚拟机识别。这使得Java代码具备跨平台性,可以应用于不同的操作系统和硬件环境
- 可移植性:Java的特点之一就是可移植性,Java程序可以运行到任何支持Java的操作系统上。这一点使得Java程序在不同的硬件平台上都能够正常运行,并且不需要依赖其他硬件平台。这也是Java得以广泛应用于各个领域的原因之一
- 稳健性:Java的特点之一就是稳健性。Java是一种安全可靠、高度规范的编程语言,它通过静态分析、静态生成和静态编译等方式来保证安全性。在网络、分布环境下,Java的运行环境更加复杂,不易被攻击者侵入。另外,Java的内存安全性也得益于它的安全性设计,它通过内存泄漏防护和代码注入防护措施来避免内存泄露。因此,Java的稳健性是其重要的特点之一。
- 多线程:Java的特点之一就是支持多线程,多线程是一种并发编程的方式,可以同时运行多个小任务,提高程序的并发性能和实时控制性能。Java的run()方法可以同时运行多个线程,而不需要创建独立的线程对象。通过多线程,可以实现异步执行,同时可以同步执行多个小任务,提高程序的并发性能和实时控制性能
- 分布式:Java的特点之一就是分布式,它支持在网络上应用,并且是分布式语言。Java可以处理TCP/IP协议,方便地访问其他对象。同时,它还支持基于TCP/IP协议的子库,可以非常方便地处理网络上的动态内容
- 动态性:Java的特点之一就是具有动态性。Java语言的设计使其适合于动态地装入和运行复杂的对象,包括类库的扩展。由于C++不支持动态性,而Java的动态特性使得程序员可以编写灵活的代码来解决动态问题,而不会受限于C++的静态编译。这使得Java成为一种适用于动态编程的编程语言。
- 还包括其他特点,如面向对象、安全性、体系结构中立、解释型、高性能等
5、JDK、JRE与JVM
- JDK (Java Development Kit):是Java程序开发工具包,包含 JRE 和开发人员使用的工具,
JDK = JRE + java 的开发工具 [如:java, javac,javadoc,javap 等]
- JRE (Java Runtime Environment) :是Java程序的运行时环境,包含JVM 和运行时所需要的核心类库, 即JRE = JVM + Java 的核心类库
- JVM( Java Virtual Machine):Java虚拟机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器,对于不同的操作系统,有不同的虚拟机。
- JDK、JRE与JVM三者之间的关系如图
6、编译与运行
- 编译(javac):将.java 源代码文件编译为 .class 字节码文件
- 运行(java): 将.class 字节码文件加载到java虚拟机中运行
二、第一个java程序HelloWord
1、开发步骤:
Java 程序开发三步骤:编写、编译、运行。
1)、编码:将 Java 代码编写到扩展名为 .java 的源文件中
- 在 E:\javaBasc目录下新建文本文件,完整的文件名修改为 HelloWorld.java,其中文件名为 HelloWorld,后缀名必须为.java
- 用记事本或 Sublime Text等文本编辑器打开,在文件中输入如下代码,并且保存
public class HelloWorld{
public static void main(String[] args) {
System.out.println("I’m Leading java");
}
}
2)、编译:通过 javac.exe 命令对该 java 文件进行编译,生成一个或多个字节码文件
- 在 DOS 命令行中,进入E:\javaBasc 目录,使用 javac 命令进行编译,或使用文件资源管理器打开E:\javaBasc 目录,然后在地址栏输入 cmd。
- 输入:javac Java 源文件名.后缀名 回车
3)、运行:通过 java.exe 命令对生成的 class 文件进行运行
- 在 DOS 命令行中,在字节码文件目录下,使用 java 命令进行运行。
- java HelloWord执行编译后的字节码文件
注意:在运行字节码文件时,不需要带后缀名,带后缀名程序运行将报错,如
2、第一个Java程序解释说明
3、Java程序的执行流程
4、Java 开发注意事项和细节说明
- Java源文件以.java为扩展名,源文件中的基本组成部分为类
- Java应用程序的执行入口为main()方法,它是固定的书写格式
- Java程序中是严格区分大小写
- java方法由一条或多条语句组成,每条语句必须以英文状态下";"结束
- 程序中的{}都是成对出现,缺一不可
- 一个源文件中只能有一个公共的类(即public修饰的类)
三、Java转义字符
序号 | 转义字符 | 说明 |
1 | \t | 一个制表位,实现对齐的功能 |
2 | \n | 换行符 |
3 | \\ | 双斜线,表示一个\ |
4 | \" | 一个" |
5 | \' | 一个' |
6 | \r | 一个回车换行符 |
四、Java注释
用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性(可读性);注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。
1)、Java 中的注释类型包括单行注释、多行注释和文档注释
- 单行注释格式: // 注释文字
- 多行注释格式: /* 注释文字 */
- 文档注释格式:/** 注释文字 */
/**
* 这是一个文档注释
*/
public class HelloWord {
/*
这是一个多行注释
*/
public static void main(String[] args) {
//这是一个单行注释
System.out.println("I'm Leading java");
}
}
2)、多行注释里面不允许有多行注释嵌套 ,文件可以报错成功,但在编译时将会报错
/**
* 这是一个文档注释
*/
public class HelloWord {
/*
这是一个多行注释
/*
* 这是多行注释嵌套
*/
*/
public static void main(String[] args) {
//这是一个单行注释
System.out.println("I'm Leading java");
}
}
3)、被注释的文字,不会被 JVM(java 虚拟机)解释执行,编译后的字节码文件不会显示被注释的代码块信息
五、Java代码编写规范
在实际项目开发中,遵守Java编程规范可以提高代码的可读性、可维护性和可扩展性,也可以减少代码错误和维护成本。同时,为了保证项目的一致性和代码质量,团队中的每个人都应该遵守Java编程规范
以下是一些常见的注意事项
- 代码缩进: 一定要有缩进。缩进就像人得体的衣着一样,缩进的快捷键 tab 键或4个空格
- 必要的空格 :变量类型、变量、赋值符号、变量值之间填充相应空格,使代码更美观
- 类、类属性、类方法的注释必须使用多行注释或文档注释,不得使用单行注意
- 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚
- 要避免使用魔法数,它指的是数字字面量或字符串字面量,应该使用常量或枚举类型
- 避免使用全局变量全局变量会影响代码的可读性和可维护性,应该使用局部变量或者封装变量。在实际项目开发中,应该尽可能地避免使用全局变量。
- 避免使用嵌套过深的语句,嵌套过深的语句会影响代码的可读性,应该使用分支语句或循环语句等结构化语句。在实际项目开发中,应该尽可能地避免使用嵌套过深的语句
- 每行代码的长度尽量不超过80个字符,对于较长的代码可以使用换行符进行分割;可以提高代码的可读性和可维护性,同时也方便代码审查和重构