day05
一、JVM的内存划分
JVM(Java Virtual Machine)Java虚拟机。Java虚拟机相当于是一个抽象化的计算机,平时代码执行的时候就是在虚拟机中执行的。
首先Java代码会被编译工具javac编译成class文件,然后再通过Java虚拟机解释成当前计算机对应的机器码。
Java虚拟机按照内存使用的方式不同,分成了如下五个部分:栈、堆、方法区、本地方法栈、程序计数器
栈: 存放的局部变量,方法执行的地方 【常用】
堆: 存放的对象(全都是new出来的内容) 【常用】
方法区: 存放的字节码对象,方法、常量、静态的变量 【常用】
本地方法栈: 存放的本地方法(C或C++写的方法)
程序计数器: 控制程序的执行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-THBnul0M-1620290959623)(img/JVM运行时数据区域.png)]
二、数组
2.1 数组的内存图
一个数组的内存图
class Demo {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("------------");
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wLA69iIw-1620290959625)(img/image-20210412094634679.png)]
两个数组的内存图
class Demo2 {
public static void main(String[] args) {
int[] arr = new int[3];
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("------------");
int[] arr2 = new int[3];
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
System.out.println("------------");
arr2[0] = 66;
arr2[1] = 77;
arr2[2] = 88;
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1XpizrB-1620290959628)(img/image-20210412100959695.png)]
两个引用指向同一个数组
class Demo3 {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("-------------");
int[] arr2 = arr;
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
System.out.println("-------------");
arr2[1] = 66;
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
System.out.println("-------------");
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vAvIudBW-1620290959630)(img/image-20210412101847862.png)]
2.2 数组的常见操作
数组的遍历
将数组中的元素从第一个开始获取一直到最后一个元素为止
class Demo4 {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
//初始版本
//System.out.println(arr[0]);
//System.out.println(arr[1]);
//System.out.println(arr[2]);
//System.out.println(arr[3]);
//System.out.println(arr[4]);
//改进版本
/*
for(int i = 0; i < 5; i++) { //i = 0 1 2 3 4
System.out.println(arr[i]);
}
*/
/*
获取数组长度的方法 length
使用:数组名.length
*/
//System.out.println(arr.length);
//最终版本
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
数组的最值
求数组中的最大值及最小值
class Demo5 {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
//1. 先定义一个擂台,擂台上先随便放一个人,假定这个人是最高的人
int max = arr[0];
//2. 遍历这个数组,获取到每一个人
for(int i = 0; i < arr.length; i++) {
//arr[i]就是获取到的每一个人
//3. 让每一个依次和擂台上的人进行比较。如果比擂台上的人高,那么就替换掉擂台上的人
if(arr[i] > max) {
max = arr[i];
}
}
//4. 输出擂台上的人,这个就是最高的人
System.out.println(max);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UGklfIzg-1620290959631)(img/image-20210412103941545.png)]
数组的查找
定义一个方法,方法可以找到数据是否在数组中存在,如果找到就返回索引,如果找不到就返回-1
class Demo6 {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 22, 55};
System.out.println(getIndex(arr, 22));
}
public static int getIndex(int[] arr, int number) {
//定义一个变量,用来存储索引,默认为-1(找不到的索引为-1)
int index = -1;
//1. 遍历传进来的数组
for(int i = 0; i < arr.length; i++){
//2. 将传入的数据number和数组中的每一个元素进行逐一的比较
if(arr[i] == number) {
//如果找到了,就将索引赋值给index
index = i;
break;
}
}
return index;
}
}
数组的排序
比如有一个数组{11, 33, 22, 55, 44} 升序排列之后为 {11, 22, 33, 44, 55}
冒泡排序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yt369e0d-1620290959633)(img/冒泡排序.gif)]
数组的反转
比如:有一个数组为{11, 22, 33,66, 44, 55},反转后为 {55, 44, 33, 22, 11}
class Demo8 {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55, 66};
/*
数组arr反转之后的结果为{66, 55, 44, 33, 22, 11}
分析过程如下:
第一步: 将数组的第1个元素和倒数第一个元素交换
arr[0] arr[arr.length-1-0]
第二步: 将数组的第2个元素和倒数第二个元素交换
arr[1] arr[arr.length-1-1]
第三步: 将数组的第3个元素和倒数第三个元素交换
arr[2] arr[arr.length-1-2]
发现规律如下:
索引为:
0 arr.length-1-0
1 arr.length-1-1
2 arr.length-1-2
变化的值都为0 1 2 正好和for循环的i变化相同
所以可以将以上三步给总结成一步为:
arr[i] arr[arr.length-1-i]
*/
//逆序
for(int i = 0; i < arr.length / 2; i++) { // i = 0 1 2
int temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
//遍历
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
}
三、开发工具IDEA
3.1 下载
官网:https://www.jetbrains.com/zh-cn/idea/download/#section=windows
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rXhWrAFL-1620290959634)(img/image-20210412180119250.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BFhvMFnd-1620290959635)(img/image-20210412180300507.png)]
推荐下载的版本2019.3.5
下载地址为:https://download.jetbrains.com/idea/ideaIU-2019.3.5.exe
3.2 安装
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SBTE0cKl-1620290959636)(img/image-20210412182711115.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mwK00CYI-1620290959637)(img/image-20210412182827904.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0A5KBvdV-1620290959638)(img/image-20210412183013939.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HiuMnvEJ-1620290959639)(img/image-20210412183128693.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NW0aUxTq-1620290959639)(img/image-20210412183235384.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vFUAkoip-1620290959640)(img/image-20210412183508422.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-71TakwTx-1620290959641)(img/image-20210412183834145.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XyYj6tXo-1620290959642)(img/image-20210412183937481.png)]
3.4 IDEA项目结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91m6QjQR-1620290959643)(img/image-20210412192758602.png)]
注意:
1. 一个项目Project中可以有多个模块Module
2. 一个模块Module中可以有多个包Package
3.5 创建一个项目及模块
1. 在Idea初试界面点击 Create New Project
2. 选择Empty Project创建空项目
3. 在自动弹出来的Project Settings中对Project进行设置,设置之后点击apply应用一下(注意:先别点击OK)
1. 进行SDK选择(一般选择jdk8或者jdk11)
2. 进行编译版本选择(和jdk版本保持一致即可)
4. 在Project Settings中的Modules中点击 + 号 创建一个模块
1. 点击 + 号之后会有一个add New Module
2. 在弹出的New Module窗口中新建一个Java Module即可
注意:
一个项目中是可以放多个模块Module的
在一个项目中添加多个Module的方式为:
1. 点击File,选择 Project Structure
2. 在弹出的Project Structure中的Modules中新建一个Module即可(方式同上)
3.6 简单配置
字体大小
方式一:一次性调节
对File-Settings-Editor-Font中的Size进行字体大小设置
方式二:通过ctrl+鼠标滚轮调节
在File-Settings-Editor中点击General,然后在右侧的Mouse中选择Change font size(Zoom)with Ctrl + Mouse Wheel
主题
3.7 快捷操作
1. main方法
在编辑界面写上 main或者 psvm
2. 输出语句
在编辑界面写上 sout
3. 单行注释
Ctrl + /
4. 多行注释
Ctrl + Shift + /
5. 删除选中的行
Ctrl + Y
6. 赋值选中的行
Ctrl + D
Ctrl + Mouse Wheel
<img src="笔记/img/image-20210105170145480.png" alt="image-20210105170145480" style="zoom: 67%;" />
##### 主题
<img src="笔记/img/image-20210105170312424.png" alt="image-20210105170312424" style="zoom:67%;" />
#### 3.7 快捷操作
```java
1. main方法
在编辑界面写上 main或者 psvm
2. 输出语句
在编辑界面写上 sout
3. 单行注释
Ctrl + /
4. 多行注释
Ctrl + Shift + /
5. 删除选中的行
Ctrl + Y
6. 赋值选中的行
Ctrl + D