菜鸡的Java课笔记 第六 方法

前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式。而完整的组成方式将随着学习逐步渗透。
  1.方法的基本定义
    方法(Method(麦斯而))在一些书中也会有人将其说是  函数(Function(防渗)) 。但是两者的含义完全相同的,那什么是方法?为什么需要有方法?实际上所谓的方法指的就是一段代码封装在一个结构体之中,并且可以重复调用。
    方法的定义语法原则(本次所讲解的语法指的是在主类中定义的方法,并且由主方法直接调用。)
  2.方法调用
    java中的方法分为(1)静态方法 直接使用 类名.方法名 调用
    (2)普通方法 通过new创建对象 然后使用 对象.方法 调用

public static 返回值类型 方法名称([参数类型 变量,参数类型 变量,...]){
    方法中包含的代码;
    [return 返回值;]
}


返回值类型可以设置为两种:
   JAVA 中的数据类型:基本数据类型,引用数据类型;如果现在有返回的内容则需要通过 retum(瑞特)返回
  不返回任何的结果:void(wo的);

方法就是留给用户进行重复调用的。

public class TestDemo{
    public static void main(Srting args[]){
        printlnfo(); // 调用方法
        printlnfo(); // 调用方法
    }
    public static void printlnfo(){ // 此方法没有参数没有返回值
        System.out.println(".........................");
        System.out.println("-- Hello World! --");
        System.out.println(".........................");
    }
}


范例:定义一个可以接收参数的方法

public class TestDemo{
    public static void main(Srting args[]){
        printlnfo(10); // 调用方法
        printlnfo(100); // 调用方法
    }
    public static void printlnfo(int age){ 
        if(age > 250){
            System.out.println("您是人吗?");
        }else{
            System.out.println("您的年龄是:"+ age);
        }
    }
}

  实际上在进行方法编写的时候有其自己的定义格式:要求定义方法的单词第一个单词字母小写,而后每个单词的首字母大写。

  那么以上定义了无参无返回值,有参无返回值的方法,那么下面在来定义有参数有返回值的方法
    范例:定义一个加法操作

public class TestDemo{
    public static void main(Srting args[]){
        int result = add(10,20); // 由于返回的是int型数据,所以可以利用变量接收
        System.out.println(result);
        System.out.println(add(100,300)); // 直接将方法的返回值输出
public static int add(int x,int y){
        if(x<0){
            return 0; // 只要有返回值类型声明,那么必须使用return 返回
        }
        if(y<0){
            return 0; // 只要有返回值类型声明,那么必须使用return 返回
        }
        return x + y; // 只要有返回值类型声明,那么必须使用return 返回
    }
}

  在学习循环语句的时候学习过 break 与 continue语句,这两个语句主要是进行循环控制,合理的利用可以让循环语句之后的代码不在执行,但是必须与 if 判断一起使用。
而同样的操作在方法中也提供,如果说你的方法使用了 void 声明,那么就是可以
在方法执行过程之中直接利用“return”来结束方法调用。
  范例:利用return 结束方法调用

public class TestDemo{
    public static void main(Srting args[]){
        print(10);
        print(100);
    }
    public static void print(int age){ // 此时方法没有返回值
        if(age > 250){
            return; // 后续代码不再执行,前提:方法必须返回 void
        }
        System.out.println("年龄是:" + age);
    }
}

  不管什么情况,只要是在return之后的代码都不再执行,但是需要区分的是,如果方法返回的是 void,那么就可以直接写 return,但是如果方法本身有返回值,那么就必须在编写return的同时返回内容。

  return的常用作用有以下两种
    一种是返回参数所用的关键字,假如一个有返回值的方法执行完了之后需要返回一个参数,示例:

  public string functionTest(){
         String a = "abc";
         return a;
  }

  那么这个方法被调用之后就会返回一个值为abc的字符串,string result = functionTest();


  第二种用法是,代码执行到此处终止。
    比如当代码执行到某个地方会出现几种结果,然后其中一种结果就不能执行后续代码,这时候在那里加上一个return就可以终止后面的代码执行

