大半年没碰Java了,计划使用两周用尚硅谷Java2023的课程笔记复习一下,要点记载本章中
JDK版本: v17
JUnit版本: v4.12
hamcrest-core版本: v1.3
1.JVM
JVM是什么?
Java的跨平台性
Java的自动内存管理(内存分配、内存回收)
2.JDK 与 JRE
3.Java的某些要点
统一编码
Java 中的所有字符都使用 Unicode 编码,故一个字符可以存储一个字母,一个汉字,或 其他书面语的一个字符
char 型数据用来表示通常意义上“字符”(占 2 字节)
转义字符
close()释放资源
java什么时候该写.close()释放资源?
在Java中对资源的读写最后要进行close操作
比如
Scanner: 键盘输入功能
获得随机数
如何获取[a,b]范围内的随机整数呢?
(int)(Math.random() * (b - a + 1))+a
4.变量
字符类型: char
char 型数据用来表示通常意义上“字符”(占 2 字节)
Java 中的所有字符都使用 Unicode 编码,故一个字符可以存储一个字母,一个汉字,或 其他书面语的一个字符。
字符型变量的三种表现形式:
– 形式 1:使用单引号(' ')括起来的单个字符。
例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
– 形式 2:直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中, XXXX 代表一个十六进制整数。
例如:\u0023 表示 '#'
– 形式 3:Java 中还允许使用转义字符‘\’来将其后的字符转变为特殊字符 型常量。
例如:char c3 = '\n'; // '\n'表示换行符
char 类型是可以进行运算的。因为它都对应有 Unicode 码,可以看做是一个数值。
布尔类型: boolean
不可以使用 0 或非 0 的整数替代 false 和 true,这点和 C 语言不同。
拓展:Java 虚拟机中没有任何供 boolean 值专用的字节码指令,Java 语言 表达所操作的 boolean 值,在编译之后都使用 java 虚拟机中的 int 数据类 型来代替:true 用 1 表示,false 用 0 表示。——《java 虚拟机规范 8 版》
基本数据类型转换
转换规则
隐式转换 (自动类型提升)
规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大) 的类型 。
显式转换 (强制类型转换)
规则:将取值范围大(或容量大)的类型强制转换成取值范围小(或容量小) 的类型。
将 3.14 赋值到 int 类型变量会发生什么?
产生编译失败,肯定无法赋值。
int i = 3.14; // 编译报错
想要赋值成功,只有通过强制类型转换,将 double 类型强制转换成 int 类型才 能赋值
自动类型提升是 Java 自动执行的,而强制类型转换是自动类型提升的 逆运算,需要我们自己手动执行。
- 转换格式
数据类型 1 变量名 = (数据类型 1)被强转数据值; // ()中的数据类型必须<=变量值 的数据类型
溢出与损失精度
小测试
字符串类型: String
String 不是基本数据类型,属于引用数据类型
String运算规则
运算符
赋值运算符
变量+2的推荐写法
变量+1的推荐写法
运算符优先级
- 开发建议
- 优先级表
5.流程控制
选择分支: switch
switch的条件只能是一个常量
case的穿透性
- case穿透现象:指在switch语句中,当某个case语句没有break,程序会继续执行下一个case语句。
- switch都支持哪些类型呢?
基本数据类型:byte, short, char, int
包装数据类型:Byte, Short, Character, Integer
枚举类型:Enum
字符串类型:String(Jdk 7+ 开始支持)
if-else 语句与 switch-case 语句比较
6.数组
数组(Arrays)是一种基本的数据结构,可以存储固定大小的相同类型的元素。
数组特点
数组变量声明
创建数组对象并赋值
静态创建
注意:
如果使用静态方式创建数组,那么系统会根据元素的个数自动计算数组的长度
静态方式创建数组右边的中括号里面不能写长度
静态方式的省略格式创建数组不能先声明后赋值,只能声明的同时直接赋值
错误写法
静态方式的省略格式创建数组不能先声明后赋值,只能声明的同时直接赋值
动态创建
动态:指定长度大小
遍历数组(两种)
数组元素的默认值
数组扩容与拷贝(两种方法)
Arrays.copyOf() (常用)
System.arraycopy()
拷贝,也能达到扩容的功能
格式化查看数组
数组排序(五种方法)
Arrays.sort()
最简单且最常用的排序方法,可以实现简单的升序排列
编程vlog第四天:新发现!!!Arrays.sort()的排序逻辑_哔哩哔哩_bilibili
元素是基本数据类型
可以在我的主页搜索【关键字:排序】,有一篇博客单门总结了各种排序查找
- 元素个数 < 47 时使用插入排序
- 47 <= 元素个数 < 286 时使用快速排序
- 元素个数 > 286 时使用归并排序
一维数组内存机制
区域名称 | 作用 |
---|---|
虚拟机栈 | 用于存储正在执行的每个 Java 方法的局部变量表等。局部变量表存 放了编译期可知长度 的各种基本数据类型、对象引用,方法执 行完,自动释放。 |
堆内存 | 存储对象(包括数组对象),new 来创建的,都存储在堆内存。 |
方法区 | 存储已被虚拟机加载的类信息、常量、(静态变量)、即时编译器编 译后的代码等数据。 |
本地方法栈 | 当程序中调用了 native 的本地方法时,本地方法执行期间的内存区域 |
程序计数 器 | 程序计数器是 CPU 中的寄存器,它包含每一个线程下一条要执行的 指令的地址 |
下一章: