Java面向过程
安装
- 下载Java安装包进行安装
- JDK目录结构
- bin目录 - 该目录下主要存放JDK的各种工具命令。
- conf目录 - 该目录下主要存放jdk的相关配置文件。
- include目录 - 该目录下主要存放了一些平台的头文件。
- jmods目录 - 该目录下主要存放了JDK的各种模块。
- legal目录 - 该目录下主要存放了JDK各模块的授权文档。
- lib目录 - 该目录下主要存放了JDK工具的一些补充jar包和源代码。
- 配置环境变量
- 新建系统变量JAVA_HOME,值为Java的安装目录,我的是C:\Program Files\Java\jdk1.8.0_121
- 编辑系统变量Path,新增%JAVA_HOME%\bin
- 验证
- 在cmd窗口,输入java和javac看是否有命令提示
一. 变量以及数据类型
1.变量声明
数据类型 变量名 = 初始值;
- 初始值可以省略
- 每个变量都有默认的初始值,但是变量在使用之前必须初始化
- 变量不能重复声明
标识符命名法则
- 由数字、字母、下划线以及$等组成,其中数字不能开头
- 不能使用Java语言的关键字
- 区分大小写,长度没有限制但不宜过长
2.数据类型
1. 基本数据类型
数据类型 | 字节数 |
---|---|
整数类型 | |
byte | 1个字节(-2^7 ~ 2^7-1) |
short | 2个字节(-2^15 ~ 2^15-1) |
int | 4个字节(-2^31 ~ 2^31-1) |
long | 8个字节(-2^63 ~ 2^63-1)末尾加L |
浮点类型 | 默认位double |
float | 4个字节(7位有效数字,后面需要加f或F) |
double | 8个字节(15位有效数字) |
布尔类型 | |
boolean | 只有true 和 false |
字符类型 | Java字符采用Unicode字符集编码,所有字符都是16位 |
char | 2个字节(0~65535)没有符号位 |
因为采用补码,正数的0给了负数,所以正数会比负数少1
2. 引用数据类型
数组,类,接口,枚举,标注…
3. 基本数据类型之间的转化
-
自动类型转化
从小类型到大类型之间的转化
-
强制类型转化
目标类型 变量名 = (目标类型)源类型变量名
3.运算符
1. 字符串连接符
- +既可以作为字符串连接符,又可以作为加法运算符
- 只要+两边的操作数中有一个操作数是字符串类型,则该+就被当作字符串连接符处理,否则当作加法运算符处理
2. 算数运算符 +, - ,* , /, %
-
整数相除时结果保留整数部分
保留小数的处理方式
整数1*1.0 / 整数2
-
0和0.0不能做除数,会报算数异常,java.lang.ArithmeticException
3. 关系/比较运算符
- >表示是否大于运算符
- >= 表示是否大于等于运算符
- < 表示是否小于运算符
- <= 表示是否小于等于运算符
- == 表示是否等于运算符
- != 表示是否不等于运算符
- 所有以关系运算符作为最终运算的表达式结果一定是boolean类型
4. 自增减运算符
- ++ 表示自增运算符,用于使得当前变量自身的数值加1的效果
- – 表示自减运算符,用于使得当前变量自身的数值减1的效果
- 只能用于变量,常数不可以
5. 逻辑运算符
-
&& 表示逻辑与运算符,相当于"并且",同真为真,一假为假。
-
|| 表示逻辑或运算符,相当于"或者",一真为真,同假为假。
-
! 表示逻辑非运算符,相当于"取反",真为假,假为真。
-
逻辑运算符的操作数均为boolean表达式。
逻辑运算符的短路特性:对于逻辑与运算符(&)来说,若第一个表达式为假则结果为假,此时跳过第 二个表达式; 对于逻辑或运算符( | )来说,若第一个表达式为真则结果为真,此时跳过第 二个表达式;
6. 条件/三目运算符
条件表达式?表达式1:表达式2
-
判断条件表达式是否成立,若成立则执行表达式1,否则执行表达式2。
-
三目运算符虽然后面有分号,但是只能作为表达式,不能作为语句。
7. 赋值运算符
-
= 表示赋值运算符,用于将=右边的数据赋值给=左边的变量,覆盖变量 原来的数值。
-
赋值运算符的简化写法 +=, -=, *=,/=
-
考点:byte类型进行运算时
byte b1 = 10; System.out.println("b1=" + b1); //执行这句会报错,因为b1为byte类型,等式右边为int类型 b1 = b1 + 2; //右边都为byte类型也会报错,这里有编译器优化,两个byte类型相加等式右边会b1提升为int类型,等式左边此时为byte类型 b1 = b1 + (byte)2; //正确写法 b1 = byte(b1 + 2); //上式等价于 b1 += 2; System.out.println("b1=" + b1);
-
8. 移位运算符
-
<< 左移运算符,用于将数据的二进制位向左移动,右边使用0补充。
-
>> 右移运算符,用于将数据的二进制位向右移动,左边使用符号位补充 。
-
>>> 表示逻辑右移运算符,用于将数据的二进制位向右移动,左边使用0 补充。
-
移位运算符也会将byte类型自动提升为int类型。
byte b1 = 13; //会报错,等号右边已经变为int类型,移位运算符也会自动提升byte为int类型 byte b2 = b1 << 1;
9. 位运算符
- & 表示按位与运算符,按照二进制位进行与运算,同1为1,一0为0.
- | 表示按位或运算符,按照二进制位进行或运算,一1为1,同0为0.
- ~ 表示按位取反运算符,按照二进制位进行取反,1为0,0为1.
- ^ 表示按位异或运算符,按照二进制位进行异或运算,同为0,不同为1.
10.运算符优先级
- ()的优先级极高。
- =的优先级极低。
- 若无法确认优先级,则使用()来确保即可。
二. 流程控制语句
1. 分支结构
1. 单if
//1.单if分支
if(条件表达式) {
语句块;
}
- 条件表达式的条件必须为boolean类型,不能是int类型
2.if…else
//2.if else分支结构
if(条件表达式) {
语句块1;
} else {
语句块2;
}
2. if… else if… else
//if... else if.. else
if (条件表达式1) {
语句块1;
} else if (条件表达式2) {
语句块2;
} else {
语句块3;
}
4.switch…case分支结构
//switch...case分支结构
switch(变量/表达式) {
case 字面值1: 语句块1; break;
case 字面值2: 语句块2; break;
...
default: 语句块n;
}
- switch()中支持的数据类型有:byte、short、char以及int类型,从jdk1.5 开始支持枚举类型,从jdk1.7开始支持String类型。
- 注意 switch case default 要输入break,没有break会顺序执行
- case后面必须是常量,并且常量不能重复
2.循环结构
1.for循环结构
//for循环
for (初始化表达式;条件表达式;修改初始值表达式) {
循环体;
}
-
continue,提前结束本次循环,开始下一次循环
// 使用for循环打印1 ~ 20之间的所有不含5的倍数的整数 for(int i = 1; i <= 20; i++) { if(0 == i % 5) { continue; } System.out.println("i = " + i); }
-
break,跳出当前循环,用法基本和continue一致
2.while循环
while(条件表达式) {
循环体;
}
3. do…while循环
do {
循环体;
}while(条件表达式);
三. 数组的基本概念
- 数组是相同数据类型的多个元素的容器,元素按线性顺序排列,在Java语言中体现为一种引用数据类型。
1.一维数组
-
声明
//数据类型 [] 数组名称 = new 数据类型[数组的长度]; int [] arr = new int[2];
-
数组的初始化
//声明同时进行初始化 //数据类型[] 数组名称 = new 数据类型[]{初始值1, 初始值2, ...}; char[] arr = new char[]{a, b, c, d, e} //简化写法 char[] arr = {a, b, c, d, e};
-
内存分析
-
数组拷贝
//start1是arr1开始拷贝的位置,start2是arr2开始拷贝的位置,length是拷贝的长度 System.arraycopy(arr1, start1, arr2, start2, length)
- 数组拷贝是两个数组指向了同一块堆区空间,本质上上就是改变指向而已
-
数组工具类
java.util.Arrays;
static String toString(int[] a) 输出数组中的内容 static void fill(int[] a, int val) 将参数指定元素赋值给数组中所有元素 static boolean equals(boolean[] a, boolean[] a2) 判断两个数组元素内容和次序是否相同 static void sort(int[] a) 对数组中的元素进行从小到大排序 static int binarySearch(int[] a, int key) 从数组中查找参数指定元素所在的位置
2.二维数组
-
二维数组本质上就是由多个一维数组摞在一起组成的数组,二维数组中的每个元素都是一维数组,而一维数组中的每个元素才是数据内容。
-
声明
//数据类型[][] 数组名称 = new 数据类型[行数][列数] char[][] arr = new char[2][8];
-
初始化
char[][] arr = {{1,2,3,4},{5,6,7,8}}; //可以不指定列数,对每一列进行初始化,每一列的个数可以不同 int[][] arr1 = new int[3][]; arr1[0] = new int[3]; arr1[1] = new int[4]; arr1[2] = new int[5];
一起组成的数组,二维数组中 的每个元素都是一维数组,而一维数组中的每个元素才是数据内容。
-
声明
//数据类型[][] 数组名称 = new 数据类型[行数][列数] char[][] arr = new char[2][8];
-
初始化
char[][] arr = {{1,2,3,4},{5,6,7,8}}; //可以不指定列数,对每一列进行初始化,每一列的个数可以不同 int[][] arr1 = new int[3][]; arr1[0] = new int[3]; arr1[1] = new int[4]; arr1[2] = new int[5];