正文开始。
1. 什么是 Java?
Java 是一门面向对象的计算机高级编程语言。作为世界上最流行的编程语言之一,它的可移植性、安全性非常强大,并且随着发展,开发社区最为完善,功能最为丰富。
Java 在桌面应用开发、企业级应用开发、移动应用开发、服务器系统、大数据开发、游戏开发等方面都发挥着不可替代的作用。
2. 配置 Java 开发环境
2.1 安装 JDK
Java 语言的产品是 JDK(Java Development Kit : Java开发者工具包),必须要 安装 JDK 才可以使用 Java 语言。如果把使用 Java 语言开发比作做饭,那么 JDK 就可以看作菜刀、调料等一整套工具。
2.2 JDK 的组成
JDK 分为三个部分:
- JVM(Java Virtual Machine):Java 虚拟机,真正运行 Java 程序的地方。
- 核心类库:Java 自己写好的程序,给程序员自己的程序调用的,提高开发效率。
- 开发工具:java-执行工具、javac-编译工具等
JRE(Java Runtime Environment):Java 的运行环境,核心內容是核心类库和 JVM
2.3 集成开发环境的配置
集成开发环境(IDE,Integrated Development Enviroment)是把代码的编写、编译、执行等多种功能综合到一起的开发工具,可以进行代码智能提示、错误提醒、项目管理等功能。
常见的 Java IDE 工具有:Eclipse、MyEclipse、IntelliJ IDEA、Jbuilder、NetBeans等等,这里我们使用 IntelliJ IDEA 来学习,IntelliJ IDEA 下载链接。
注意:建议修改安装路径以便于管理(不要安装在有空格和中文的路径下)
2.3.1 设置 IDEA 主题
2.3.2 设置 IDEA 字体
2.3.3 设置 IDEA 背景色

