8、开发工具 IDEA
1.下载安装到官网上进行下载安装
一键安装
(https://blog.jetbrains.com/idea/)
2.具体步骤
- 创建一个空项目
————————————————————
- 创建一个新模块(idea_test_one)
- 在(idea_test_one)模块下的src下创建一个包(com.itheima)
- 在com.itheima包下新建一个类(HelloJava)
- 在类中编写代码
- 在idea中执行程序
3.内容辅助键
快速生成main()方法:psvm + 回车
快速生成输出语句:sout + 回车
单行注释: ctrl + /
多行注释:ctrl + shift + /
格式化:ctrl + alt + L
提示补全代码:ctrl + J
4.模块的操作
1.新建
然后回到 8.2.2操作
2.删除
移除之后回到所在目录进行删除
可右键 到 Show in Explore一键到所在目录
3.导入
点击并重新加载jdk环境
9、数组
1.数组定义格式
1.定义
数组是指有序的元素序列。如果将有限个类型相同的变量的集合命名,那么这个名称就是数组名,而组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。
2.格式
格式一:数据类型[] 变量名
格式二:数据类型 变量名[]
注意:在使用的时候默认用第二种方法
2.数组初始化概述
1.动态初始化
格式:数据类型[] 变量名 = new 数据类型[数组长度]
int[] arr = new int[3];
左边
int:说明数组中的元素类型是 int 类型
[]:说明这是一个数组
arr:这是数组的名称
右边
new:为数组申请内存空间
int :说明数组中的元素类型
[] :说明这是一个数组
3:数组的长度,也就是数组元素的数量
3.数组元素访问
数组变量访问方式:通过下标进行访问
格式:数组名
package com.itheima;
public class DemoOne {
public static void main(String[] args) {
// 新建数组,并进行动态内存地址的分配
int[] arr = new int[3];
System.out.println(arr); // 打印出 变量为 arr的内存地址
// 依次打印出里面的元素
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
执行结果
4.内存分配
1.定义
内存分配是指在程序执行的过程中分配或者回收存储空间的分配内存的方法。内存分配方法有静态内存分配和动态内存分配两种
2.数组在初始化时,会为存储空间添加默认值
- 整数:默认值为0
- 浮点数:默认值为0.0
- 布尔值:默认值为false
- 字符:默认值时空字符
- 引用数据类型:默认值是 NULL
3.实现方式
001:每一次在动态申请地址时,有一个内存地址,当我们打印变量名称的时候就打印所在的内存地址
栈内存:存储局部变量,定义在方法中的变量,例如 arr 使用完毕,立即消失
堆内存:存储new出来的内容(实体,对象)数组在初始化时,会为存储空间添加默认值。每一个 new 出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收与 C 要很大的区别在于,地址会被回收
3.1单个数组内存图
int[] arr = new int[3];
System.out.println(arr); // 打印出 变量为 arr的内存地址
// 依次打印出里面的元素
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
// 修改数组中的值
arr[0] = 200;
arr[1] = 400;
3.2多个数组内存图
package com.itheima;
public class DemoOne {
public static void main(String[] args) {
// 新建数组1,并进行动态内存地址的分配
int[] arr1 = new int[3];
// 新建数组2,并进行动态内存地址的分配
int[] arr2 = new int[2];
System.out.println(arr1); // 打印出 变量为 arr的内存地址
System.out.println(arr2); // 打印出 变量为arr2的内存地址
// 依次打印出里面的元素
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
// 修改数组中的值
arr1[0] = 200;
arr2[1] = 400;
System.out.println(arr1[0]);
System.out.println(arr2[1]);
}
}
3.3多个数组指向相同的地址
package com.itheima;
public class DemoOne {
public static void main(String[] args) {
// 新建数组1,并进行动态内存地址的分配
int[] arr1 = new int[3];
// 新建数组2,并将数组1的内存地址赋值给了数组2
int[] arr2 = arr1;
System.out.println(arr1); // 打印出 变量为 arr的内存地址
System.out.println(arr2); // 打印出 变量为arr2的内存地址
// 修改数组1中的值
arr1[0] = 200;
arr1[1] = 400;
// 打印数组2的值
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
}
}
5.数组初始化之静态初始化
定义:初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型[] 变量名 = new 数据类型 []
简化格式:数据类型 [] 变量名 = {数据1,数据2,数据3}
int[] arr1 = {1,2,3};
System.out.println(arr1[0]);
System.out.println(arr1[1]);
6.数组操作的两个常见小问题
1.索引越界
定义:访问了数组中不存在的索引对应的元素,造成索引越界 问题
2.空间指针异常
定义:访问的数组已经不再指向堆内存的数据,造成空指针异常
注意:arr = null; 即将arr的指针也被赋值了空,指针为空,便找不到所在内存的地址
指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
指针是一个占据存储空间的实体在这一段空间起始位置的相对距离值。在C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。
7.数组常见操作
使用遍历访问所有数组元素
格式:数组名.length
package com.itheima;
// 实现随机数给数组分配值
import java.util.Random;
public class DemoOne {
public static void main(String[] args) {
// 对随机数进行新建变量
Random r = new Random();
// 动态分配数组
int[] arr = new int[10];
// 对数组赋予值
for (int i = 0;i<arr.length;i++){
// 随机生成 0——10 的数
int number = r.nextInt(10)+1;
arr[i] = number;
System.out.println("值为:"+arr[i]);
}
}
}
获取数组中的最大值
package com.itheima;
// 实现随机数给数组分配值
import java.util.Random;
public class DemoOne {
public static void main(String[] args) {
// 对随机数进行新建变量
Random r = new Random();
// 动态分配数组
int[] arr = new int[10];
// 对数组赋予值
for (int i = 0;i<arr.length;i++) {
// 随机生成 0——10 的数
int number = r.nextInt(10) + 1;
arr[i] = number;
System.out.println("值为:" + arr[i]);
}
//重新遍历数组
// 比较数组里面最大的值,首先新建变量 ,为数组的首元素;其次对数组进行遍历比较
int i = 0;
int max = arr[0];
int min = arr[0];
do {
if (arr[i] >= max){
max = arr[i];
}
else if (arr[i] < min){
min = arr[i];
}
i++;
}while (i<arr.length);
System.out.println("最大值为:"+max);
System.out.println("最小值为:"+min);
}
}