一. 前言
1. Java发展史
- Java 8 版本目前使用居多(2014年发布)
2. 计算机基础知识
- 二进制:bit(比特、位);莱布尼茨发明
- 字节:Byte;计算机中的最小存储单位;8位为1个字节:1 Byte = 8 bit
- 1024 进制:1 KB = 1024 Byte;1 MB = 1024 KB
3. 常用命令
MS-Dos (Microsoft Disk Operating System)操作系统在Windows中以命令提示符(cmd
打开)形式存在
- 切换盘符:
C:
、d:
、E:
- 进入文件夹:
cd 文件夹名称
、cd 文件夹1\文件夹2\文件夹3
- 返回上一级:
cd ..
、cd \
- 查看当前目录内容:
dir
- 清空当前屏幕:
cls
- 退出:
exit
- 上/下一个命令:
方向↑/↓键
4. 开发环境
4.1. 名词解释
- JVM:Java 虚拟机(Java Virtual Machine):Java程序是通用的,JVM在每个操作系统中充当翻译者角色。
Java 的
跨平台性
主要归功于JVM、它本身并不具有跨平台功能:每个操作系统下都有不同版本的虚拟机
- JRE:Java的运行时环境(Java Runtime Environment ):包含
JVM
和运行时所需要的核心类库
想要运行已有的 Java 程序,只需要安装 JRE即可
- JDK: Java程序开发工具包(Java Development Kit);包含JRE和开发人员使用的工具
想要开发 Java 程序,则必须安装 JDK
4.2 环境变量的配置
新建全局环境变量:变量名为:
JAVA_HOME
、变量值为:JDK的安装路径(bin目录的上一级即可)编辑 path 中的值:增加一条
%JAVA_HOME%\bin
的值即可
二. HelloWorld入门程序
Java开发的三个步骤:编写、编译、运行
- 编写:使用编辑器(高级编辑器)编写Java程序:
HelloWorld.java
- 编译:使用javac.exe进行编译 -> Java字节码文件:
javac HelloWorld.java
运行后生成HelloWorld.class
文件 - 运行:使用java.exe运行:
java HelloWorld
【注】: 不要加后缀名
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello,Wolrd !!!");
}
}
注意:类名称必须与文件名称一模一样
三. 关键字与标识符
关键字:被保留的、具有特殊含义的
- 完全小写的字母
- 在高级编辑器中,有特殊颜色的
标识符:自定义的内容,如类名称、接口、变量名称等
-
命名规则(硬性要求)
可包含26个英文字母(包含大小写)、0 - 9数字、$ 和 _(下划线)
不能以数字开头
不能是关键字
-
命名规范(软性要求)
- 类名称:大驼峰式(如:HelloWorld)
- 变量名:小驼峰式(如:helloWorld)
- 方法名:同变量名
四. 数据类型&常量&变量
1.数据类型
- 基本数据类型:4类8种
- 引用数据类型:如字符串、数组、类、接口等
基本数据类型:
- 整型:byte、short、int(默认)、long
- 浮点型:float(单精度)、double(默认、双精度)
- 字符型:char
- 布尔型:boolean
类型 | 字节 | 默认值 | 范围 |
---|---|---|---|
byte 字节型 | 1 | 0 | -2^7 ~2^7-1 |
short 短整型 | 2 | 0 | -2^15 ~ 2^15-1 |
int 整型 | 4 | 0 | -2^31 ~ 2^31-1 |
long 长整型 | 8 | 0L | -2^63 ~2^63-1 |
float 单精度浮点型 | 4 | 0.0F | 3.402823E+38 ~ 1.401298E-45 |
double 单精度浮点型 | 8 | 0.0D | .797693E+308~ 4.9000000E-324 |
char 字符型 | 2 | 空格 | |
bool | 1 | false |
2. 常量
程序运行期间,不改变值的量
- 字符串常量:用双引号引起来的量
- 整型常量:直接写上的数字(没有小数点)
- 浮点型常量:直接写上的小数(有小数点)
- 字符常量:单引号引起来的单个字符(单引号之间要有内容,没有则不行)
- 布尔类型:true/false
- 空常量:null(代表没有任何数据,当然不能用来直接打印输出)
3. 变量
程序运行期间,值发生改变的量
创建多个变量,变量名不能重复
对于
float
和long
类型时,后缀F和L不能丢掉如果使用
byte
、short
类型的变量,那右侧的数据不能超过左边类型的范围没有进行赋值的变量,不能直接使用
不能超过作用域(从定义变量的一行开始,一直到所属的大括号结束为止)的范围
可以通过一个语句创建多个变量,但不推荐
拓展:
- 如果表达式中全为常量,编译器会直接得到表达式的结果-->编译器的常量优化
五. 数据类型转换
1. 自动类型转换(隐式)
特点:代码不需要进行特殊处理,自动完成
规则:数据范围从小到大(等号右边数据范围小,左边范围大)
2. 强制类型转换(显式)
特点:代码需要进行特殊格式处理
格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据
3. 数据转换注意事项
强制类型转换一般不推荐使用 --> 精度损失、数据溢出
byte
、short
、char
这三种类型都可以发生数学运算,例如加法 “+”byte
、short
、char
这三种类型都可以发生数学运算,在运算时首先都会被提升成int
类型,然后再计算。char
类型对应的数值参考ASCII码表ASCII码表:
48--0
、65--A
、97--a
boolean类型不能发生数据类型转换(Java中不能当作0/1对待)
对于byte、short、char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)、(short)、(char)
1. 如果没有超过左侧的范围,编译器补上强转
2. 如果右侧超过了左侧数据类型范围,编译器报错
4. 编码表
数字和字符的对照关系
ASCII码表:American Standard Code for Information Interchange,美国信息交换标准代码
Unicode码表:万国码,开头0-127与ASCII完全一样,就连emoji也有数字与之对应
六. 运算符
1. 算数运算符
+ |
加法运算,字符串连接运算 |
---|---|
- |
减法运算 |
* |
乘法运算 |
/ |
除法运算:结果是整数(只看商,不看余数) |
% |
取模运算:两个数字相除取余数(只有对于整数来说,取模才有意义) |
++ 、--
|
自增、自减运算 |
四则运算中:
一旦运算中有不同类型的数据类型,那么结果将会是数据类型范围大的那种
任何数据类型和字符串进行连接操作的时候,结果都会变成字符串
自增、自减:
基本含义:让一个变量加1、减1
格式:卸载变量之前或者变量之后:
++num
、num++
-
使用方式:
单独使用:不和其他操作混合 --> 前++和后++没有任何区别
-
混合使用:如赋值运算、打印输出 --> 有重大区别,但该+/-一定会+/-
如果是【前++】,那么变量【立刻马上+1】,然后拿着结果进行使用 --【先+后用】
如果是【后++】,那么首先使用变量本来的数据,然后【再让变量+1】--【先用后+】
注意事项:只有变量才能使用自增/自减运算
2. 赋值运算符
赋值运算符 | 含义 |
---|---|
= |
等于号 |
+ = |
加等于:a += 1 相当于 a = a+1 |
- = |
减等于:a -= 1 相当于 a = a-1 |
*= |
乘等于 |
/= |
除等于 |
%= |
取模等于 |
注意事项:
只有变量才能使用赋值运算符,常量不能进行赋值
复合赋值运算符中隐含了一个强制类型转换
3. 比较运算符
比较运算符 | 含义 |
---|---|
== |
比较两边数据是否相等,相等结果为true |
< |
左边数据是否小于右边数据,成立则结果为true |
> |
|
<= |
|
>= |
|
!= |
如果两边数据不相等,结果为true |
注意事项:
结果是一个boolean值
如果进行多次判断,不能连着写(如:1<2<3),需要用到逻辑运算符
4. 逻辑运算符
逻辑运算符 | 含义 |
---|---|
与 &&
|
全true则true |
或 ||
|
有true则true |
非 !
|
取反:本来是true,取反变false |
短路:
- 如果根据左边已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省一定的性能
注意事项:
- 逻辑运算符只能用于boolean值
5. 三元运算符
一元运算符:只需要一个数据就可以进行操作。如取反、自增、自减
二元运算符:需要两个数据才能操作的运算符。如加法、减法
三元运算符:需要三个数据才可以操作的运算符
格式:
数据类型 变量名称 = 条件判断 ? 表达式A:表达式B
流程:
首先判断条件是否成立:
如果成立为true,将表达式A的值赋值给左侧的变量;
如果成立为false,将表达式B的值赋值给左侧的变量;
二者选其一。
注意事项;
必须同时保证表达式A和表达式B都符合左侧数据类型的要求
三元运算符的结果必须被使用(必须赋值或者打印输出)
七. 流程控制语句
1. 顺序结构
按代码顺序执行
2. 选择结构
1. if 结构
- 单
if
语句
if(关系表达式){
语句体//true则执行
}
- 标准的
if...else
语句--可用三元运算符转换
if(关系表达式) {
语句体1;//true则执行
} else {
语句体2;//false则执行
}
- 复合的
if...else
语句:else if
if(关系表达式1) {
语句体1;
} else if(关系表达式2) {
语句体2;
}
...
} else if(关系表达式3){
语句体3;
} else{
语句体4;
}
2. switch 结构
switch(表达式){
case 常量值1;
语句体1;
break;
case 常量值2;
语句体2;
break;
...
default:
语句体n;
break;
}
注意事项;
多个case后面的数值不能重复
-
switch后面小括号只能是下列数据类型:6种
基本数据类型:byte/short/char/int
引用数据类型:String字符串、enum枚举
switch语句很灵活:前后顺序可颠倒、
break可省略(不推荐)-- case穿透停止条件:匹配到哪一个case就从哪一个位置向下执行,直到遇到了break或整体结束
3. 循环结构
1. for 循环
for(初始化表达式;布尔表达式;步进表达式){
循环体;
}
2. while 循环
表准格式:
while(条件判断){
循环体;
}
拓展格式:效果与for循环一样
初始化语句;
while(条件判断){
循环体;
步进语句;
}
3. do...while 循环
do{
循环体;
} while (条件判断);
4. 三种循环的区别
如果条件判断从来没有满足过,那么for循环和while循环会执行0次,但do...while会执行1次
for循环的变量在小括号内定义,只有循环内部才可以使用。while和do-while循环的初始化语句本来就在外面,所以出循环后还可以继续使用
凡是次数确定场景多用for循环,否则while循环
5. 死循环
无心之过
有意为之
while (true){
循环体;
}
4. 条件控制语句
-
break
关键字用在switch语句中,一旦执行,整个switch语句立即结束
用在循环语句中,一旦执行,整个循环语句立刻结束,打断循环
-
continue
关键字- 一旦执行,立刻跳过当前次循环剩余内容,马上开始下一次循环