2.3.4 IDEA 常用快捷键
快捷键 | 功能 |
---|---|
main/psvm、sout、… | 快速键入相关代码 |
Ctrl + D | 复制当前行到下一行 |
Ctrl + Y | 删除所在行 |
Ctrl + ALT + L | 格式化代码 |
ALT + SHIFT + ↑ , ALT + SHIFT + ↓ | 上下移动当前代码 |
Ctrl + / | 使用 // 注释代码 |
Ctrl + Shift + / | 使用 /**/ 注释代码 |
2.3.5 IDEA 导入模块
IDEA 中导入模块有些点需要注意,这里着重讲解一下,还不了解模块是什么的朋友可暂时跳过,不影响后续学习。
- 关联导入(并不改变原模块的位置)
- 若想要使导入的模块与工程文件位置统一,可以将指定模块复制到工程文件下,并按上述步骤导入。
3. Java 程序的结构
Java 程序分为四种结构,从大到小依次为:
- project:项目
- module:模块
- package:包
- class:类
将整个程序划分为了四种结构,是为了方便管理项目代码,更有利于提高开发效率。
如果将 project 比作一个小区,那么 module 就相当于小区里的一栋楼,package 就相当于一栋楼里的一个楼层,class 就相当于一个楼层中的一个房间。
4. 第一个 Java 程序
下面展示执行程序的完整步骤:
- 打开 IDEA 并新建一个项目:
选择空项目类型
- 新建模块(ps:这里加了汉化插件)
- 新建包,包的命名规则一般是公司官方的域名倒置,并且将www部分替换为当前文件的作用说明,例如:com.taobao.test
- 新建类
- 编写代码并运行
package com.wwangxu.test;
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello World!");
}
}
恭喜你!刚刚你成功运行了一个 Java 程序,让我们总结一下整个流程:
- 新建项目
- 新建模块
- 新建包
- 新建类
- 编写代码
- 运行
5. Java 基础知识
5.1 注释
注释就是对代码的说明,并不影响程序的执行,编译后生成的.class文件中会将注释去掉,写注释的目的就是让开发人员能更轻松地看懂代码,提高程序代码的可读性。
基本格式:
// 单行注释
/*
多行注释
多行注释
*/
/**
文档注释:
文档注释的內容是可以提取到一个程序说明文档中去的
*/
5.2 字面量
字面量是用于表达源代码中一个固定值的表示法,通俗来讲就是告诉程序员数据在程序中的书写格式
数据类型 | 生活中的写法 | 程序中的写法 | 说明 |
---|---|---|---|
整数 | 13,-21 | 13,-21 | 写法一致 |
小数 | 1.3,-2.1 | 1.3,-2.1 | 写法一致 |
字符 | A,0,好 | ‘A’,‘0’,‘好’ | 程序中必须使用单引号,有且只能有一个字符 |
字符串 | 你好呀 | “你好呀”,“” | 程序中必须使用双引号,內容可有可无 |
布尔值 | 真、假 | true、false | 只有两个值:true 代表真,false 代表假 |
空值 | / | null | 一个特殊的值,空值 |
5.3 变量
变量是用来记录数据的,可以把变量想象成一个容器,里面存放的就是数据。
格式如下:
//数据类型 变量名称 = 数据;
int a = 0;
//整型变量 a 存储了 0 这个整型数据
使用变量有如下注意事项:
- 变量要先声明才能使用
- 变量是什么类型,就只能存储该类型的数据
- 变量的作用域是它所在的一对花括号{}中,同一范围内,变量不能重名;不同范围中的变量彼此之间相互独立
- 变量定义的时候可以不赋初始值,但在使用时,变量必须有值
5.4 关键字
Java 语言自己用到的一些词,有特殊作用的,我们称之为关键字,关键字不能用来作为类名、变量名。
常见关键字如下:
5.5 标识符
标识符就是名字,我们在写程序时会起一些名字,比如类名、变量名等等都是标识符。
标识符的要求:
- 只能由数字、字母、下划线_和美元符$等组成。
- 不能以数字开头
- 不能以关键字命名
- 标识符对大小写敏感,例如 test 与 Test 是两个不同的标识符。
标识符的规范:
- 变量名称:满足标识符规则,同时建议用英文、有意义、首字母小写,满足“小驼峰命名法”,例如testCases
- 类名称:满足标识符规则,建议全英文、有意义、首字母大写,满足“大驼峰命名法”,例如TestCases
5.6 数据类型
数据类型分为基本数据类型和引用数据类型,这里只对基本数据类型做说明,引用数据类型留到后面讲。
需要注意的是,当我们任写一个整数时,它都默认是int类型的;任写一个小数时,它都默认是double类型的。例如:
// long a = 12345678901;
// 数据默认是 int 类型,但12345678901超过了 int 类型的数据范围,所以会报错
// 将数据设置为 long 类型时,需要在数据末尾加 L 或 l
long a = 12345678901L;
// float b = 3.14;
// 数据默认是 double 类型,但 b 是 float 类型,所以会报错
// 将数据设置为 float 类型时,需要在数据末尾加 F 或 f
float b = 3.14F;
5.7 自动类型转换
5.7.1 赋值的自动类型转换
在 Java 语言中,当不同类型的数据进行赋值操作时,内存占用小的变量,可以直接赋值给内存占用大的变量
例如:
byte a = 12;
short b = a;
// a在内存中:00001100(8位)
// b在内存中:00000000 00001100(16位)
其他形式的自动类型转换:
5.7.2 表达式的自动类型转换
在表达式中,内存占用小的变量会自动转换成表达式中较大范围的类型,再参与运算
注意:
- 表达式的最终结果类型由表达式中的最高类型决定。
- 在表达式中,byte、short、char 是直接转换成 int 类型参与运算的。
例如:
byte a = 1;
int b = 10;
double c = 1.1;
// 表达式 a + b
// 是将 a 的类型转换为 int 类型,再进行运算
// 表达式结果的类型为 int
//表达式 b + c
// 是将 b 的类型转换为 double 类型,再进行运算
// 表达式结果的类型为 double
5.8 强制类型转换
内存占用大的数据或变量,直接赋值给内存占用小的变量,会报错,例如:
int a = 20;
byte b = a;//报错
强制类型转换可以将数据类型进行指定转换
例如:
int a = 20;
byte b = (byte)a;
// 将 int 类型的变量 a 强制类型转换为 byte 类型,从而使表达式合法
强制类型转换的执行原理:
需要注意的是:
- 强制类型转换可能造成数据丢失 / 溢出
- 浮点型强转成整型,会直接丢掉小数部分,保留整数部分
5.9 运算符
5.9.1 基本运算符
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | 使两个操作数相加 |
- | 减 | 使两个操作数相减 |
* | 乘 | 相当于“×” |
/ | 除 | 相当于“÷” |
% | 取余 | 获取两个数做除法的余数 |
注意:
- 运算符+可以用于字符串的连接符,连接的结果是一个字符串。例如:
String a = "abcd" + 5; // "abcd5"
String b = "abcd" + "aa"; // "abcdaa"
5.9.2 自增自减运算符
符号 | 作用 |
---|---|
自增:++ | 放在某个变量前面或后面,对自身的值加1 |
自减:– | 放在某个变量前面或后面,对自身的值减1 |
注意:
- 自增或自减运算符放在变量前面或后面时,是有区别的。
- 放在变量的前面,是先对变量进行自增或自减,然后再拿变量的值进行运算。
- 放在变量的后面,是先拿变量的值进行运算,再对变量的值进行自增或自减。
例如:
int c = 10;
int b = c++ + ++c;
// 结果:
// b = 22
// a = 12
5.9.3 赋值运算符
符号 | 用法 | 作用 | 底层代码形式 |
---|---|---|---|
= | a = b | 赋值 | 将右边值赋给左边变量 |
+= | a += b | 加后赋值 | a = (a的类型)(a + b) |
-= | a -= b | 减后赋值 | a = (a的类型)(a - b) |
*= | a *= b | 乘后赋值 | a = (a的类型)(a * b) |
/= | a /= b | 除后赋值 | a = (a的类型)(a / b) |
%= | a %= b | 取余后赋值 | a = (a的类型)(a % b) |
5.9.4 关系运算符
符号 | 例子 | 作用 |
---|---|---|
> | a > b | 判断 a 是否大于 b |
>= | a >= b | 判断 a 是否大于等于 b |
< | a < b | 判断 a 是否小于 b |
<= | a <= b | 判断 a 是否小于等于 b |
== | a == b | 判断 a 是否等于 b |
!= | a != b | 判断 a 是否不等于 b |
上述表达式的结果为:成立返回 true;不成立返回 false;
5.9.5 逻辑运算符
符号 | 叫法 | 例子 | 运算逻辑 |
---|---|---|---|
& | 逻辑与 | 2 > 1 & 3 > 2 | 多个条件必须都是 true,结果才是 true,反之为 false |
| | 逻辑或 | 2 > 1 | 3 < 5 | 多个条件中只要有一个 true,结果就是 true |
! | 逻辑非 | !(2 > 1) | 取反操作,!true == false、!false == true |
^ | 逻辑异或 | 2 > 1 ^ 3 > 1 | 前后条件结果相同,结果为 false;前后条件结果不同,结果为 true |
&& | 短路与 | 2 > 10 && 3 > 2 | 判断逻辑同“&”相同,但若左边为 false,则右边直接跳过不执行 |
|| | 短路或 | 2 > 1 || 3 < 5 | 判断逻辑同“|”相同,但若左边为 true,则右边直接跳过不执行 |
5.9.6 三目操作符
基本格式:条件表达式 ? 值1 : 值2;
执行流程:首先判断条件表达式,若为 true,则结果为值1、若为 false,则结果为值2
例如:
int a = 1 > 3 ? 7 : 8;
// 1 > 3 为 false 所以结果为8
// a == 8
5.9.7 运算符优先级
在表达式中,运算符优先级越高,执行顺序就越靠前。
运算符优先级由高到低排列为:
优先级 | 运算符 |
---|---|
1 | () |
2 | !、-、++、– |
3 | *、/、% |
4 | +、- |
5 | <<、>>、>>> |
6 | <、<=、>、>=、instanceof |
7 | ==、!= |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ? : |
14 | =、+=、-=、*=、/=、%=、&= |
完