一、IDEA
1.1 IDEA下载
官网下载地址:https://www.jetbrains.com/idea/
1.2 IDEA安装
点击下载好安装包
1.3 IDEA项目结构
1.4 IDEA常用快捷键
二、数组
2.1 数组介绍
数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。
2.2 数组定义格式
2.2.1 第一种格式
数据类型[] 数组名
示例:
int[] arr;
double[] arr;
char[] arr;
2.2.2 第二种格式
数据类型 数组名[]
示例:
int arr[];
double arr[];
char arr[];
2.3 数组的动态初始化
2.3.1 动态初始化介绍
数组动态初始化就是只给定数组的长度,由系统给出默认初始化值 。
2.3.2 动态初始化格式
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
2.4 数组元素访问
2.4.1 索引介绍
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
2.4.2 访问数组元素格式
数组名[索引];
2.5 内存分配
2.5.1 内存概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。
我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
必须放进内存中才能运行,运行完毕后会清空内存。
Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
2.5.2 Java中的内存分配
一个数组内存图:
2.6 数组静态初始化
2.6.1 什么是静态初始化
在创建数组时,直接将元素确定 。
2.6.2 静态初始化格式
完整版格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
简化版格式
数据类型[] 数组名 = {元素1,元素2,...};
2.7 数组操作两个常见问题
2.7.1 索引越界异常
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr[3]);
}
}
数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。
程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
解决方案
将错误的索引修改为正确的索引范围即可!
2.7.2 空指针异常
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
//把null赋值给数组
arr = null;
System.out.println(arr[0]);
}
}
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,空指针异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
解决方案
给数组一个真正的堆内存空间引用即可!
2.8 二维数组
2.8.1 二维数组介绍
二维数组也是一种容器,不同于一维数组,该容器存储的都是一维数组容器。
二维数组的本质还是一维数组,只不过数组中的元素不是具体的元素值,而是新的数组。
2.8.2 二维数组动态初始化
数据类型[][] 数组名 = new 数据类型[m][n];
m表示这个二维数组可以存放多少个一维数组。
n表示每一个一维数组可以存放多少个元素。
2.8.3 二维数组静态初始化
完整格式:
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2,...},{元素1,元素2,...},...}
简化格式:
数据类型[][] 数组名 = {{元素1,元素2,...},{元素1,元素2,...},...}
2.9 ArrayList
2.9.1 ArrayList 集合
集合和数组的区别:
相同点:都是存储数据的容器。
不同点:数组的容量是固定的,集合的容量是可变的。
2.9.2 ArrayList构造方法和常用方法
三、方法
3.1 方法的概述
方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
* 注意:
* 方法必须先创建才可以使用,该过程成为方法定义
* 方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用
3.2 方法的定义和调用
3.2.1 无参方法的定义和调用
定义格式:
public static void 方法名 ( ) {
// 方法体;
}
调用格式:
方法名();
3.2.2 带参方法的定义和调用
定义格式:
参数:由数据类型和变量名组成 - 数据类型 变量名
public static void 方法名 (参数1) {
方法体;
}
public static void 方法名 (参数1, 参数2, 参数3...) {
方法体;
}
调用格式:
方法名(参数);
方法名(参数1,参数2);
总结:每个方法在被调用执行的时候,都会进入栈内存,并且拥有自己独立的内存空间,方法内部代码调用完毕之后,会从栈内存中弹栈消失。
3.2.3 带返回值方法的定义和调用
定义格式:
public static 数据类型 方法名 ( 参数 ) {
return 数据 ;
}
注意:
* 方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错。
调用格式:
方法名 ( 参数 ) ;
数据类型 变量名 = 方法名 ( 参数 ) ;
3.2.4 形参和实参
形参:方法定义中的参数
等同于变量定义格式,例如:int number
实参:方法调用中的参数
等同于使用变量或常量,例如: 10 number
3.3 方法的注意事项
3.3.1 方法通用格式:
public static 返回值类型 方法名(参数) {
方法体;
return 数据 ;
}
3.3.2 方法注意事项
方法不能嵌套定义 。
void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据 。
3.4 方法的重载
3.4.1 方法重载概念
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
* 多个方法在同一个类中
* 多个方法具有相同的方法名
* 多个方法的参数不相同,类型不同或者数量不同
3.4.2 方法重载注意
重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式。
重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载。
3.5 方法的参数传递
3.5.1 方法传递基本数据类型
基本数据类型的参数,形式参数的改变,不影响实际参数。
依据:每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失。
3.5.2 方法传递引用数据类型
对于引用类型的参数,形式参数的改变,影响实际参数的值 。
依据:引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所以即使方法弹栈,堆内存中的数据也已经是改变后的结果 。
四、Debug
4.1 什么是Debug
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
4.2 Debug介绍与操作
-
如何加断点
-
选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可
-
-
如何运行加了断点的程序
-
在代码区域右键Debug执行
-
-
看哪里
-
看Debugger窗口
-
看Console窗口
-
-
点哪里
-
点Step Into (F7)这个箭头,也可以直接按F7
-
-
如何删除断点
-
选择要删除的断点,单击鼠标左键即可
-
如果是多个断点,可以每一个再点击一次。也可以一次性全部删除
-