文章目录
前言
“楚塞三湘接,荆门九派通。 江流天地外,山色有无中。 郡邑浮前浦,波澜动远空。 襄阳好风日,留醉与山翁” — 王维《汉江临眺》
1. Java基础概述
1.1 java简介
Java是一种面向对象的编程语言,发明者为James Gosling(詹姆斯·高斯林),由Sun公司在1995年5月发布。
1.2 java主要特点
- 面向对象:Java是一种面向对象编程语言,它将所有功能封装在对象和类中。支持封装、继承和多态等面向对象的特性。
- 平台独立性:Java具有平台独立性,通过JVM(Java Virtual Machine,Java虚拟机)实现“一次编写,到处运行(Write Once, Run Anywhere)”,可以无障碍的运行在Windows、MacOS,Linux等系统上。
- 简单性:Java一种易于学习和使用的编程语言。它简化了C++的许多复杂性,比如去除了指针和多继承等特性。
- 安全性:Java设计时就考虑了安全性,比如在运行时环境中加入了类加载器和字节码验证器。
1.3 Java三大平台
- Java SE (Java Standard Edition):Java SE提供了Java编程语言的核心功能,包括所有的基础类库、Java虚拟机(JVM)、以及开发工具(如编译器、调试器),是其他两个平台的基础。
- Java EE (Java Enterprise Edition):Java EE是在Java SE的基础上构建的,它提供了创建大型、分布式、多层次的网络应用程序所需的类库和API,支持企业级应用的开发。
- Java ME (Java Micro Edition):Java ME是一个轻量级的平台,提供了适用于小型设备(如手机、组织器、电视机顶盒)的Java编程环境。
1.4 Java的发展历史
时间 | 发展 |
---|---|
1991年 | Sun公司的James Gosling团队开发Oak语言,即Java语言的前身 |
1995年5月 | Java 1.0 发布,这是Java语言的第一个正式版本 |
1998年12月 | Java 2企业版J2EE发布 |
1999年6月 | Sun公司发布Java的三个版本,标准版(JavaSE)、企业版(JavaEE)和微型版(JavaME) |
2004年9月 | Java 5.0 发布,引入了泛型、枚举、自动拆装箱等特性 |
2014年3月 | Java 8发布,是Java的长期支持版本(LTS),引入了Lambda表达式、Stream API等特性 |
2018年9月 | Java 11发布,是Java的长期支持版本(LTS),引入了ZGC(Z Garbage Collector)等特性 |
2021年9月 | Java 17发布,是下一个LTS版本,提供了对以前非LTS版本引入的新特性的稳定支持 |
Java语言的发展一直保持着相对稳定的节奏,每六个月发布一个新版本,每三年发布一个长期支持版本。随着技术的不断进步,Java社区也在不断推动语言的发展,以满足现代软件开发的多样化需求。
1.5 开发环境搭建
1.5.1 JDK下载和安装
1. JDK概述
JDK是Sun公司(现为Oracle公司)为Java开发者提供的一套软件开发工具,是用于Java程序开发的核心工具包。它包含了编写、编译、调试和运行Java程序所需的所有工具和库。
2. 下载JDK
第一步:进入官网,点击Products
第二步:点击Hardware and Software中的Java
第三步:下拉至该页面,点击Oracle JDK
第四步:选好版本和系统,本教程为JDK22,Windows系统,点击x64 Installer下载即可
3. 安装JDK
傻瓜式安装,下一步即可,注意安装路径不要有中文、空格等一些特殊符号
4. JDK的安装目录介绍
目录名称 | 说明 |
---|---|
bin | 该路径下存放了JDK的各种工具命令。javac和java就放在这个目录 |
conf | 该路径下存放了JDK的相关配置文件 |
include | 该路径下存放了一些平台特定的头文件 |
jmods | 该路径下存放了JDK的各种模块 |
legal | 该路径下存放了JDK各模块的授权文档 |
lib | 该路径下存放了JDK工具的一些补充JAR包 |
1.5.2 配置环境变量
1. 配置环境变量的作用
-
如果想要在任意目录下,都可以启动某一个软件,那么就可以把这个软件的路径配置到环境变量中的PATH里面。
-
启动软件的时候,操作系统会先在当前路径下找,如果在当前录课没有再到环境变量的路径中去找。如果都找不到就提示无法启动。
-
开发Java程序,需要使用JDK提供的javac.exe、java.exe等命令,而这些工具在JDK的安装目录的bin目录下,如果不配置环境变量,那么这些命令只可以在bin目录下使用,而我们想要在任意目录下都能使用,所以就要配置环境变量。
2. 配置环境变量步骤:
第一步:此电脑 --> 属性 --> 高级系统设置 --> 高级 --> 环境变量
第二步:找系统变量,新建变量JAVA_HOME,并赋值,值为你下载jdk的路径
第三步:找系统变量里面的PATH,并新建%JAVA_HOME%\bin
1.5.3 IntelliJ IDEA下载和安装
1. IntelliJ IDEA概述
IntelliJ IDEA是一款优秀的Java语言集成开发环境,在业界被公认为最好的Java开发工具,支持Git、JUnit等,IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格。
2. 下载IntelliJ IDEA
官网:https://www.jetbrains.com/idea
第一步:打开官网,点击Download
第二步:选择.exe(Windows),点击下载
3. 安装IntelliJ IDEA
第一步:双击安装包,点击next
第二步:点击Browse修改安装路径,修改完毕点击next
第三步:勾选64-bit launcher,点击next
第四步:点击Install
第五步:点击Finish,完成安装
4. IntelliJ IDEA中项目的层次结构
-
project(项目、工程):是 IntelliJ IDEA 中最高级别的结构,它包含所有的模块。
-
module(模块):是项目的一部分,可以独立编译和运行。一个项目可以有多个模块。
-
package(包):在模块内部,用于组织相关的类和接口。
-
class(类):位于包中,是编程的基本单元。
2. Java基础语法
2.1 java程序的基本格式
-
类是编程的基本单元,main方法是程序的主入口。
-
类定义规则:
修饰符 class 类名{
程序代码;
}
- 代码示例:
public class HelloWorld {
public static void main(String[] args) {
// 输出HelloWorld
System.out.println("HelloWorld");
}
}
2.2 注释
Java中的注释分为三种:
- 单行注释:
// 这是单行注释文字
- 多行注释:
/*
多行注释
多行注释
多行注释
*/
- 文档注释
/**
* 文档注释
* 文档注释
*/
注意:注释的内容不会参与编译和运行的,仅仅是对代码的解释说明而已。
2.3 标识符
2.3.1 Java标识符概念
在Java编程语言中,标识符是用来定义类,方法,变量等的名称。
2.3.2 命名规则
- 由数字、字母、下划线(_)、美元符($)组成。
- 不能以数字开头。
- 不能是关键字。
- 区分大小写,例如:number和Number是两个不同的标识符。
2.3.3 命名习惯
-
大驼峰命名法
-
使用场景:常用于类名,接口名和枚举名。
-
命名规则:如果是一个单词,那么首字母大写,如:Demo、Test。
如果是多个单词,那么每一个单词首字母都需要大写:如:HelloWorld、MaxAge。
-
-
小驼峰命名法
-
使用场景:常用于变量名、方法名、参数名。
-
命名规则:如果是一个单词,那么全部小写,如:demo、test。
如果是多个单词,那么从第二个单词开始,首字母都需要大写:如:helloWorld、maxAge。
-
注意:命名要见名知意。
国内大多遵守alibaba开发手册https://developer.aliyun.com/ebook/386。
2.4 关键字
Java关键字是Java语言中具有特定含义的单词(共50个,都是小写)
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
注意:关键字很多,不用可以去记,多看多用即可。
2.5 数据类型
2.5.1 Java数据类型分类
- 基本数据类型:int,double,char,boolean等
- 引用数据类型:类,数组,枚举,注解等
2.5.2 基本数据类型(四类八种)
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
整数 | byte | 1 | 负的2的7次方 ~ 2的7次方-1(-128~127) |
short | 2 | 负的2的15次方 ~ 2的15次方-1(-32768~32767) | |
int | 4 | 负的2的31次方 ~ 2的31次方-1 | |
long | 8 | 负的2的63次方 ~ 2的63次方-1 | |
浮点数 | float | 4 | 1.401298e-45 ~ 3.402823e+38 |
double | 8 | 4.9000000e-324 ~ 1.797693e+308 | |
字符 | char | 2 | 0-65535 |
布尔 | boolean | 1 | true,false |
注意:在java中整数默认是int类型,浮点数默认是double类型。
定义long类型的变量,数据值后面加L后缀。
定义float类型的变量,数据值后面加F后缀。
2.6 常量
2.6.1 整型常量
1. 整型即整数,有二进制、八进制、十进制、十六进制四种表示形式
二进制:由数字0和1组成,以0b或者0B开头,目的是与十进制进行区分,如:0b01101100、0B10110101。
八进制:由数字0~7组成,以0开头,如:0342。
十进制:由数字0~9组成,,如:198。
十六进制:由数字0~9和A-F(不区分大小写)组成,以0x或者0X开头,如:0X25AF。
package com.syh;
public class Esther {
public static void main(String[] args) {
// 1.二进制数
System.out.println("二进制数:" + 0B1111111); // 127
// 2.八进制数
System.out.println("八进制数:" + 0177); // 127
// 3.十进制数
System.out.println("十进制数:" + 127); // 127
// 4.十六进制数
System.out.println("十六进制数:" + 0x7F); // 127
}
}
2. 进制转换
在计算机科学中,常见的进制转换包括二进制(binary)、八进制(octal)、十进制(decimal)和十六进制(hexadecimal)之间的转换。下面是一些基本的转换方法:
十进制转二进制
1. 将十进制数除以2
2. 得到商和余数
3. 将商继续除以2,直到商为0
4. 将记录的余数倒序排列,得到二进制数
示例:将十进制数 13 转换为二进制
13 / 2 = 6 ... 余数 1
6 / 2 = 3 ... 余数 0
3 / 2 = 1 ... 余数 1
1 / 2 = 0 ... 余数 1
二进制结果为 1101
。
二进制转十进制
1. 从最低位开始,每一位乘以2的幂次(从0开始,一次递增)。
2. 将所有结果相加。
示例:将二进制数 1101
转换为十进制。
1*(2^3) + 1*(2^2) + 0*(2^1) + 1*(2^0) = 8 + 4 + 0 + 1 = 13
十进制结果为 13
。
2.6.2 浮点数
- 浮点数即小数,分为单精度浮点数(float)和双精度浮点数(double)两种类型。
- 单精度浮点数后面以F或者f结尾,双精度浮点数后面以D或者d结尾,不加后缀默认为double。
- 指数形式表示:5.022e+23f。
package com.syh;
public class Esther {
public static void main(String[] args) {
// 1.单精度浮点数
System.out.println(100.0F); // 100.0
// 2.双精度浮点数
System.out.println(100.0D); // 100.0
// 3.指数形式表示
System.out.println(1e2); // 100.0
}
}
2.6.3 字符常量
1.字符常量概述: 用于表示单个字符,用单引号(‘’)引起来,字符常量可以是字母、数字、转义字符等。
package com.syh;
public class Esther {
public static void main(String[] args) {
// 字符常量
System.out.println('a'); // a
System.out.println('1'); // 1
System.out.println('\u0000'); // 空白字符
}
}
2.转义字符
在Java中,转义字符用于在字符串字面量中表示那些无法直接输入的字符。转义字符以反斜杠(\)开头,后跟一个特定的字符或数字序列,表示一个特定的控制字符或其他特殊字符。以下是一些常见的Java转义字符:
转义序列 | 描述 |
---|---|
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\\ | 反斜杠 |
\" | 双引号 |
\' | 单引号 |
\b | 退格(backspace) |
\f | 换页 |
\0 | 空字符(null) |
\ddd | 八进制字符(ddd表示1到3位八进制数) |
\u0000 | 16进制Unicode字符(xxxx表示4位十六进制数) |
2.6.4 字符串常量
字符串常量用于表示多个字符,用双引号(“”)引起来
package com.syh;
public class Esther {
public static void main(String[] args) {
// 字符串常量
System.out.println("HelloWorld"); // HelloWorld
System.out.println('123'); // 123
}
}
2.6.5 布尔常量
布尔常量即布尔型的值,用于区分事物的真和假,布尔常量有true和false两个值
package com.syh;
public class Esther {
public static void main(String[] args) {
// 布尔常量
System.out.println(true); // true
System.out.println(false); // false
}
}
2.6.6 null常量
null常量只有一个值null,表示对象的引用为空,它可以赋值给任何引用数据类型(类、接口、数组等)的变量,但不能赋值给基本数据类型(如 int
, double
, char
等)的变量。
package com.syh;
public class Esther {
public static void main(String[] args) {
// null常量
Object obj = null;
System.out.println(obj);
}
}
2.6.7 查看常量类型
1.使用 instanceof 运算符
package com.syh;
public class Esther {
public static void main(String[] args) {
// 1. 使用instanceof运算符查看常量类型
Object number = 24;
if (number instanceof Integer) {
System.out.println(number + "是整型");
} else {
System.out.println(number + "不是整型");
}
}
}
2.使用反射
package com.syh;
public class Esther {
public static void main(String[] args) {
// 1. 使用反射查看常量类型
Object number = 24;
String name = number.getClass().getName();
System.out.println(name); // java.lang.Integer(即为int整型)
}
}
2.7 变量
2.7.1 变量的定义格式
数据类型 变量名 = 数据值;
例如:int a = 10;
2.7.2 Java代码示例
public class VariableDemo{
public static void main(String[] args){
//定义一个整数类型的变量
//数据类型 变量名 = 数据值;
int a = 10;
System.out.println(a);
//定义一个小数类型的变量
double b = 3.14;
System.out.println(b);
}
}
2.7.3 字符和字符串相加
字符相加:首先会将字符转换为 ASCII码,然后再相加。
字符串相加:字符串相加实际上为拼接操作。
package com.syh;
public class Esther {
public static void main(String[] args) {
// 1.字符相加
char a = 'a';
int b = 1;
System.out.println(a + b); // 98,a的ASCII码是97
// 2.字符串相加
String str1 = "abc";
String str2 = "def";
System.out.println(str1 + str2);
}
}
2.7.4 变量的类型转换
在Java中,类型转换分为两种:隐式类型转换(也称为自动类型转换)和显式类型转换(也称为强制类型转换)。
1. 隐式类型转换(自动类型转换)
隐式类型转换是Java自动执行的转换,当将一个低精度的数值类型赋值给高精度的数值类型时,或者将一个小范围的数值类型赋值给一个大范围的数值类型时,会发生隐式类型转换。
例如:
int num = 10; // int类型
double decimal = num; // 自动转换为double类型
在这个例子中,int
类型的num
可以自动转换为double
类型,因为double
类型的范围比int
大。
2. 显式类型转换(强制类型转换)
显式类型转换需要程序员明确指出,通常在将高精度的数值类型赋值给低精度的数值类型时使用。显式类型转换可能会导致数据丢失或精度降低。以下是显式类型转换的语法:
语法:目标数据类型 变量名 = (目标数据类型)被强转的数据;
例如:
double decimal = 10.5; // double类型
int num = (int) decimal; // 显式转换为int类型,小数部分会被丢弃
在这个例子中,将double
类型的decimal
赋值给int
类型的num
时,必须使用(int)
进行显式类型转换。由于int
类型不支持小数,转换过程中小数部分会被丢弃。
注意事项
- 精度丢失:在进行显式类型转换时,如果目标类型无法容纳原始值,可能会导致数据丢失或精度降低。
- 类型兼容性:并非所有类型之间都可以进行转换。例如,不能将非数值类型转换为数值类型,除非进行了适当的转换或解析。
- 包装类转换:除了基本数据类型之间的转换,Java还提供了包装类(如
Integer
,Double
等)之间的转换方法。
显式类型转换时应当谨慎使用,确保不会丢失重要的数据或引入错误。在编写代码时,应当尽可能利用隐式类型转换,以保持代码的清晰和安全性。