目录
数组:
数组定义格式
数组动态初始化
数组元素访问
内存分配
数组静态初始化
数组操作常见的2个问题
数组遍历
获取数组最大值
方法入门和方法重载:
方法定义和调用(无参数无返回值)
带参数方法定义和调用(有参数无返回值)
带返回值方法定义和调用
方法的注意事项
方法的通用格式
方法重载
Debug 调试
Debug
数组:
数组定义格式
- 格式:
- 格式一: 数据类型[] 数组名; (推荐)
- eg: 定义一个int类型的数组: int[] arr1;
- eg: 定义一个double类型的数组:double[] arr2;
- ...
- 格式二: 数据类型 数组名[];
- eg: 定义一个int类型的数组: int arr1[];
- eg: 定义一个double类型的数组:double arr2[];
- ...
数组动态初始化
-
格式: 数据类型[] 数组名 = new 数据类型[长度];
-
解释格式:
- 左边:
- 数据类型: 用来指定数组中元素的类型
- []: 表示是一个数组
- 数组名: 自己取的名字,符合标识符命名规则和规范
- 右边:
- new: 是一个关键字,表示创建一个新数组
- 数据类型: 用来指定数组中元素的类型(和等于号左边的数据类型一致)
- 长度: 写整数,表示数组中元素的个数
-
静态初始化:
- 格式: 数据类型[] 数组名 = {值1,值2,值3,...};
数组元素访问
-
索引: 数组中的每一个元素都有一个编号,该编号是从0开始,每增加一个元素编号就+1,其中这个编号专业术语就叫做索引
-
取数组中的元素: 数组名[索引]
-
修改数组中的元素: 数组名[索引] = 值;
内存分配
- 格式一: 数据类型[] 数组名; (推荐)
- eg: 定义一个int类型的数组: int[] arr1;
- eg: 定义一个double类型的数组:double[] arr2;
- ...
- 格式二: 数据类型 数组名[];
- eg: 定义一个int类型的数组: int arr1[];
- eg: 定义一个double类型的数组:double arr2[];
- ...
-
格式: 数据类型[] 数组名 = new 数据类型[长度];
-
解释格式:
- 左边:
- 数据类型: 用来指定数组中元素的类型
- []: 表示是一个数组
- 数组名: 自己取的名字,符合标识符命名规则和规范
- 右边:
- new: 是一个关键字,表示创建一个新数组
- 数据类型: 用来指定数组中元素的类型(和等于号左边的数据类型一致)
- 长度: 写整数,表示数组中元素的个数
- 左边:
-
静态初始化:
- 格式: 数据类型[] 数组名 = {值1,值2,值3,...};
数组元素访问
-
索引: 数组中的每一个元素都有一个编号,该编号是从0开始,每增加一个元素编号就+1,其中这个编号专业术语就叫做索引
-
取数组中的元素: 数组名[索引]
-
修改数组中的元素: 数组名[索引] = 值;
内存分配
索引: 数组中的每一个元素都有一个编号,该编号是从0开始,每增加一个元素编号就+1,其中这个编号专业术语就叫做索引
取数组中的元素: 数组名[索引]
修改数组中的元素: 数组名[索引] = 值;
内存概述
- 内存是计算机中的重要原件,临时存储区域,作用是运行程序。
- 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
- 必须放进内存中才能运行,运行完毕后会清空内存。
- Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
java中的内存分配
- 目前我们只需要记住两个内存,分别是:栈内存和堆内存
| 区域名称 | 作用 |
|---|---|
| 寄存器 | 给CPU使用,和我们开发无关。 |
| 本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 |
| 堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 |
| 方法区 | 存储可以运行的class文件。 |
| 栈内存 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。 |
数组静态初始化
-
动态初始化:
- 概述: 初始化数组的时候指定数组的长度,但不指定数组中的元素,数组元素由系统给默认值
- 格式: 数据类型[] 数组名 = new 数据类型[长度]; (常见)
-
静态初始化:
-
概述: 初始化数组的时候指定数组中的元素,但不指定数组的长度,数组长度由系统默认指定
-
格式:
- 标准格式: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
- 省略格式: ``数据类型[] 数组名 = {元素1,元素2,...}; (常见)
数组操作常见的2个问题
动态初始化:
- 概述: 初始化数组的时候指定数组的长度,但不指定数组中的元素,数组元素由系统给默认值
- 格式: 数据类型[] 数组名 = new 数据类型[长度]; (常见)
静态初始化:
-
概述: 初始化数组的时候指定数组中的元素,但不指定数组的长度,数组长度由系统默认指定
-
格式:
- 标准格式: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
- 省略格式: ``数据类型[] 数组名 = {元素1,元素2,...}; (常见)
索引越界异常
-
结论: 数组的长度是固定的,索引范围是:[0,数组长度-1]
-
假设数组长度的为 3,索引范围是0~2,但是我们却访问了一个大于 2 的索引。
程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
-
解决方案
将错误的索引修改为正确的索引范围即可!
空指针异常
-
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,否则运行的时候就会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
-
解决方案
给数组一个真正的堆内存空间引用(地址)即可!
数组遍历
-
获取数组长度: 数组名.length
-
数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。
public class ArrayTest01 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
for(int i=0;i
获取数组最大值
-
最大值获取:从数组的所有元素中找出最大值。
-
实现思路:
- 定义变量,保存数组0索引上的元素
- 遍历数组,获取出数组中的每个元素
- 将遍历到的元素和保存数组0索引上值的变量进行比较
- 如果数组元素的值大于了变量的值,变量记录住新的值
- 数组循环遍历结束,变量保存的就是数组中的最大值
public class ArrayTest02 {
public static void main(String[] args) {
//定义数组
int[] arr = {12, 45, 98, 73, 60};
//定义一个变量,用于保存最大值
//取数组中第一个数据作为变量的初始值
int max = arr[0];
//与数组中剩余的数据逐个比对,每次比对将最大值保存到变量中
for(int x=1; x max) {
max = arr[x];
}
}
//循环结束后打印变量的值
System.out.println("max:" + max);// 最大值是98
}
}
-
批量修改变量名: 选中变量名 ---> shift+ fn + f6
-
修改类名名: 选中.java文件---> shift+ fn + f6---->输入新的类名--->Refactor
方法入门和方法重载:
获取数组长度: 数组名.length
数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。
-
最大值获取:从数组的所有元素中找出最大值。
-
实现思路:
- 定义变量,保存数组0索引上的元素
- 遍历数组,获取出数组中的每个元素
- 将遍历到的元素和保存数组0索引上值的变量进行比较
- 如果数组元素的值大于了变量的值,变量记录住新的值
- 数组循环遍历结束,变量保存的就是数组中的最大值
public class ArrayTest02 {
public static void main(String[] args) {
//定义数组
int[] arr = {12, 45, 98, 73, 60};
//定义一个变量,用于保存最大值
//取数组中第一个数据作为变量的初始值
int max = arr[0];
//与数组中剩余的数据逐个比对,每次比对将最大值保存到变量中
for(int x=1; x max) {
max = arr[x];
}
}
//循环结束后打印变量的值
System.out.println("max:" + max);// 最大值是98
}
}
-
批量修改变量名: 选中变量名 ---> shift+ fn + f6
-
修改类名名: 选中.java文件---> shift+ fn + f6---->输入新的类名--->Refactor
方法入门和方法重载:
方法定义和调用(无参数无返回值)
- 方法只有先定义才能使用
- 方法不会自动执行,必须调用才会执行(方法不调用,不会执行)
-
格式:
public static void 方法名(){
代码块;
}
-
调用: 方法名();
-
注意:
- 方法不调用不会执行
- 方法必须先定义,再调用
- 方法需要定义在类中,方法外(方法和方法之间是平级关系,不允许嵌套)
带参数方法定义和调用(有参数无返回值)
- 形参: 方法定义中的参数,等同于变量,如果有多个参数就使用逗号隔开
- 实参:方法调用中的参数(一般都是常量值,或者变量)
-
格式:
public static void 方法名(参数){
代码块;
}
- 定义方法参数: 数据类型 变量名
-
调用:
方法名(参数);
-
注意: 调用方法时,参数个数,参数类型,参数顺序要与定义方法的参数一致
带返回值方法定义和调用
-
定义格式:
public static 返回值类型 方法名(形参){
代码块;
return 返回值;
}
- 注意:返回值的类型要和返回值类型相匹配,否则会报错
-
调用格式:
- 直接调用: 方法名(实参);
- 赋值调用: 数据类型 变量名 = 方法名(实参);
- 输出调用: System.out.println(方法名(实参));
方法的注意事项
-
方法要先定义才能调用
-
方法不调用不会执行
-
方法不能嵌套方法(方法和方法之间是平级关系)
-
无返回值方法,方法体中一般不加return语句,如果要加return语句,只能这么写: return;,表示结束方法的执行,并且该return后面不可以添加代码
方法的通用格式
-
通用格式:
public static 返回值类型 方法名(数据类型 变量名,数据类型 变量名,...){
方法体;
[return 返回值;]
}
- 返回值类型: 其实就是返回值的数据类型,如果没有返回值,返回值类型就写void
- 形参: 定义变量,多个形参以逗号隔开,如果没有形参,小括号就空着
- 方法体: 该方法的功能代码
- 返回值: 方法执行完毕后需要返回的数据
- return: 把返回值返回到调用方法的位置; 然后结束方法的执行
- 方法分类:
- 无参数无返回值
- 无参数有返回值
- 有参数无返回值
- 有参数有返回值
-
调用方法:
- 无返回值的方法
- 直接调用: 方法名(实参);
- 有返回值的方法
- 直接调用: 方法名(实参);
- 赋值调用: 数据类型 变量名 = 方法名(实参);
- 输出调用: System.out.println(方法名(实参));
-
定义方法的套路:
- 明确返回值类型
- 明确形参
- 明确方法名
- 明确方法体
-
调用方法的套路:
- 明确调用的位置
- 明确方法是否有返回值
- 明确调用方法的方式
方法重载
-
概述: 在同一个类中,出现了多个同名的方法,并且参数列表不同,与返回值类型,修饰符无关
-
参数列表不同: 参数类型不同,参数个数不同,以及同类型参数顺序不同,与参数名没有关系
-
在调用的时候,Java虚拟机会通过参数的不同来区分同名的方法
public class MethodDemo {
public static void main(String[] args) {
//调用方法
int result = sum(10,20);
System.out.println(result);
double result2 = sum(10.0,20.0);
System.out.println(result2);
int result3 = sum(10,20,30);
System.out.println(result3);
}
//需求1:求两个int类型数据和的方法
public static int sum(int a, int b) {
return a + b;
}
//需求2:求两个double类型数据和的方法
public static double sum(double a, double b) {
return a + b;
}
//需求3:求三个int类型数据和的方法
public static int sum(int a, int b, int c) {
return a + b + c;
}
public static void sum(int a, String b) {
}
public static void sum(String a, int b) {
}
}
Debug 调试
格式:
public static void 方法名(){
代码块;
}
调用: 方法名();
注意:
- 方法不调用不会执行
- 方法必须先定义,再调用
- 方法需要定义在类中,方法外(方法和方法之间是平级关系,不允许嵌套)
- 形参: 方法定义中的参数,等同于变量,如果有多个参数就使用逗号隔开
- 实参:方法调用中的参数(一般都是常量值,或者变量)
-
格式:
public static void 方法名(参数){ 代码块; }- 定义方法参数: 数据类型 变量名
-
调用:
方法名(参数);
-
注意: 调用方法时,参数个数,参数类型,参数顺序要与定义方法的参数一致
带返回值方法定义和调用
-
定义格式:
public static 返回值类型 方法名(形参){
代码块;
return 返回值;
}
- 注意:返回值的类型要和返回值类型相匹配,否则会报错
-
调用格式:
- 直接调用: 方法名(实参);
- 赋值调用: 数据类型 变量名 = 方法名(实参);
- 输出调用: System.out.println(方法名(实参));
方法的注意事项
-
方法要先定义才能调用
-
方法不调用不会执行
-
方法不能嵌套方法(方法和方法之间是平级关系)
-
无返回值方法,方法体中一般不加return语句,如果要加return语句,只能这么写: return;,表示结束方法的执行,并且该return后面不可以添加代码
方法的通用格式
-
通用格式:
public static 返回值类型 方法名(数据类型 变量名,数据类型 变量名,...){
方法体;
[return 返回值;]
}
- 返回值类型: 其实就是返回值的数据类型,如果没有返回值,返回值类型就写void
- 形参: 定义变量,多个形参以逗号隔开,如果没有形参,小括号就空着
- 方法体: 该方法的功能代码
- 返回值: 方法执行完毕后需要返回的数据
- return: 把返回值返回到调用方法的位置; 然后结束方法的执行
- 方法分类:
- 无参数无返回值
- 无参数有返回值
- 有参数无返回值
- 有参数有返回值
-
调用方法:
- 无返回值的方法
- 直接调用: 方法名(实参);
- 有返回值的方法
- 直接调用: 方法名(实参);
- 赋值调用: 数据类型 变量名 = 方法名(实参);
- 输出调用: System.out.println(方法名(实参));
-
定义方法的套路:
- 明确返回值类型
- 明确形参
- 明确方法名
- 明确方法体
-
调用方法的套路:
- 明确调用的位置
- 明确方法是否有返回值
- 明确调用方法的方式
方法重载
-
概述: 在同一个类中,出现了多个同名的方法,并且参数列表不同,与返回值类型,修饰符无关
-
参数列表不同: 参数类型不同,参数个数不同,以及同类型参数顺序不同,与参数名没有关系
-
在调用的时候,Java虚拟机会通过参数的不同来区分同名的方法
public class MethodDemo {
public static void main(String[] args) {
//调用方法
int result = sum(10,20);
System.out.println(result);
double result2 = sum(10.0,20.0);
System.out.println(result2);
int result3 = sum(10,20,30);
System.out.println(result3);
}
//需求1:求两个int类型数据和的方法
public static int sum(int a, int b) {
return a + b;
}
//需求2:求两个double类型数据和的方法
public static double sum(double a, double b) {
return a + b;
}
//需求3:求三个int类型数据和的方法
public static int sum(int a, int b, int c) {
return a + b + c;
}
public static void sum(int a, String b) {
}
public static void sum(String a, int b) {
}
}
Debug 调试
定义格式:
public static 返回值类型 方法名(形参){
代码块;
return 返回值;
}
- 注意:返回值的类型要和返回值类型相匹配,否则会报错
调用格式:
- 直接调用: 方法名(实参);
- 赋值调用: 数据类型 变量名 = 方法名(实参);
- 输出调用: System.out.println(方法名(实参));
-
方法要先定义才能调用
-
方法不调用不会执行
-
方法不能嵌套方法(方法和方法之间是平级关系)
-
无返回值方法,方法体中一般不加return语句,如果要加return语句,只能这么写: return;,表示结束方法的执行,并且该return后面不可以添加代码
方法的通用格式
-
通用格式:
public static 返回值类型 方法名(数据类型 变量名,数据类型 变量名,...){
方法体;
[return 返回值;]
}
- 返回值类型: 其实就是返回值的数据类型,如果没有返回值,返回值类型就写void
- 形参: 定义变量,多个形参以逗号隔开,如果没有形参,小括号就空着
- 方法体: 该方法的功能代码
- 返回值: 方法执行完毕后需要返回的数据
- return: 把返回值返回到调用方法的位置; 然后结束方法的执行
- 方法分类:
- 无参数无返回值
- 无参数有返回值
- 有参数无返回值
- 有参数有返回值
-
调用方法:
- 无返回值的方法
- 直接调用: 方法名(实参);
- 有返回值的方法
- 直接调用: 方法名(实参);
- 赋值调用: 数据类型 变量名 = 方法名(实参);
- 输出调用: System.out.println(方法名(实参));
-
定义方法的套路:
- 明确返回值类型
- 明确形参
- 明确方法名
- 明确方法体
-
调用方法的套路:
- 明确调用的位置
- 明确方法是否有返回值
- 明确调用方法的方式
方法重载
-
概述: 在同一个类中,出现了多个同名的方法,并且参数列表不同,与返回值类型,修饰符无关
-
参数列表不同: 参数类型不同,参数个数不同,以及同类型参数顺序不同,与参数名没有关系
-
在调用的时候,Java虚拟机会通过参数的不同来区分同名的方法
public class MethodDemo {
public static void main(String[] args) {
//调用方法
int result = sum(10,20);
System.out.println(result);
double result2 = sum(10.0,20.0);
System.out.println(result2);
int result3 = sum(10,20,30);
System.out.println(result3);
}
//需求1:求两个int类型数据和的方法
public static int sum(int a, int b) {
return a + b;
}
//需求2:求两个double类型数据和的方法
public static double sum(double a, double b) {
return a + b;
}
//需求3:求三个int类型数据和的方法
public static int sum(int a, int b, int c) {
return a + b + c;
}
public static void sum(int a, String b) {
}
public static void sum(String a, int b) {
}
}
Debug 调试
通用格式:
public static 返回值类型 方法名(数据类型 变量名,数据类型 变量名,...){
方法体;
[return 返回值;]
}
- 返回值类型: 其实就是返回值的数据类型,如果没有返回值,返回值类型就写void
- 形参: 定义变量,多个形参以逗号隔开,如果没有形参,小括号就空着
- 方法体: 该方法的功能代码
- 返回值: 方法执行完毕后需要返回的数据
- return: 把返回值返回到调用方法的位置; 然后结束方法的执行
- 方法分类:
- 无参数无返回值
- 无参数有返回值
- 有参数无返回值
- 有参数有返回值
调用方法:
- 无返回值的方法
- 直接调用: 方法名(实参);
- 有返回值的方法
- 直接调用: 方法名(实参);
- 赋值调用: 数据类型 变量名 = 方法名(实参);
- 输出调用: System.out.println(方法名(实参));
定义方法的套路:
- 明确返回值类型
- 明确形参
- 明确方法名
- 明确方法体
调用方法的套路:
- 明确调用的位置
- 明确方法是否有返回值
- 明确调用方法的方式
-
概述: 在同一个类中,出现了多个同名的方法,并且参数列表不同,与返回值类型,修饰符无关
-
参数列表不同: 参数类型不同,参数个数不同,以及同类型参数顺序不同,与参数名没有关系
-
在调用的时候,Java虚拟机会通过参数的不同来区分同名的方法
public class MethodDemo {
public static void main(String[] args) {
//调用方法
int result = sum(10,20);
System.out.println(result);
double result2 = sum(10.0,20.0);
System.out.println(result2);
int result3 = sum(10,20,30);
System.out.println(result3);
}
//需求1:求两个int类型数据和的方法
public static int sum(int a, int b) {
return a + b;
}
//需求2:求两个double类型数据和的方法
public static double sum(double a, double b) {
return a + b;
}
//需求3:求三个int类型数据和的方法
public static int sum(int a, int b, int c) {
return a + b + c;
}
public static void sum(int a, String b) {
}
public static void sum(String a, int b) {
}
}
Debug 调试
Debug
-
概述:Debug是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
-
如何加断点
- 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可
-
如何运行加了断点的程序
- 在代码区域右键Debug执行
-
看哪里
- 看Debugger窗口
- 看Console窗口
概述:Debug是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
如何加断点
- 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可
如何运行加了断点的程序
- 在代码区域右键Debug执行
看哪里
- 看Debugger窗口
- 看Console窗口
-
点哪里
- 点Step Into (F7)这个箭头,也可以直接按F7
-
如何删除断点
- 选择要删除的断点,单击鼠标左键即可
- 如果是多个断点,可以每一个再点击一次。也可以一次性全部删除



