方法的定义
方法是Java中的一种语法结构,它可以把一段代码封装成一个功能,以便重复调用
方法的完整格式
修饰符 返回值类型 方法名(参数列表){
方法代码;
return 返回值;
}
// 方法名需要又意义,一般使用驼峰命名法
需求实例1
public class demo1 {
public static void main(String[] args) {
/*
目标: 通过简单实例,掌握方法的定义和好处
实例: 求两个整数的和
*/
int c = sum(10, 11);
System.out.println(c);
int d = sum(11, 12); // 方法可以方便后续针对多种情况的重复调用
System.out.println(d);
}
public static int sum(int a, int b){
return a + b;
}
}
注意事项1
1. 方法需要调用才能执行,并不会自动执行
2. 如果方法声明了具体的返回值类型,内部必须使用return返回对应类型的数据
3. 参数列表可以有多个,也可以没有,如果有多个参数,多个参数必须用‘,’隔开,切参数不要给初始值
需求实例2
public class demo2 {
public static void main(String[] args) {
/*
目标: 根据实例掌握方法的其他定义方式
需求: 设计一个函数,实现hello world的打印
需求1: 打印三行world
需求2: 实现打印多行hello,次数由调用者决定
void: 无返回值,函数不需要返回内容
*/
printHelloWorld(); // 打印三行hello world 无参数无返回值函数
printHelloWorld(6); // 打印6行hello, 有参数无返回值函数
}
public static void printWorld(){
for (int i = 0; i < 3; i++) {
System.out.println("world");
}
}
public static void printHello(int n){
for (int i = 0; i < n; i++) {
System.out.println("hello");
}
}
}
注意事项2
1. 如果函数不需要返回数据,返回值必须声明为void,此时方法内部也不可以使用return返回数据
2. 方法如果不需要接收数据,则不需要定义形参,且调用方法时也不需要传递数据给方法了
3. 没有参数,且没有返回值类型(void)声明的方法,称为无参数、无返回值的方法...此次类推
方法使用时的常见问题
1. 方法在类中的位置放前放后无所谓,但是一个方法不能定义在另外一个方法里面
2. 方法的返回值类型时void时,方法内不能使用return返回数据(不等同于不能使用return),如果方法的返回值类型写了具体类型,那么方法内部必须返回对应类型的数据
3. return语句后面,不能在编写代码,因为后面编写的代码属于无效代码,函数执行不到这里
4. 方法不调用就不会执行,调用方法时,传递给方法的参数,必须严格匹配方法的参数情况
5. 调用由返回值的方法,有3种方式,(1)可以定义变量接收结果 (2)直接输出调用 (3)可以直接调用,而不要结果
6. 调用无返回值的方法,只有一种方式,只能直接调用
方法的运行
1. 方法在栈中运行
2. 栈的特性: 先进后出
方法的参数传递机制:值传递
-
所谓的值传递,指的时在传输实参给方法的形参的时候,传递的时实参变量中存储的值的副本
-
实参: 在方法内部定义的变量;形参: 定义方法时(…)中声明的参数
-
引用类型的参数传递,也符合值传递,但是会有一些不同的效果
public class demo3 { public static void main(String[] args) { /* 目标: 掌握方法的参数传递机制: 值传递 */ int a = 10; change(a); System.out.println("实参的值:" + a); int[] arr = {10, 20, 30}; System.out.println("传递的参数值为:"+ arr); changeArray(arr); System.out.println("函数修改值:" + arr[1]); } public static void change(int a){ System.out.println("传入的参数:" + a); a = 20; // 修改形参并不会影响到外部的实参,由于引用类型传递的是数据在内存中的地址,所以修改引用类型的数据,会影响到外部的数据 // 但是引用类型并不是传递具体的数据,而是传递的数据在内存中的值,所以也符合值传递 System.out.println("修改传入的参数为:" + a); } public static void changeArray(int[] arr){ System.out.println("形参的值为:" + arr); System.out.println("传入的参数的第二个位置的元素:" + arr[1]); arr[1] = 100; System.out.println("修改传递参数第二个位置的元素:" + arr[1]); } }
方法重载
定义: 一个类中,出现多个方法的名称相同,但是它们的形参不同,那么这些方法可以同时存在,这些方法就被称为方法重载
public class demo1 {
/**
目标: 掌握方法重载
*/
public static void main(String[] args) {
tes(); // 此时执行的是无参数、无返回值方法
tes(10); // 此时执行的是有参数、无返回值方法
}
public static void tes(){
System.out.println("这是第一个方法");
}
public static void tes(int a){
// 此时,一个类种出现两个重名方法并不会出现异常,这是因为java可以根据传递的参数来确定是那个方法要被执行
System.out.println("这是添加参数的tes方法"+ a);
}
}
方法重载的注意事项
- 一个类中,只要一些方法的名称相同、参数列表不同。那么它们就是方法重载了,其他的不管(如:修饰符、返回值类型是否一样都无所谓)
- 形参列表不同指的是:形参的个数、类型、顺序不同,并不关心形参的名称
return关键字在方法种的单独使用
在无返回值的函数中,可以使用**return;**来跳出当前方法的执行,这个时候也是没有返回值的,由于return并没有返回某个数据,所以程序并不会报错
public class demo02 {
/*
目标: 掌握return关键在在无返回值函数的使用
*/
public static void main(String[] args) {
tes(-5);
tes(5);
}
public static void tes(int a){
if(a < 0){
System.out.println("不符合格式~~");
return; // 这里return没有返回任何数据,所以并不会出现任何异常
}
for (int i = 0; i < a; i++) {
System.out.println("第"+i +":" + i);
}
}
}