7. 数据类型
a. 计算机存储设备的最小信息单元是“位(bit)”,通常最小字母b表示,而计算机中最小的存储单元是”字节(byte)”,通常用大写字母B表示,一个字节由八个位组成。
b. 数据类型
c. 数据类型内存占用和取值范围
整数默认为int类型,浮点数默认为double类型
8. 变量的定义格式:
数据类型 变量名 = 初始化;
也可以是先声明后赋值:
数据类型 变量名;
变量名 = 初始化值;
9. 变量使用时注意事项
a. 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。
b. 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数默认是double类型,double的取值范围是大于float的,类型不兼容。
10. 标识符
a. 标识符是用户编程时使用的名字,用于给类,方法,变量,常量等命名。
b. Java中标识符的组成规则:
①由字母,数字,下划线“_”,美元符号“$”组成,第一个字符不能是数字。
②不能使用java中的关键字作为标识符
③标识符对大小写敏感(区分大小写)。
c. Java中标识符的命名约定:
①小驼峰式命名:变量名,方法名
首字母小写,从第二个单词开始每个单词的首字母大写。
②大驼峰式命名:类名
每个单词的首字母都大写。
11. 类型转换
a. 自动类型转换:
把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。
b. 强制类型转换:
把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。
格式:目标数据类型 变量名 = (目标数据类型)值或者变量;
1. 算术运算符
a. Java程序中,整数运算,结果只能得到整数,想得到小数,需要浮点数参与运算。
b. 整数的除法运算得到的是商。
c. 整数的取余运算得到的是余数。
2. 字符的+操作
a. char类型的数据参与算术运算,会自动提升为int类型,使用的是字符在计算机底层中对应的十进制整数值。
b. 不同的基本数据类型参与运算时,整个算术表达式的类型会自动进行提升,提升为参与运算的最高等级。
提升规则:
byte类型 short类型和char类型将被提升到int类型。
整个表达式的类型自动提升到表达式中最高等级操作数相同的类型。
类型
等级顺序:byte,short,char到int到long到float到double
3. 字符串的+操作
a. 当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算。
b. 在“+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算,当连续进行“+”操作时,从左到右逐个进行。
4. 赋值运算符
a. 最基本的赋值运算符是“=”,表示将右边表达式的值赋值给左边的变量。
b. 扩展的赋值运算符+=,-=,*=,/=,%=都表示先将左边与右边做相应的运算,再赋值给左边。
注意:扩展的赋值运算符包含了强制类型转换。
5. 自增自减运算符
a. 自增(或自减)运算符作用是在运算结束前(前置自增自减运算符)或后(后自增自减运算符)将变量的值加(或减)一。
b. 单独使用,前置和后置没有区别,结果一样。
c. 参与运算:
前置:运算使用的是自增或自减后的值,(先增后用)。
后置:运算使用的是自增或自减的值,(先用后增)。
d. 常用用法:单独使用。
6. 关系运算符
a. 关系运算符的运算结果都是boolean类型,要么是true,要么是false。
b. 注意不要把“==”误写为“=”,“==”是关系运算符(等于),“=”是赋值运算。
7. 逻辑运算符
a. 逻辑运算符把各个运算的表达式连接起来,组成一个逻辑表达式,以判断程序中的表达式是否成立。
b. 逻辑运算的结果肯定是boolean类型,要么是true要么是false。
c. 短路逻辑运算符
①&& 逻辑与 运算结果与&相同,但具有短路效果。
一旦发现左边的表达式结果为false,右边的表达式将不参与运算。
②|| 逻辑或 运算结果与相同,但具有短路效果。
一旦发现左边的表达式结果为true,右边的表达式将不再参与运算。
③在我们的代码书写中,逻辑与和或的运算,实际使用的就是短路的逻辑运算符。
8. 三元运算符
a. 三元运算符语法格式:
关系表达式 ? 表达式1 : 表达式2;
b. 说明:问号前面的位置是判断的条件,判断结果为boolean型,为true时调用表达式1,为false时调用表达式2。
9. 数据输入
a. Scanner使用的基本步骤
①导包。Scanner类在java.util包下。
Import java.util.Scanner;
②创建键盘录入对象。
Scanner sc = new Scanner(System.in);
③接收键盘录入数据。
int i = sc.nextInt();
10. 顺序结构
a. 流程控制语句分类:
1. 顺序结构
2. 分支结构(if, while)
3. 循环结构(for, while, do...while)
11. if结构
if语句格式
if(关系表达式) {
语句体
}
3. for结构
a. for(初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}
初始化语句:对控制循环的变量进行初始化
条件判断语句:控制循环体是否要执行的判断条件
循环体语句:循环中要做的事情
条件控制语句:对控制循环的变量进行改变,也就是控制循环的进度
b. for语句的执行流程
①执行初始化语句,该语句只会执行一次
②执行条件判断语句,例如i <= 5,看其返回结果是true还是false,如果为false,结束循环,如果为true,则执行循环体语句
③当条件为true的时候,执行循环体语句
④执行条件控制语句,改变控制循环的变量,例如i++;随后继续执行条件判断语句,以此类推
4. for循环打印水仙花数
a) 水仙花数,指的是一个三位数,个位,十位,百位的数字立方和等于原数,例如153,3*3*3 + 5*5*5 + 1*1*1 = 153
b) 获取一个三位数的个位,十位,百位?
将循环中获取到的每一个数值,使用num变量记录
Num % 10得到个位
Num / 10 % 10得到十位
Num / 10 / 10 % 10得到百位
5. while循环的完整格式
初始化语句;
while(条件判断语句) {
循环体语句;
条件控制语句;
}
while循环的执行流程
①执行初始化语句(程序从上到下执行,也必须先执行这一句)
②执行条件判断语句,看其结果是true还是false,false的话结束循环,true的话则继续执行
③循环条件满足,执行循环体语句
④执行条件控制语句
⑤继续执行条件判断语句,看其返回结果是true,还是false…以此类推
6. do...while循环的完整格式
初始化语句
do {
循环体语句;
条件控制语句;
} while(条件判断语句);
a. 对比while循环,思考do...while循环的特点是
按照顺序,程序从上到下依次执行,do...while循环会先执行循环体语句,随后再执行条件判断语句,由此得出结论,do...while循环,无论条件是否满足,都至少执行一次循环体。
7. 三种循环的区别
a. for循环和while循环,是先判断后执行
b. do...while循环是先执行后判断
c. for循环和while循环的区别
for循环内部定义的变量,在循环之后就会从内存中释放掉,再想使用就找不到了,而while控制循环的变量是定义在循环外部,循环结束后可以继续使用。(也可以将for循环的初始化语句定义在循环外部)
d. 死循环的三种书写格式是?哪一种最常用?
格式:for(;;){} while(true){} do{}while(true);
常用:while(true){}
8. 跳转控制语句 break continue
a. break终止此=整个循环
break可用于switch语句中,也可以用于循环语句,三种循环都可以
b. continue跳出当前循环,执行下一次循环。
Continue只能应用在循环中!
9. 循环嵌套
循环嵌套的执行步骤
外循环执行一次,内循环执行一圈
简单理解:整个内循环,就是外循环所控制的循环体,循环体没有执行完,是不会开始下一次循环的。
10. Random
①Random的使用步骤为:
A. 导入包 import java.util.Random;
B. 创建对象 Random r = new Random();
C. 获取随机数 r.nextInt(10); //10是举例,不是固定写法
②如果nextInt方法中传入的是20,则产生的随机数是多少?
产生的是0~19,如果想要产生1~20的随机数,需要手动修改
int num = r.nextInt(20) + 1;
1. 数组定义格式
a. 第一种:数据类型[] 数组名
示例:int[] arr double arr[] char[] arr
b. 第二种:数据类型 数组名[]
示例:int arr[] double arr[] char arr[]
2. 数组动态初始化
a. 数组的动态初始化格式
数据类型[] 数组名 = new 数据类型[数组长度];
示例:int[] arr = new int[5];
b. 数组动态初始化格式的每个内容代表含义详解
等号左边:
int: 数组的数据类型
[]: 代表这是一个数组
arr: 代表数组的名称
等号右边:
new: 为数组开辟内存空间
int: 数组的数据类型
[]: 代表这是一个数组
5: 代表数组的长度
3. 数组元素访问
a. 访问数组元素的格式是 数组名[索引];
b. 索引是给每个元素起一个编号,通过编号可以获取指定元素
c. 从0开始编号,最大取到数组长度-1
4. 内存分配
a. Java中常见的内存分配有以下两种
栈内存:存储局部变量的,使用后立即消失
堆内存:存储的是new出来的内容,使用后变成垃圾
b. 数组的默认初始化值
整数类型:0
浮点类型:0.0
字符类型:空字符
布尔类型:false
引用类型:null
5. 多个数组指向相同内存图
a. 引用数据类型在赋值时:是将内存地址值进行了赋值。
b. 多个数组引用同一个内存空间时:
任何一个数组对象对元素进行修改,都会影响到其他数组对象
6. 数组静态初始化
a. 数组静态初始化格式
完整版格式:数据类型[] 数组名 = new 数据类型[]{元素...}
简化版格式:数据类型[] 数组名 = {元素...}
b. 数组的两种初始化格式的区别
动态初始化:只给定数组长度,由系统分配默认初始化值。
静态初始化:创建数组时,直接将元素确定。
7. 数组操作的两个常见小问题
a. 数组索引越界异常
出现原因:访问了不存在的数组索引
解决方案:改成正确的索引范围即可
b. 数组空指针异常
出现原因:数组引用为null时,再去操作数组
解决方案:给数组一个真正的堆内存空间引用即可
8. 数组的遍历
a. 获取数组长度
数组名.length
b. 遍历数组的注意事项
注意循环次数是否在索引范围内,否则会发生索引越界
9. 获取数组最值
案例:
1. 方法概述
方法:是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。
方法的两个注意
A:方法必须创建才可以使用,该过程称之为(方法定义)。
B:方法创建后不能直接运行,需要手动调用,才可以执行,该过程称之为(方法调用)。
2. 方法定义和调用
a. 方法的定义格式
Public static void 方法名() {
方法体; //方法所包裹的逻辑代码
}
b. 方法的调用格式
在main方法中,通过方法名调用
方法名()
3. 带参数方法定义和调用
a. 带参方法的定义格式
Public static void 方法名(参数1, 参数2, 参数...) {
方法体;
}
参数的定义:数据类型 变量名, 数据类型 变量名...
注意:方法的参数,可以是一个,也可以是多个,如果是多个,中间需要以逗号分隔
b. 带参方法的调用格式
在main方法中,通过方法名调用,并传入对应类型的参数
方法名(参数)
c. 调用带参方法,有哪些注意事项
调用带参方法,传入的参数,无论是类型还是数量,都需要跟定义的参数类型匹配
传入的参数可以是变量,也可以是常量
4. 形参和实参
a. 形参
全程叫做形式参数,指的是定义方法的时候,方法小括号中定义的参数
例如:public static void method(int num) {}
b. 实参
全程为实际参数,指的是调用方法的时候,传入的具体数值
例如:method(10)
5. 带返回值方法定义和调用
a. public static 返回值类型 方法名(形参列表) {
方法体;
return 返回值;
}
b. 方法的返回值类型,和返回值的关系
对应关系,方法的返回值类型,必须跟返回值的类型对应,否则引发编译错误
c. 返回值的接收
带有返回值的方法调用之后,会产生一个运算后的结果,这个结果没有接收被使用的话,将毫无意义
d. Return关键字的作用
return关键字用于将方法运算的结果,返还给调用处。
6. 方法的注意事项
a. 方法与方法之前是平级关系,不允许嵌套定义。
b. 如果方法的返回值类型定义为void,则代表无返回值,可以省略return语句,也可以单独书写return 语句,后面不能加数据
c. 如果方法的返回值类型明确了具体的类型,则必须要有return语句带回一个结果。
7. 方法的通用格式
public static 返回值类型 方法名(参数) {
方法体;
Return 返回值;
}
a. 定义方法前,要思考两个明确
①明确返回值类型:知晓方法运行结束后是否有数据返回,没有写void,有的话则书写具体类型
②明确参数:明确参数的类型和数量
b. 调用方法
①void类型的方法,直接调用即可
②非void类型的方法,推荐使用变量接收调用
8. 方法重载
方法重载:在同一类中,方法名相同,参数列表不同,与返回值无关
参数列表不同:
①类型不同
②个数不同
③顺序不同(毫无意义)
9. 方法参数传递基本类型
对于基本数据类型的参数,形式参数的改变,不影响实际参数
原因:每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失
什么时间被调用
在创建对象的时候被调用
13. 构造方法使用注意事项
a. 如果没有手动书写构造方法,系统会默认提供一个无参构造。
b. 但凡是手动写了任意一个构造方法,系统将不再提供默认无参构造。
c. 构造方法之间可以重载
d. 系统根据提供的参数列表决定调用某一个构造方法,没有对应的构造方法则会报错
1. ArrayList
①ArrayList集合的介绍
ArrayList集合是一个长度可变的容器
②ArrayList集合的特点
ArrayList集合的长度是可变的
ArrayList集合底层是数组实现
③什么是泛型
泛型是一种广泛的数据类型,用于约束集合存储的元素数据类型
例如:
我们想存储字符串类型的数据,就可以这样写:ArrayList<String>
我们想存储学生类型的数据,就可以这样写:ArrayList<Student>
2. ArrayList构造和添加
①ArrayList集合的构造方法是什么?
public ArrayList() 创建一个空的集合容器
②ArrayList集合的添加方法有哪些?
public Boolean add(E e) 向集合中添加元素
public void add(int index, E e) 向集合中指定索引位置添加元素
注意:索引参数要保证在集合索引长度范围之内
3. ArrayList常用方法有哪些
public Boolean add(E e) 向集合中添加元素
public void add(int index, E e) 向集合中指定索引处添加元素
public Boolean remove(Object obj) 删除集合中指定元素
public E remove(int index) 删除集合中指定索引处的元素
public E set(int index, E e) 修改集合中指定索引处的元素
public E get(int index) 获取集合中指定索引处的元素
public int size() 获取集合的长度