1、方法
- 定义:方法就是定义在类中的具有特定功能的一段独立小程序,用来完成功能操作
- 好处:提高代码复用性,也提高了代码的可读性
- 注释:对方法进行注释,要使用”文档注释“,并且合理的使用”快标记“
/**
* 两数相加
* @param num1 操作数1
* @param num2 操作数2
* @return 返回相加结果
*/public static int add(int num1,int num2){
int sum = num1 + num2;
return sum;
}
- 语法:
[修饰符] 返回值类型 方法名(形参列表){
方法体;
return 返回值;
}
- 注意点:
1、如果方法体中没有返回值,那么返回值类型必须是void
2、方法名要符合”标识符“的命名规则,”小驼峰“的命名规范
3、形参列表是由多个形参构成,形参与形参之间使用”,“分隔
4、return的作用:1)结束当前方法 2)结束方法时,还能返回一个数据
2、方法的声明和调用
- 方法声明的位置:必须在类中,并且在方法体和代码块之外
- 方法调用的语法:
1、暂时学习到的方法都是使用”public static“修饰的,所以直接在本类中使用”方法名(实参列表)“进行调用
2、在进行方法调用时,要注意:
1)形参和实参要相对应,也就是说,每一个实参的顺序,数据类型都要和形参相对应,并且实参个数必须等于形参个数。
2)如果没有返回值,我们在调用方法的时候,一定不要接收返回结果 - 调用方法时的内存分析
1、栈内存的特点:”先进后出“或”后进先出“
2、调用方法时的特点:当方法调用时,虚拟机会在栈内存中开辟一块区域(栈帧),用于执行该方法中的代码
3、方法结束时的特点:当方法中执行到return关键字时,就会执行弹栈操作,也就是开辟的栈帧会被销毁 - 方法使用的原则:和变量一样,都必须先声明后使用
图例:
3、方法的重载
- 定义:在同一个类中,具有相同方法名,但参数列表不同的方法,构成方法重载
核心:两同两不同
两同:同一个类;相同方法名
两不同:参数类型或参数个数不相同 - 方法重载的特点(哪些情况不构成重载)
1、返回值类型不同
2、形参名字不同
3、修饰符不同 - 好处:方法重载的出现,使同一个类中可以定义多个同名的方法,避免了方法名污染(也就是方便命名,名字太多了也不好管理)
- 调用特点:调用重载的方法时,会根据形参的个数和类型来匹配对应的方法
4、数组(一种数据结构,属于引用数据类型)
- 定义:可以存储多个”相同数据类型“的”有序“集合
- 数组的声明语法:
第一种方式:数据类型[] 数组名
第二种方式:数据类型 数组名[]
建议使用第一种方式声明,”数据类型[]“是数组类型,结构清晰,便于理解 - 数组的创建:
第一种方式:动态的创建数组
语法:数据类型[] 数组名 = new 数据类型[数组长度];
第二种方式:静态的创建数组
语法:1、数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,.....}
2、数据类型[] 数组名 ={元素1,元素2,元素3,.....}
注意:直接通过大括号创建的数组,不能作为实参和返回值
//以下写法错误
add( {11, 22} );
return {11, 22};
- 如何操作数组中的元素:使用”索引值“找到对应元素存储的位置,然后对该元素进行操作
- 数组的注意事项:
1、数组中存放的元素为相同数据类型,所以每个元素存储的空间大小是固定的,并且数组是有序的,所以可以通过每个元素存储的空间大小和索引值来计算查找元素
2、创建数组是必须指定数组的长度,数组创建后,长度不能改变,想要扩容,只能将数组进行拷贝操作
3、声明数组时,可以使用基本数据类型,也可以使用引用数据类型
4、通过索引查找元素时,需要注意数组的范围在[0, 数组长度-1],超出该范围,就会报数组下标越界异常 - 数组元素的默认值
当使用动态的创建数组时,没有给数组中存放元素,这时数组中的元素会有默认值
1、byte,short,int,long类型的数组元素默认值为0
2、float,double类型的数组元素默认值为0.0
3、boolean类型的数组元素默认值为false
4、char类型的数组元素默认值为'u\0000',也就是空格
5、引用数据类型数组元素默认值为null - 数组的常见属性:length,使用该属性,可以动态的获取数组的长度
5、数组的遍历
- 第一种方式:普通for循环
语法:
for (int i = 0; i < scores.length; i++) {
System.out.println(scores[i]);
}
优点:在遍历过程中,可以根据索引值来对数组中的元素进行操作
注意:在开发中,建议不要在循环中使用length属性来确定数组长度,因为每次循环都要判断一下length的长度,效率很低,可以在循环之前定义一个变量来存储length的值
- 第二种方式:增强for循环
语法:
for (double score : scores) {
System.out.println(score);
}
优点:语法简洁,效率较高
6、栈内存和堆内存
- 栈内存
存储局部变量:
1、当数据类型为基本数据类型时,局部变量保存的是”数据值“
2、当数据类型为引用数据类型时,局部变量保存的是”地址值“ - 栈内存特点:
1、”先进后出“或”后进先出“
2、栈内存是连续的存储空间,由虚拟机分配,效率高
3、栈内存由虚拟机分配,无需程序员操作
4、虚拟机会为每个线程分配一块栈内存,用于执行该线程中的方法 - 堆内存
存储new出来的对象和数组(数组也是对象) - 堆内存的特点:
1、堆内存是不连续的存储空间,分配灵活但效率低
2、堆内存本质是需要程序员进行操作的,但在Java语言中有”垃圾回收机制“来帮忙进行管理
3、虚拟机只有一个堆内存,被所有线程共享
7、数组的存储结构
图例: