一、运算符
1.位运算符
对表达式以二进制为单位进行运算,将数据全部转换成二进制再进行运算。
&(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(右移)
- A&B:每一位的数字一一对应,若都为1,则该位记作1,否则0
- A|B:每一位的数字一一对应,只要有个1,则该位记作1,否则为0
- A^B:每一位的数字一一对应,相同记作1,不同记作0
- A<<B:A*2的B次方,2 <<3,2*2的3次方=16
- A>>B:A除以2的B次方,2>>3,2/2的3次方 =0
java
public class Test {
public static void main(String[] args){
System.out.println(10&5);
System.out.println(10|5);
System.out.println(10^5);
System.out.println(2>>3);
System.out.println(2<<3);
}
}

优先级:位运算符>逻辑运算符>算术运算符
越复杂,优先级越高
二、流程控制
if-else switch-case for while do-while foreach
if-else和switch-case都是进行流程控制的。
1.if-else和switch-case的区别?
- if-else可以进行等值判断,也可以进行逻辑判断,switch-case只能进行等值判断。
- switch-case代码结构更清晰易懂,if-else结构相对不清晰。
java
public class Test {
public static void main(String[] args){
int num = 1;
switch(num){
case 1:
System.out.println("奖励2000");
break;
case 2:
System.out.println("奖励1000");
break;
case 3:
System.out.println("奖励500");
break;
default:
System.out.println("没有奖励");
}
}
}

2.4种循环
for、while、 do-while、 foreach
循环四要素:
- 初始化循环变量
- 循环条件
- 循环体
- 更新循环变量
java
public class Test {
public static void main(String[] args){
//for循环
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
//while循环
int i = 0;
while(i<10){
System.out.println(i);
i++;
}
//do-while循环
int i = 0;
do{
System.out.println(i);
i++;
}while(i<10);
}
}
3.while和do-while循环有什么区别?
- while需要先判断循环条件,再执行循环体
- do-while第一次不需要判断循环条件,直接执行循环体,第二次开始执行循环条件。
do-while至少会执行一次,while有可能一次都不执行。
4.foreach(针对集合遍历的循环)增强型for循环
java
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
// 第一种方法
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 第二种方法
for(Integer i : list){
System.out.println(i);
}
}
}
5.终止循环
- 循环逻辑结束
- 循环过程中抛出异常
- 使用break关键字中断循环
- 使用continue关键字中断循环
continue只结束当前循环,继续执行下一次循环
break会结束整个循环
三、数组
数组是连续存储的。
1.数组的基本元素构成
由4种基本元素构成
- 数组名称
- 数组元素
- 元素下标
- 数据类型
2.对象默认输出方式
Java输出对象的时候,默认调用对象的toString方法,将结果以字符串的形式进行输出。
3.toString从何而来?
来自于Object类。Java会有一个根节点,所有的类都是由这个根节点衍生出来的,Java所有类都有一个默认的父类:Object。
java
public class Test {
public static void main(String[] args) {
int array[] = {1,2,3,4,5,6};
System.out.println(array);
System.out.println(array.toString());
}
}

输出数组值:
java
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
int array[] = {1,2,3,4,5,6};
//遍历数组
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
int l = 0;
while(l < array.length){
System.out.println(array[l]);
l++;
}
int m = 0;
do {
System.out.println(array[m]);
m++;
}while (m < array.length);
for(Integer i : array){
System.out.println(i);
}
//工具类
System.out.println(Arrays.toString(array));
}
}
//多态
Object[] array = {"a",1,"b","c"};
使用Object,数组中可以存储不同类型的数据。
4.为什么数组下标都是从0开始的?
提高检索速度,取出数据更快。
数组的内存模型相关。从1开始,需要执行index-1,复杂度增加。

5.数组常见的异常
数组下标越界:ArrayIndexOutOfBoundsException
6.数组常见操作以及方法
- 求数组的最大值
- 求数组的最小值
- 在数组的指定位置插入一个数据
- 数组排序
数组一旦创建,长度就不能改。
java
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int array[] = {12,35,14,97,87,68};
//求最大值
int max = array[0];
for (int i = 1; i < array.length; i++) { //不需要从0开始,自己没必要跟自己比
if(array[i] > max){
max = array[i];
}
}
System.out.println(max);
//求最小值
int min = array[0];
for (int i = 1; i < array.length; i++) {
if(array[i] < min){
min = array[i];
}
}
System.out.println(min);
//在指定位置插入元素
//把83插入到下标为3的位置
/**
* 1、创建一个空的新数组
* 2、导入数据
* 3、插入新数据
*/
int [] array2 = new int[array.length+1];
for (int i = 0; i < 3; i++) {
array2[i] = array[i];
}
for (int i = 4; i < array2.length ; i++) {
array2[i] = array[i-1];
}
array2[3] = 83;
System.out.println("插入之前的数组是:" + Arrays.toString(array));
System.out.println("插入新数据的数组是:" + Arrays.toString(array2));
//升序排列
//冒泡排序
for (int j = 0; j < array.length-1; j++) { //-1 是为了不越界(i+1 不能超出边界)
for (int i = 0; i < array.length-1-j; i++) { //-j 是为了不重复比较(右边已经排好的元素不用再管)
if(array[i] > array[i+1]){
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
//升序排列复杂流程:每轮结束后,最右边多了一个"已排好"的元素,所以下一轮可以少比较一次
//索引:0,1,2,3,4,5
// 长度:6
//第一次排序
for (int i = 0; i < array.length-1; i++) { //为防止越界 如果 i 能取到 最后一个索引(5),那么 i+1 = 6,就会访问 array[6],但数组最大索引是 5
if(array[i] > array[i+1]){
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println(Arrays.toString(array));
//第二次排序
for (int i = 0; i < array.length-2; i++) { //
if(array[i] > array[i+1]){
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println(Arrays.toString(array));
//第三次排序
for (int i = 0; i < array.length-3; i++) { //
if(array[i] > array[i+1]){
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println(Arrays.toString(array));
//第四次排序
for (int i = 0; i < array.length-4; i++) { //
if(array[i] > array[i+1]){
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println(Arrays.toString(array));
//第五次排序
for (int i = 0; i < array.length-5; i++) { //
if(array[i] > array[i+1]){
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println(Arrays.toString(array));
//降序排列
for (int j = 0; j < array.length-1; j++) {
for (int i = 0; i < array.length-1-j; i++) {
if(array[i] < array[i+1]){
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
}

注意:编写代码时输出语句一定要在for循环以外,不然会一直循环,多次打印。