关键字[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WGbXTu4y-1597572422033)(https://i.loli.net/2020/08/16/LEO3WFeJb98D5f2.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SGz1VaRB-1597572422036)(https://i.loli.net/2020/08/16/YNrlqiPhsAGkOun.png)]
保留字:现Java版本尚未使用,但以后版本可能会作为关键字使用。
具体哪些保留字:goto 、const
注意:自己命名标识符时要避免使用这些保留字
''
,内部只能写一个字符()
""
+
算术运算符: + - + - * / % (前)++ (后)++ (前)-- (后)-- +
说明:
++
:先自增1,后运算++
:先运算,后自增1--
:先自减1,后运算--
:先运算,后自减1赋值运算符:= += -= *= /= %=
说明:
比较运算符(关系运算符): == != > < >= <= instanceof
说明:
< >= <=
:只能使用在数值类型的数据之间。==
和 !=
: 不仅可以使用在数值类型数据之间,还可以使用在其他引用类型变量之间。逻辑运算符:& && | || ! ^
说明:
&
与 &&
的运算结果相同true
时,二者都会执行符号右边的运算false
时,&
继续执行符号右边的运算。&&
不再执行符号右边的运算。| ||
同理&& ||
位运算符:<< >> >>> & | ^ ~
说明:
<<
:在一定范围内,每向左移1位,相当于 * 2>>
:在一定范围内,每向右移1位,相当于 / 2三元运算符:(条件表达式)? 表达式1 : 表达式2
说明:
分支结构
if-else if - else
if (a>6) //关系表达式,当 a>6 时表达式值为真,执行if体
Statement(s);
if (a||b) //逻辑表达式,只要a、b中有一个为真,结果为真,执行if体
Statement(s);
if (3-6) //算术表达式,只要该表达式的值非0,结果为真,执行if体
Statement(s);
/*关系、逻辑混合表达式,只要age>=60或age<=10其中一项为真,结果为真,执行if体*/
if (age>=60 ||age<=10)
Statement(s);
if (条件表达式1)
语句1;
else if (条件表达式2)、
语句2;
...
else if (条件表达式n)
语句n;
else
语句n+1;
switch-case
//匹配 就是全等。
语法:
switch(表达式){
case 值1:
表达式的值和 值1匹配上了,需要执行的代码;
break;
case 值2:
表达式的值和 值2匹配上了,需要执行的代码;
break;
case 值3:
表达式的值和 值3匹配上了,需要执行的代码;
break;
default:
如果表达式的值和以上的case后面的值都没有匹配上,那么就执行这里的代码。
break;
}
//不写break会穿透到下一个break
注意switch()
表达式里面只能匹配常量
循环结构
for
for(条件表达式1;条件表达式2;条件表达式3){
语句块;
}
while
while(循环条件){
语句块;
}
注意:语句块要有使得循环条件不成立的语句,否则回陷入死循环
do-while
do{
语句块;
}while(循环条件)
注意:语句块要有使得循环条件不成立的语句,否则回陷入死循环
关键字 break / continue
break
:结束当前循环continue
:跳过当前循环一维数组
声明和初始化
int num;//声明
num = 10;//初始化
int id = 1001;//声明 + 初始化
int[] ids;//声明
//1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{
1001,1002,1003,1004};
//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5];
int[] arr4 = {
1,2,3,4,5};//类型推断
一维数组元素的引用:通过角标的方式调用。
//数组的角标(或索引从0开始的,到数组的长度-1结束。
names[0] = "王铭";
names[1] = "王赫";
数组的属性:length
数组的长度,如int[] num == new int[2]
int[] num == new int[2]
System.out.println(num.length);//2
//此时打印出2
遍历一维数组元素
for(int i = 0;i < names.length;i++){
System.out.println(names[i]);
}
一维数组元素的默认初始化值
一维数组的内存解析[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NV2yeuuA-1597572422047)(https://i.loli.net/2020/08/16/Mwa5rdbtncL3VSe.png)]
二维数组
数组属于引用数据类型,数组的元素也可以是引用数据类型,一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组。即,二维数组的本质其实是一维数组的元素依然是一维数组
二维数组的声明与初始化
int[] arr = new int[]{
1,2,3};//一维数组
//静态初始化
int[][] arr1 = new int[][]{
{
1,2,3},{
4,5},{
6,7,8}};
//动态初始化1
String[][] arr2 = new String[3][2];
//动态初始化2
String[][] arr3 = new String[3][];
//也是正确的写法:
int[] arr4[] = new int[][]{
{
1,2,3},{
4,5,9,10},{
6,7,8}};
int[] arr5[] = {
{
1,2,3},{
4,5},{
6,7,8}};//类型推断
遍历二维数组元素
for(int i = 0;i < arr4.length;i++){
for(int j = 0;j < arr4[i].length;j++){
System.out.print(arr4[i][j] + " ");
}
System.out.println();
}
二维数组默认初始化值
规定:二维数组分为外层数组的元素,内层数组的元素
针对于初始化方式一:
比如:int[][]arr = new int[4][3];
针对于初始化方式二:
比如:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。
数组的常见算法
数组的赋值,复制,反转
赋值
//array1保存的数组的地址值赋给了array2,使得array1和array2共同指向堆空间中的同一个数组实体
int[] array1,array2;
array1 = new int[]{
1,2,3,4};
array2 = array1;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-00EcNc0b-1597572422052)(https://i.loli.net/2020/08/16/PBicnmdOLpefzUs.png)]
复制
//通过new的方式,给array2在堆空间中新开辟了数组的空间。将array1数组中的元素值一个一个的赋值到array2数组中。
int[] array1,array2;
array1 = new int[]{
1,2,3,4};
array2 = new int[array1.length];
for(int i = 0;i < array2.length;i++){
array2[i] = array1[i];
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X5qVVBhn-1597572422055)(https://i.loli.net/2020/08/16/h5t6JmkIVrHudRY.png)]
反转
//方法一:
for(int i = 0;i < arr.length / 2;i++){
String temp = arr[i];
arr[i] = arr[arr.length - i -1];
arr[arr.length - i -1] = temp;
}
//方法二:
for(int i = 0,j = arr.length - 1;i < j;i++,j--){
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
数组中指定元素的查找:搜索、检索
数组的排序算法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJeGvII1-1597572422057)(https://i.loli.net/2020/08/16/Fjbv5Z2oK83Taqm.png)]
衡量排序算法的优劣:时间复杂度、空间复杂度、稳定性
排序的分类:内部排序 与 外部排序(需要借助于磁盘)
不同排序算法的时间复杂度[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ue59n3E3-1597572422058)(https://i.loli.net/2020/08/16/WcCiRFQftq9Tna3.png)]
冒泡排序
int[] arr = new int[]{
43,32,76,-98,0,64,33,-21,32,99};
//冒泡排序
for(int i = 0;i < arr.length - 1;i++){
for(int j = 0;j < arr.length - 1 - i;j++){
if(arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
快速排序
public class QuickSort {
public static void quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基准位
temp = arr[low];
while (i<j) {
//先看右边,依次往左递减
while (temp<=arr[j]&&i<j) {
j--;
}
//再看左边,依次往右递增
while (temp>=arr[i]&&i<j) {
i++;
}
//如果满足条件则交换
if (i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
arr[low] = arr[i];
arr[i] = temp;
//递归调用左半数组
quickSort(arr, low, j-1);
//递归调用右半数组
quickSort(arr, j+1, high);
}
public static void main(String[] args){
int[] arr = {
10,7,2,4,7,62,3,4,2,1,8,9,19};
quickSort(arr, 0, arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
Arrays常见的工具类
//1.boolean equals(int[] a,int[] b):判断两个数组是否相等。
int[] arr1 = new int[]{
1,2,3,4};
int[] arr2 = new int[]{
1,3,2,4};
boolean isEquals = Arrays.equals(arr1, arr2);
System.out.println(isEquals);
//2.String toString(int[] a):输出数组信息。
System.out.println(Arrays.toString(arr1));
//3.void fill(int[] a,int val):将指定值填充到数组之中。
Arrays.fill(arr1,10);
System.out.println(Arrays.toString(arr1));
//4.void sort(int[] a):对数组进行排序。
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
//5.int binarySearch(int[] a,int key)
int[] arr3 = new int[]{
-98,-34,2,34,54,66,79,105,210,333};
int index = Arrays.binarySearch(arr3, 210);
if(index >= 0){
System.out.println(index);
}else{
System.out.println("未找到");
}
数组常见异常
数组角标越界异常:ArrayIndexOutOfBoundsException
int[] arr = new int[]{
1,2,3,4,5};
// for(int i = 0;i <= arr.length;i++){
// System.out.println(arr[i]);
// }
// System.out.println(arr[-2]);
// System.out.println("hello");
空指针异常:NullPointerException
//情况一:
// int[] arr1 = new int[]{1,2,3};
// arr1 = null;
// System.out.println(arr1[0]);
//情况二:
// int[][] arr2 = new int[4][];
// System.out.println(arr2[0][0]);
//情况三:
// String[] arr3 = new String[]{"AA","BB","CC"};
// arr3[0] = null;
// System.out.println(arr3[0].toString());
out.println(“hello”);
```
2. 空指针异常:NullPointerException
```java
//情况一:
// int[] arr1 = new int[]{1,2,3};
// arr1 = null;
// System.out.println(arr1[0]);
//情况二:
// int[][] arr2 = new int[4][];
// System.out.println(arr2[0][0]);
//情况三:
// String[] arr3 = new String[]{"AA","BB","CC"};
// arr3[0] = null;
// System.out.println(arr3[0].toString());
```