    实际的开发之中是否使用方法有两个决定性的原则:
      主方法里的代码是不是太多了,如果多了,可以将其拆分到方法之中;
      在你编写代码的过程之中总是在不断的进行复制和粘贴;就可以考虑将这部分代码封装为方法


3. 方法重载(重点)
  方法重载指的是方法名称相同,参数的类型或个数不同。为了理解方法重载的意义   要求:
    现在要求定义有三个加法操作,包括两个整型相加,三个整型相加,两个小数相加。

public class TestDemo{
    public static void main(Srting args[]){
        System.out.println("两个整数相加:" + add1(10,20));
        System.out.println("三个整数相加:" + add2(10,20,30));
        System.out.println("两个小数相加:" + add3(10.2,30.4));
    }
    public static int add1(int x,int y){
        return x+y;
    }
    public static int add2(int x,int y,int z){
        return x + y + z;
    }
    public static double add3(double x,double y){
        return x+y;
    }
}

    如果说功能相同的方法名字不一样,那么在调用的时候实在是很麻烦的,这种情况下最好的解决方案就是方法重载(像这样有几十个就会很麻烦,要自己去找合适的方法,不过现在可以用方法重载来解决)
  范例:利用重载解决
    调用重载方法时会根据传递的参数类型以及个数调用不同的方法执行。

public class TestDemo{
    public static void main(Srting args[]){
        System.out.println("两个整数相加:" + add(10,20));
        System.out.println("三个整数相加:" + add(10,20,30));
        System.out.println("两个小数相加:" + add(10.2,30.4));
    }
    public static int add(int x,int y){
        return x+y;
    }
    public static int add(int x,int y,int z){
        return x + y + z;
    }
    public static double add(double x,double y){
        return x+y;
    }
}

  两类操作完成的是同一个功能,但是很明显,在调用的时候利用方法重载的操作会更加简单。

  但是在进行方重载的时候有一项重要的说明----关于 返回值的问题。在方法重载的时候本身只规定了参数的类型与个数的不同,但是并没有针对于返回值的类型是否相同进行限制。但是在实际来讲,方法重载时返回值类型一定要相同。

  方法重载时返回值类型可以不同,但是从开发的标准来讲应该相同的。


2.3 方法的递归调用
  如果以开发中出现的代码为主的画,那么递归操作几乎不会出现,但是如果你要想分析一些开发工具原理的话那么就必须使用递归。递归是迈入数据结构的第一步,但是这并不是说一下子就就可以理解递归,相反,如果真的想理解递归操作,那么可以将本次的代码自己编写50遍以上。

  所谓的递归指的是方法自己调用自己的情况。而对于递归操作一般都要满足如下操作。
    递归必须在方法上进行
    递归中必须有明确的结束条件
    递归的过程之中必须进行结束条件的变更。
  范例:利用while循环实现一个累加操作。

public class TestDemo{
    public static void main(Srting args[]){
        int x = 1;
        int sum = 0;
        while(x <= 100){
            sum += x;
            x ++;
        }
        System.out.println(sum);
    }
}

那么下面讲此代码修改为递归的调用形式。

public class TestDemo{
    public static void main(Srting args[]){
        System.out.println(sum(100));
    }
    public static int sum(int num){ // 进入到方法之中
        if(num == 1){ // 已经到了最后一个数据
            return 1; // 直接返回1
        }
        // 100+99+98+...+2+1;
        return num + sum(num -1); // 每次修改接收条件

  对于此代码的调用分析如下:
    第一次调用(主方法调用):retum 100 + sum(99);
    第二次调用(sum(99)方法):retum 99 + sum(98);
    第三次调用(sum(98)方法):retum 98 + sum(97);
    ...............................
    倒数第二次调用(sum(2)方法):retum 2 + sum(1);
    最后一次调用(sum(1)方法):if 判断条件满足,retum 1。
  最终变为了:retum 100 +99+98+......+3+2+1(if 语句);

  实际上递归操作有一件很可怕的影响:由于其操作所占用的时间(包括内存占用)的时间过长,那么有可能会造成内存的溢出。导致程序出现问题。所以不是必须用到的情况下,不建议使用递归操作。


3.总结
  方法的定义结构,但是本次的方法有限制性:只能够在主类中定义由主方法进行调用;
  方法的重载:方法名称相同,参数的类型和个数不同,方法重载对返回值类型没有要求,但是一定要统一返回值类型。

猜你喜欢

转载自www.cnblogs.com/mysterious-killer/p/9921653.html
今日推荐