第二天:
一.运算符划分为 7种,
1.算术运算符:+ - * / % ++ --
赋值运算符:+= -= *= /= =
比较(关系)运算符: == != > < >= <= 得出的结果都是: boolean类型,true或fasle
逻辑运算符: & | ^ ! && ||
位移运算符: << >> >>>
位运算符: & | ^
三目运算: boolean类型表达式 ? 结果1 : 结果2
2.其中 位运算符 和 位移运算符 是与二进制的运算有关:
位运算符 和二进制的计算相关: 0 和 1
&: 0 和 1 与上 都是 0
|: 0 和 1 或上 都是 1
^: 相同为0,不同为1
3.位移运算符: << >> >>>
<<: 左移,相当于 ×2;
>>: 右移,相当于 ÷2,如果是负数按照符号位本身填入;
>>>: 无符号右移,相当于 ÷2,如果是负数, 则永远补0,得到的永远都是一个正大数;
public class Demo04 {
public static void main(String[] args) {
System.out.println(2 << 1);//4 2 * 2
System.out.println(2 >> 1);//1 2 / 2
System.out.println(2 >>> 1);//1 2 / 2
System.out.println(-2 << 1);//-4
//右移
System.out.println(-2 >> 1);//-1
//无符号右移
System.out.println(-2 >>> 1);//2147483647
}
}
4.逻辑运算符中有两个特别需要注意一点的:
& /&& 两者存在区别:: 一假既假
&: 无论如何,都会将整个表示执行完成
&&:只要遇到false,则停止判断,称之为短路操作
|、||: 一真既真
| : 无论如何,都会将整个表示执行完成
||:只要遇到true,则停止判断,称之为短路操作
所以,一遇见|| && 成立,则后面的运算就不进行了
public class Demo02 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//短路操作 && 一假既假 || 一真既真
System.out.println(a > b & a++ > b++);//false
System.out.println(a); // a = 11;
System.out.println(b); // b = 11;
System.out.println(a > b && a++ > b++);//false
System.out.println(a); // a = 10;
System.out.println(b); // b = 10;
}
}
二 . 逻辑控制语句
1.顺序结构
2.分支语句: if(条件)
if - else
if- else if - else
switch(要判断的值)-case:
语法结构:
switch(要判断的值){
case:
break;
case:
break;
case:
break;
}
注意:
要判断的值取值类型:
byte、short、char、int、String、枚举
case中需要注意:
a.case后面根的值是要比较的值,只能是常量不能使变量.
b.因为case具有穿透性,需要使用break结束.
如果只是想跳过这次语句,则可以使用continue;
3.循环结构:
1)for循环 for(int i = 0; i < 10; i++){}
for(①初始化值;②判断是否进入循环的条件;③步长){
④符合循环条件后,执行的内容(循环体)
}
执行顺序: ①②④③ > ②④③ > 直到②不符合
注意:
判断是否进入循环的条件是可以跟初始化值没有任何关系 有次数,有规律可循,会使用for循环
2)while循环 语法结构: ①初始化值;
while(②判断是否进入循环的条件){
④符合循环条件后,执行的内容(循环体)
③步长
}
执行顺序:
①②④③ > ②④③ > 直到2不满足..
特点:不知道次数,没有规律可循
3)do-while循环 语法结构:
①初始化值;
do{
④符合循环条件后,执行的内容(循环体)
③步长
}while(②判断是否进入循环的条件);
执行顺序:①④③② > ②④③ > 直到②不满足
4)三种循环结构中:
先判断后执行: for、while
知道次数,有规律可循则选择for循环
不知道次数,没有有规律可循则选择while循环
先执行后判断:do-while
5)跳转控制语句
a.continue:跳过本次循环,继续下一次循环
b.break:结束循环
return:结束循环(不属于跳转控制语句)
第三天
一.数组:
1.数组的概念
a. 存储具有固定长度数据的容器,保证多个数据类型必须一致.
固定长度:数组一旦创建,则长度就不可改变
数据类型:必须保证是相同类型
b. 简单理解: 批量定义变量
变量 : 声明 + 初始化
2)数组的初始化
(1)静态初始化
a.方式一 语法结构 数据类型[] 数组名 = {元素1,元素2,元素3,...};
特点: 固定写法,只能在声明的同时初始化
b.方式二 语法结构 数据类型[] 数组名 = new int[]{元素1,元素2,元素3,...};
特点: 可以再次赋值
静态赋值共同特点: 在数组创建时就已经确定了数组的长度 和 数组的元素
(2)动态初始化
语法结构: 数据类型[] 数组名 = new int[数组长度];
特点: 数组再定义时只初始化了数组的长度,但没有初始化数组元素
数组元素有默认值,都是0,但是0的表现形式不一样
整数类型 -> 0
浮点类型 -> 0.0
字符类型 -> '\u0000' Unicode字符集
布尔类型 -> false
引用数据类型 String[]
3.访问数组元素
语法格式: 数组名[下标]
下标范围: 0 ~ length - 1
4.数组的属性(length)
数组的长度 = 数组的元素个数
5.数组的遍历/迭代
挨个获取数组中的元素称之为数组的遍历/迭代
6.常见异常
ArrayIndexOutOfBoundsException:数组下标越界
NullPointerException:空指针异常
7.数组扩容/缩容
数组的复制:
Arrays.copyOf();
System.arrayCopy();
8.数组的反转
概念: 数组中的元素颠倒顺序.
9.数组内存管理
1)内存
内存是计算机中重要组成部分,是一个临时存储区域,
当程序启动着,会开辟一块内存空间,用于存储程序中的数据.
2)JVM虚拟机内存分区
方法区:加载类相关的信息
栈:局部变量 / 临时变量
堆:数组,对象
寄存器:给CPU使用,和开发无关
第四天
一、方法(函数)
1.方法的概念
方法(method)是将具有独立功能的代码块组织成为一个成体,让他具有特殊功能的代码集.
2.方法的语法结构
访问修饰词 + 修饰词 + 返回值类型 + 方法名 + 参数(数据类型 + 变量名)
//主方法 public static void main(String[] args)
3.方法的作用: 提高代码的复用性
4.方法的定义和使用
1)方法的使用
a.定义方法
b.调用方法 - 方法名()直接调用
注意:先定义后调用,否则会报错
2)方法的定义
(1)无参方法
(2)有参方法 参数:数据类型 + 变量名
数据类型:
a.基本数据类型
b.引用数据类型:数组 / 类 / 接口
c.可变长参数
public static void m2(int a,String... str){
System.out.println(str);
}
语法: 类型...
注意: 可变,参数在传递过程中可以是0 ~ n个参数 使用时,可变长参数后不能追加别的参数 (所以前面是可以加参数的)
(3)带返回值的方法
返回值类型:
基本数据类型:
引用数据类型:数组 / 类 / 接口
void:没有返回值
注意: return 的值 和 返回值类型必须保持一致,否则编译报错
5.方法定义的格式 修饰词: public static
返回值类型: void/基本/引用
方法名:自定义,但可读性要好,必须遵循小驼峰命名法 方法参数:基本/引用/可变
长参数
方法体:做逻辑判断
6.方法定义需要注意:
1)参数列表如何定义: 当有不确定因数时会当做方法参数传递
2)返回值类型如何定义:考虑在调用时 是否需要使用这个值.
7.方法重载
1)概念 在同一个类中,相同的方法名,方法参数不一致可以造成方法的重载
a.前提:必须在同一个类中
b.参数不一致: 顺序不一致、 个数不一致、 类型不一致
c.方法重载和返回值无关
public class Demo01 {
public static void main(String[] args) {
}
//1.个数不一致
public static void sum(byte b1){}
public static void sum(){}
//2.类型不一致
public static void m2(short b1){}
public static void m2(int b1){}
//3.顺序不一样
public static void m1(int a, byte b){}
public static void m1(byte b, int a){}
//4.重载和返回值无关
/*public static void m3(int i){
}
public static int m3(int i){
return 0;
}*/
}
8.方法的参数传递
1)方法参数传递基本数据类型 特点:传递值,参数的改变,不影响实际参数
2)方法参数传递引用数据类型 特点:传递地址值,参数的改变,会影响实际参数
二、递归
三、数组排序 冒泡排序、选择排序、快速排序、插入排序、希尔排序、桶排序。。。
冒泡排序: 原理:每一轮比较相邻的两个元素,小的放前面,大的放后面