方法

方法

1. 方法简介


  • Java方法是语句的集合,它们在一起执行一个功能;
    • 方法是解决一类问题的步骤的有序组合
    • 方法包含于类和对象其中
    • 方法在程序中被创建,在其他地方被引用
  • 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保证方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展
  • 方法的命名规则:首字母小写和驼峰原则;
//main方法
public static void main(String[] args) {
    //实际参数:实际调用传递给它的参数
 int sum = add(1,2);//调用add方法
    System.out.println(sum);
}
//加法
//形式参数,用来定义作用的
public static int add(int a,int b){
    return a+b;
}
  • java的方法类似于其它语言的函数,是一段用于完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:
  • 方法包含有一个方法头和一个方法体。下面是一个方法的所有部分:
    • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型;
    • 返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void;
    • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名;
    • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数;
      • 形式参数:在方法被调用时用于接收外界输入的数据
      • 实参:方法体包含具体的语句,定义该方法的功能
    • 方法体:方法体包含具体的语句,定义该方法的功能;有返回值的一定要用return返回出去。

语法:

修饰符 返回值类型 方法名(参数类型 参数名){

...

方法体

...

return 返回值;

}

2. 方法调用


  • 调用方法:对象名.方法名(实参列表);

  • Java支持两种调用方法的方式,根据方法是否返回值来选择;

    • 当方法返回一个值的时候,方法调用通常被当做一个值。例如:int larger = max(30,40);
    • 如果方法返回值是void,方法调用一定是一条语句;例如System.out.println("Hello world!");
  • 值传递和引用传递

    • 值传递:在调用函数时,将实际参数复制一份传递到函数中,这样在函数中对参数进行修改,就不会影响到原来的实际参数;(Java中都是值传递)
    • 引用传递:在调用函数时,将实际参数的地址直接传递到函数中。这样在函数中对参数进行的修改,就会影响到实际参数;

方法重载


  • 重载就是在一个类中,有相同的函数名称,但形参不同的函数;
  • 方法的重载的规则:
    • 方法名称必须相同
    • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
    • 方法的返回类型可以相同也可以不同
    • 仅仅返回类型不同不足以成为方法的重载
  • 实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型驱逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。

3. 命令行传参


  • 有时候你希望运行一个程序的时候再传递给他消息,这要靠传递命令行参数给main()函数实现;
public static void main(String[] args) {
    for (int i = 0; i <args.length ; i++) {
        System.out.println("args["+i+"]:"+args[i]);
    }
}

在自己编写的文件栏打开cmd命令栏窗口,输入javac 文件名.java生成java.class文件,接着输入java 文件名,可能会出现以下错误:

这里需要跳转到src目录上进行操作,方法是使用cd ../返回上一级,在src目录上输入java 目录下的项目名,然后添加其他的参数,即可做到命令行传参,如图所示即已成功。

可能出现的错误


解决‘javac‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件:

在设置中打开高级系统设置,点击环境变量:

用户变量中新建JAVA_HOME,变量值为jdk安装的绝对路径(可以是自定义的安装路径):

系统变量中新建JAVA_HOME,变量值为jdk安装的绝对路径(可以是自定义的安装路径):

系统变量中新建CLASSPATH,变量值为通过JAVA_HOME 引用后的路径地址,即 .;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar (需要注意的是变量值前边的.;一定不能少)

先把javac的绝对路径复制好

系统变量中找到path,选中后点击编辑,进入后点击新建:

粘贴好javac的绝对路径,一路点确定即可;

重启cmd,输入javac ,已经正常。

4. 可变参数


  • JDK1.5开始,Java支持传递同类型的可变参数给一个方法;
  • 在方法声明中,在指定参数类型后加一个省略号;
  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明;
    public static void main(String[] args) {
printMax(34,3,3,2,56,5);
printMax(new double[]{1,2,3});  
    }
    public static void printMax(double... numbers){
if(numbers.length==0){
    System.out.println("No argument passed");//numbers为空
    return;
}
double result = numbers[0];
//输出最大值
        for(int i=1;i< numbers.length;i++){
            if(numbers[i]>result){
                result=numbers[i];//冒泡排序选择最大值进行输出
            }
        }
        System.out.println("The max value is"+result);
    }

5. 递归


  • 递归就是,A方法调用A方法,自己调用自己;
  • 利用递归可以用一段简单的程序解决一些复杂的问题。它通常把一个大型的复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合;
  • 递归结构包括两个部分:
    • 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环;
    • 递归体:什么时候需要调用自身方法。
//递归,能不用就不用
public static void main(String[] args) {
    System.out.println(f(3));
}
//阶乘!
public static int f(int n){
    if(n==1||n==0){
        return 1;
    }else if(n>1){
       return n*f(n-1);
    }else{
        System.out.println("输错了");
        return -1;
    }
}
posted @ 2023-01-09 13:53  初来乍到的小蜗  阅读(62)  评论(0)    收藏  举报