方法函数:
方法函数是Java非常重要的一章内容、在Java语言中、函数也称之为方法。
- 什么是方法函数呢?它的好处是什么?
方法就是一段用来完成特定功能的代码片段、方法是类或对象实例的行为特征的抽象和功能的实现、在面向对象的Java语言中、一个应用程序的基本单位是类、方法是从属于类和对象的、它扮演的角色相当于行为动作。
方法对于Java程序非常重要、它能够对某些功能进行抽取成方法中的代码片段、提高开发效率、程序的可读性更强。- 方法函数的基本语法结构:
[权限修饰符][其他修饰符] 返回值类型 方法名([形式参数]){ 代码片段 [return][返回值] }
[]进行书写的都是可选的
- 方法函数的特征有哪些?
- 形式参数:
用于接收调用该方法的环境所传递过来的数据- 实际参数:
在调用方法的环境中进行实际传递的数据- 返回值:
方法在执行完毕后返回给调用该方法的环境的数据- 返回值类型:
指定需要返回给调用该方法的环境的数据类型、如不需要返回值、也需要void。- 权限修饰符:
指定改该方法被调用时调用方需要具备一定的权限- 其他修饰符:
指定该方法的环境、将直接影响到方法的生命周期或其他。- 方法函数的注意事项:
- 实际参数的数量、数据类型、次序都必须与调用方法的形参列表保持一致匹配。
- return关键字能够终止方法的执行、也能够返回数据到调用该方法的环境中。
- Java的方法和函数传递参数的时候是遵循值传递的原则(传递的都是值的副本)、基本数据类型传递的是副本的值、引用数据类型传递的是该对象引用的值(两个值指向同一个对象)
public class Main{
public static void main(String [] args){
Main main = new Main();
main .demo1();// 在方法内部输出一段话
main .demo2(3,4);// 3,4就是作为实际传递到该方法的参数 在方法内部进行运算但没有返回而是打印
System.out.println(main.demo3()+10); // 由于该方法返回的就是int类型、所以调用方法的时候直接可以将它当作是int数据类型的变量进行运算也是合法的
int i = main.demo4(5,6); // 该方法返回的是int类型 理所当然使用int数据类型的变量进行接收
System.out.println(i);
}
/**
函数定义的基本语法:
[权限修饰符][其他修饰符] 返回值类型 方法名([形式参数]){
代码片段
[return][返回值]
}
*/
// 没有参数 没有返回值的方法
public void demo1(){
System.out.println("Hello I Love Java");
}
// 有参数 没有返回值的方法
public void demo2(int a,int b){
int sum = a+b;
System.out.println(sum);
}
// 没有参数 有返回值的方法
public int demo3(){
/**
return关键字有两个作用、它既意味着方法的结束、也能够在需要返回值的时候也可以返回数据
*/
return 0;
}
// 有参数 有返回值的方法
public int demo4(int a,int b){
int sum = a+b;
/**
return关键字有两个作用、它既意味着方法的结束、也能够在需要返回值的时候也可以返回数据
*/
return a+b;
}
}
控制台结果打印:
方法函数的重载:
所谓的方法重载、指的是一个类可以定义多个相同方法名、但参数不同的方法。在调用方法的时候Java程序会根据不同的参数自动匹配对应的方法。
需要注意的是、实现重载后的方法、实际上是完全不同的方法、仅仅只是方法名相同而已。
- 重载方法的构成要素:
1.形式参数的个数、形式参数的类型、形式参数的顺序不同。 2.返回值类型不同是不能构成重载的 如: public int add(int a,int b) 和 public void add(int a,int b) public int add(int a,int b) 和 public void add(int b,int a) 这样是不构成重载的 需要注意形式参数变量名的变化和重载没有任何关系
public class OverLoadMain {
public static void main(String [] args){
System.out.println(add(1,2,3));
System.out.println(add(3,2.5));
System.out.println(add(2.5,6));
System.out.println(add(3,8));
}
// 简单的加法运算
public static int add(int a,int b ){
return a+b;
}
/*
编译报错、参数列表次序、数据类型相同 因此不构成重载
*/
public static int add(int b,int a){
}
*/
// 构成重载 方法名相同而参数个数不同
public static int add(int a,int b,int c){
return a+b+c;
}
// 构成重载 方法名相同、参数个数相同、但参数的数据类型不同
public static double add(double a,int b){
return a+b;
}
// 构成重载 方法名相同、参数个数相同、参数的数据类型(次序)不同
public static double add(int b,double a){
return a+b;
}
// 不构成重载 参数类型相同
public static double add(int a,double b){
return a+b;
}
}
递归结构:
- 什么是递归?
递归的基本思想实际就是“自己调自己”、而我们利用递归来实现一个程序解决复杂的问题、递归结构包括两个部分:
- 递归体:
调用自身方法、我们称之为递归体- 递归头:
不调用自身方法、我们称之为递归头、递归的程序必然需要递归头的存在、如果没有递归头那程序会进入死循环的状态、递归头也可以看作是递归结束的条件。
public class Main{
public static void main(String [] args){
// 方法调用
a();
}
public static void a(){
// 自己调自己
a();
}
// 该程序会出现一个非常严重的问题、由于main方法中调用了a方法 而在a方法的方法体中又调用了a方法 方法一个一个被调用但是哪个方法都还没有结束 所以使用递归必须要定义递归体和递归头 没有递归体和递归头、那么递归程序会无法得到控制
}
public class Main{
public static void main(String [] args){
a();
}
// 计数器
static int count = 0;
public static void a(){
count++;
// 定义递归头 所谓的递归头就是限制递归的条件
if(count<10){
// 递归体
System.out.println("递归第"+count+"次");
a();
}else{
// 达到递归头的限制则停止递归
System.out.println("递归程序的计数器已经达到"+count+"次了,递归关闭");
}
}
}